【发布时间】:2021-09-24 14:53:53
【问题描述】:
Terraform v1.0.0 提供者:aws v3.49.0
我使用模块中的 for_each 创建了动态 AWS 子网资源。
资源创建工作正常,但是无法输出动态创建的资源,并且找不到合适的文档。
子网模块是
resource "aws_subnet" "generic" {
vpc_id = var.vpc_id
cidr_block = var.cidr_block
map_public_ip_on_launch = var.public_ip_on_launch
tags = {
Name = var.subnet_tag_name
Environment = var.subnet_environment
}
}
定义了简单的模块输出
output "subnet_id" {
value = aws_subnet.generic.id
}
然后从根模块,我在列表变量上创建一个 for_each 循环,以从模块创建多个动态资源
module "subnets" {
source = "../modules/networking/subnet"
for_each = var.subnets
vpc_id = "vpc-09d6d4c17544f3a49"
cidr_block = each.value["cidr_block"]
public_ip_on_launch = var.public_ip_on_launch
subnet_environment = var.subnet_environment
subnet_tag_name = each.value["subnet_tag_name"]
}
当我在根模块中没有定义输出的情况下运行它时,事情会正常创建。当我尝试定义输出时问题就来了
output "subnets" {
value = module.subnets.*.id
description = "Imported VPC ID"
}
出现这个错误
│ Error: Unsupported attribute
│
│ on output.tf line 2, in output "subnets":
│ 2: value = module.subnets.*.id
│
│ This object does not have an attribute named "id".
我尝试了不同的输出定义。希望获得有关如何正确定义使用 for_each 模块动态创建的实例输出的指导。
【问题讨论】:
-
[*]和.*只能用于列表。此资源使用for_each,因此它输出map而不是list。我想看看你的变量文件是什么样子的
标签: terraform terraform-provider-aws