使用 Terraform (AWS) 进行标记时缺少逻辑

Missing logic in tagging with Terraform (AWS)

我在 AWS 中为网络接口创建标签时遇到问题

我创建了一个 aws_ec2_tag 资源,并使用可用区域的嵌套名称标记了每个创建的网络接口,但是, 标签 没有按预期运行(如图所示)。

AWS 网络接口

现在的样子:

UNMANAGED | EU-WEST-1A  eu-west-1b
UNMANAGED | EU-WEST-1B  eu-west-1c
UNMANAGED | EU-WEST-1C  eu-west-1a

预期外观:

UNMANAGED | EU-WEST-1A  eu-west-1a
UNMANAGED | EU-WEST-1B  eu-west-1b
UNMANAGED | EU-WEST-1C  eu-west-1c

这是main.tf

resource "aws_ec2_tag" "def_eni_sqs_private" {
   count        = length(var.availability_zones)
   resource_id  = element(flatten([for interface in aws_vpc_endpoint.sqs: interface.network_interface_ids]), count.index)
   key          = "Name"
   value        = join(" | ", [ UNMANAGED, upper(element(var.availability_zones, count.index)) ])
}

请帮我解决这个逻辑

这里要求的是变量availability_zones

variable "availability_zones" { 
    type = list(string)
    default = data.aws_availability_zones.network_zones.names
}

正如我在这一行中看到的那样 count = length(var.availability_zones) 你认为接口的数量与 Azs 的数量相同 但是如果你在同一个 AZ 中有多个接口怎么办,所以我认为它应该是 count = length(aws_vpc_endpoint.sqs.network_interface_ids)

下一行还有一个是aws_vpc_endpoint.sqs.network_interface_ids的return类型是一个set not alist,所以你可以把它转换成一个list。 最后一个是从接口本身读取 AZ 的值,所以你的代码可以是这样的:

data "aws_network_interface" "transfer_eni" {
  for_each = aws_vpc_endpoint.sqs.network_interface_ids
  id = each.value
}

resource "aws_ec2_tag" "def_eni_sqs_private" {
  count        = length(aws_vpc_endpoint.sqs.network_interface_ids)
  resource_id  = 
  data.aws_network_interface.transfer_eni[keys(data.aws_network_interface.transfer_eni)[count.index]].id
  key          = "Name"
  value        = join(" | ", [ UNMANAGED, upper
 (data.aws_network_interface.transfer_eni[keys(data.aws_network_interface.transfer_eni 
   )[count.index]].availability_zone) ])}