使用 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
}
我有一个使用模块的简单 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
}