【发布时间】:2022-08-19 20:48:13
【问题描述】:
大师!
我正在开发 Terraform 模块,以为生产和非生产环境提供 NAT 资源。有两个存储库,一个用于 Terraform 模块,另一个用于每个帐户的实时环境(例如:dev、stage、prod..)
访问network/nat 模块的输出变量时出现问题。
这让我很累。请参考下文。
- 用于 Terraform 模块 (sre-iac-module repo)
❯ tree sre-iac-modules/network/nat/
sre-iac-modules/network/nat/
├── main.tf
├── non_production
│ └── main.tf
├── outputs.tf
├── production
│ ├── main.tf
│ ├── outputs.tf
│ └── variables.tf
└── variables.tf
- 用于实时环境(sre-iac-modules repo)
❯ tree sre-iac-modules/network/nat/
sre-iac-modules/network/nat/
├── main.tf
├── non_production
│ └── main.tf
├── outputs.tf
├── production
│ ├── main.tf
│ ├── outputs.tf
│ └── variables.tf
└── variables.tf
在主代码sn-p中,sre-iac-live/dev/services/wink/network/main.tf
我无法访问名为module.wink_nat.eip_ids 的输出变量。
当我运行terraform plan 或terraform console 时,我总是遇到以下错误.
│ Error: Unsupported attribute
│
│ on ../../../../../sre-iac-modules/network/nat/outputs.tf line 2, in output \"eip_ids\":
│ 2: value = module.production.eip_ids
│ ├────────────────
│ │ module.production is tuple with 1 element
│
│ This value does not have any attributes.
╵
这是../../../../../sre-iac-modules/network/nat/outputs.tf and main.tf
output \"eip_ids\" {
value = module.production.eip_ids
# value = [\"a\", \"b\", \"c\"]
}
----
main.tf
module \"production\" {
source = \"./production\"
count = var.is_production ? 1 : 0
env = \"\"
region_id = \"\"
service_code = \"\"
target_route_tables = []
target_subnets = var.target_subnets
}
module \"non_production\" {
source = \"./non_production\"
count = var.is_production ? 0 : 1
}
但是,如果我使用value = [\"a\", \"b\", \"c\"],那么效果很好!
我不知道是什么问题。
下面是./sre-iac-modules/network/nat/production/outputs.tf的代码sn-p
output \"eip_ids\" {
value = aws_eip.for_nat[*].id
# value = [aws_eip.nat-gw-eip.*.id]
# value = aws_eip.for_nat.id
# value = [\"a\", \"b\", \"c\"]
}
下面是./sre-iac-modules/network/nat/production/main.tf的代码sn-p
resource \"aws_eip\" \"for_nat\" {
count = length(var.target_subnets)
vpc = true
}
最后,这里是main.tf 代码 sn-p。 (sre-iac-live/dev/services/wink/network/main.tf)
module \"wink_vpc\" {
.... skip ....
}
module \"wink_nat\" {
# Relative path references
source = \"../../../../../sre-iac-modules/network/nat\"
region_id = \"${var.region_id}\"
env = \"${var.env}\"
service_code = \"${var.service_code}\"
target_subnets = module.wink_vpc.protected_subnet_ids
is_production = true
depends_on = [module.wink_vpc]
}
我在这个问题上停留了一天。 我需要 Terraform Guru 的帮助。
请给我你的好建议。 非常感谢你。
干杯!
-
您的
production模块具有count属性。请尝试:value = module.production[0].eip_ids -
@MarkB,哦...谢谢你教我。我还不熟悉 Terraform。您的 cmets 对我帮助很大。现在效果很好!
-
@MarkB 请留下您的评论作为答案。我会选择你的答案:) 再次感谢你。
标签: amazon-web-services terraform devops