是否可以访问未声明为输出的 Terraform 远程状态中的所有资源

Is it possible to access all resources in a terraform remote state that aren't declared as outputs

我正在尝试从 terraform 远程状态获取一些引用,并注意到 terraform state 资源/数据与使用 terraform_remote_state 数据对象之间存在一些差异。

例如,我有一个创建 AWS 托管目录的 terraform 模块,没有输出。在该模块中,我可以看到该州的所有资源 - 例如terraform state show aws_directory_service_directory.ad 提供有关目录的详细信息 - 目录 ID、DNS 服务器地址等。

$ terraform state list
aws_directory_service_directory.ad
$ terraform state show aws_directory_service_directory.ad
# aws_directory_service_directory.ad:
resource "aws_directory_service_directory" "ad" {
    access_url        = "REDACTED"
    alias             = "REDACTED"
    dns_ip_addresses  = []
    .... etc ....
}

如果我随后创建一个新模块并添加一个 terraform_remote_state 数据对象,我将无法访问该目录的任何属性 - data.terraform_remote_state.ad.outputs 是空的。在这个新模块中,如果我只有远程状态数据对象,并应用(没有资源),然后使用 terraform console 并显示 data.terraform_remote_state.ad,它看起来像:

$ terraform console
> data.terraform_remote_state.ad
{
  "backend" = ".."
  "config" = { remote_state config shown here }
  "outputs" = {}
}

因此资源处于状态,但不能直接访问。这是预期的行为吗?有没有办法访问远程状态的资源,或者我需要将属性添加到输出中并使用 data.terraform_remote_state.ad.outputs.whatever_attributes?

您只能访问 outputs。来自 docs:

terraform_remote_state only exposes output values

您必须修改其他设置的父模块并添加所需的输出。

另一种方法是开发您自己的,完全custom data source以提供您需要的信息。