我正在尝试为在同一 Terraform 脚本模块中创建的两个子网创建弹性 IP。我正在使用 locals 变量来设置子网列表(字符串),并想用它来创建 eips。这是我的脚本:
注意:VPC 和 2 个公共子网已在同一模块中创建。
locals {
vpc_subnet_ids = ["${aws_subnet.public_subnet_2a.id}", "${aws_subnet.public_subnet_2b.id}"]
}
resource "aws_eip" "subnet_eips" {
count = length(locals.vpc_subnet_ids)
vpc = true
}
resource "aws_eip_association" "subnet_eips_association" {
count = length(locals.vpc_subnet_ids)
vpc_subnet_ids = locals.vpc_subnet_ids[count.index]
allocation_id = aws_eip.subnet_eips[count.index].id
}
运行脚本时,出现以下错误。我在同一模块中声明了本地人。还有什么地方需要申报?
│ Error: Reference to undeclared resource
│
│ on vpc/main.tf line 196, in resource "aws_eip" "subnet_eips":
│ 196: count = length(locals.vpc_subnet_ids)
│
│ A managed resource "locals" "vpc_subnet_ids" has not been declared in module.vpc.
╵
╷
│ Error: Reference to undeclared resource
│
│ on vpc/outputs.tf line 12, in output "vpc_subnet_ids":
│ 12: output "vpc_subnet_ids" { value = locals.vpc_subnet_ids}
│
│ A managed resource "locals" "vpc_subnet_ids" has not been declared in module.vpc.
你写了
locals.vpc_subnet_ids
而不是local.vpc_subnet_ids
。不幸的是,这让 Terraform 感到困惑,因为 anything.anything_else
的语法表示“任何”类型的资源,除非第一部分是 Terraform 可识别的关键字之一。
如果您改用
local.vpc_subnet_ids
那么您应该不会再看到此错误。
因为您使用了“locals”,Terraform 认为您打算将其作为一种资源类型,因此它正在模块中的其他地方寻找
resource "locals" "vpc_subnet_ids"
块,这当然不存在,因为您实际上并不打算这样做一个资源。