使用 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) ])}
我在 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) ])}