正在从远程状态调用值



我有一个模块cluster,它启动GKE集群和相关的GCS桶。其后端是一个名为cluster_tf_state_bucket的GCS存储桶

我已经在这个模块中定义了一个输出

output "vault_storage_bucket_name" {
value = "${google_storage_bucket.vault_storage.name}"
}

一旦我运行代码,我就会得到输出

✗ terraform output
vault_storage_bucket_name = vault-storage

现在,我有了另一个模块vault,在该模块中,我需要从使用不同GCS后端存储桶的另一模块调用vault_storage_bucket_name的值。

因此,在我的vault模块的主.tf中,我正在做一些类似的事情

terraform {
required_version = ">= 0.12.2"
}
terraform {
backend "gcs" {
bucket = "app_tf_state_bucket"
prefix = "vault"
}
}
data "terraform_remote_state" "cluster_vault" {
backend = "gcs"
config = {
bucket  = "cluster_tf_state_bucket"
}
}
module "vault" {
source                = "../../../modules/vault"
env                   = "test"
region                = "europe-west5"
storage_bucket_name   = "${data.terraform_remote_state.cluster_vault.vault_storage_bucket_name}"

但当我运行这个代码时,我会得到

Error: Unsupported argument
on main.tf line 24, in module "vault":
24:   storage_bucket_name   = "${data.terraform_remote_state.cluster_vault.vault_storage_bucket_name}"
An argument named "storage_bucket_name" is not expected here.

我通过将以下内容添加到`variables.tf文件中解决了上述问题

variable "storage_bucket_name"{
type = "string"
}

现在我遇到错误

Error: Unsupported attribute
on main.tf line 24, in module "vault":
24:   storage_bucket_name   = "${data.terraform_remote_state.cluster_vault.vault_storage_bucket_name}"
This object has no argument, nested block, or exported attribute named
"vault_storage_bucket_name".

我在这里错过了什么?

上游状态快照的输出值通过一个名为outputs的属性暴露在terraform_remote_state上,因此您需要将其包含在表达式中:

storage_bucket_name   = data.terraform_remote_state.cluster_vault.outputs.vault_storage_bucket_name

注意.vault_storage_bucket_name之前的额外.outputsoutputs属性是一个映射值,因此您也可以在表达式中将映射作为一个整体使用。例如,如果您希望大量引用这些远程属性并希望简化引用,则可能需要创建一个本地值:

locals {
vault_cluster = data.terraform_remote_state.cluster_vault.outputs
}
module "vault" {
source                = "../../../modules/vault"
env                   = "test"
region                = "europe-west5"
storage_bucket_name   = local.vault_cluster.vault_storage_bucket_name
}

最新更新