Terraform 脚本的局部变量问题

问题描述 投票:0回答:1

我正在尝试为在同一 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.
terraform terraform-provider-aws amazon-vpc
1个回答
0
投票

你写了

locals.vpc_subnet_ids
而不是
local.vpc_subnet_ids
。不幸的是,这让 Terraform 感到困惑,因为
anything.anything_else
的语法表示“任何”类型的资源,除非第一部分是 Terraform 可识别的关键字之一。

如果您改用

local.vpc_subnet_ids
那么您应该不会再看到此错误。

因为您使用了“locals”,Terraform 认为您打算将其作为一种资源类型,因此它正在模块中的其他地方寻找

resource "locals" "vpc_subnet_ids"
块,这当然不存在,因为您实际上并不打算这样做一个资源。

© www.soinside.com 2019 - 2024. All rights reserved.