访问子模块的输出变量时出现"不支持的属性"错误



大师!

我正在开发Terraform模块,为生产和非生产环境提供NAT资源。有两个存储库,一个用于Terraform模块,另一个用于每个帐户的实时环境(例如:dev、stage、prod.(

访问network/nat模块的输出变量时出现问题。这让我很累。请参阅下文。

  • 用于Terraform模块(sre-iac模块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模块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-live/dev/services/wink/network/main.tf我无法访问名为module.wink_nat.eip_ids的输出变量。当我运行terraform planterraform 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的代码片段

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的代码片段

resource "aws_eip" "for_nat" {
count = length(var.target_subnets)
vpc      = true
}

最后,这里是main.tf的代码片段。(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]


}

我在这个问题上纠结了一天。我需要地形大师的帮助。

请给我你的好建议。事先非常感谢。

干杯!

您的production模块具有count元属性。要引用模块,您必须使用索引,如:

value = module.production[0].eip_ids

最新更新