使用 for_each 和 toset 查看模块的 Terraform 输出

view Terraform output from module using for_each and toset

我有一个使用模块的简单 terraform 脚本,该脚本创建多个 s3 存储桶:

main.tf:

variable "bucket_name"{
    type = list
    description = "name of bucket"
}

module "s3" {
    source = "../modules/s3"
    for_each = toset(var.bucket_name)
    bucket_name = "${each.key}"
}

outputs.tf

output "arn" {
  description = "ARN of the bucket"
  value       = module.s3.arn
}

names.tfvars:

bucket_name = ["bucket-a", "bucket-b"]

modules/s3/main.tf:

resource aws_s3_bucket "mybucket" {
    bucket = var.bucket_name
    }

modules/s3/variables.tf

variable "bucket_name" {
  type    = string
  default = ""
}

modules/s3/outputs.tf

output "arn" {
  description = "Name of the bucket"
  value       = aws_s3_bucket.mybucket.arn
}

我遇到的问题是当我 运行 一个计划时出现以下错误:

│     │ module.s3 is object with 2 attributes
│
│ This object does not have an attribute named "arn".

我正在尝试访问生成的存储桶的 arn,但不确定哪里出错了

由于您正在使用 for_each,因此您必须访问模块的各个实例,例如 module.s3["bucket-a"].arn

如果您想获取模块生成的所有存储桶的列表,那么它应该是:

output "arn" {
  description = "ARN of the bucket"
  value       = values(module.s3)[*].arn
}