1

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

例如,我有一个 terraform 模块,它创建了一个没有输出的 AWS 托管目录。在该模块中,我可以看到状态中的所有资源 - 例如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

4

1 回答 1

2

您只能访问outputs. 来自文档

terraform_remote_state 仅公开输出值

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

另一种方法是开发您自己的、完全自定义的数据源以提供您需要的信息。

于 2022-01-20T21:37:56.640 回答