是否可以访问未声明为输出的 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以提供您需要的信息。
我正在尝试从 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以提供您需要的信息。