#terraform
Вопрос:
Я хотел создать правило, в котором использовался бы ряд блоков cidr, чтобы сократить количество правил. Кажется, я не могу заставить terraform принимать переменные или вывод данных в виде строк
код:
data "aws_ip_ranges" "az_s3" {
regions = ["region-1"]
services = ["s3"]
}
variable "wan_range" {
description = "WAN cidr ranges"
type = list(string)
default = ["10.0.0.0/8", "172.16.0.0/16", "192.168.0.0/24"]
}
resource "aws_network_acl" "NACL_1" {
vpc_id = aws_vpc.sec_vpc.id
subnet_ids = [aws_subnet.private_subnet.id]
count = length(var.sd_wan_range)
egress = [
{
protocol = "tcp"
rule_no = 100
action = "allow"
cidr_block = data.aws_ip_ranges.az_s3.cidr_blocks
from_port = 80
to_port = 80
icmp_code = 0
icmp_type = 0
ipv6_cidr_block = null
},
{
protocol = "tcp"
rule_no = 200
action = "allow"
cidr_block = var.wan_range[count.index]
from_port = 32768
to_port = 65535
icmp_code = 0
icmp_type = 0
ipv6_cidr_block = null
}
]
Вот ошибка из плана:
├────────────────
│ │ count.index is 0
│ │ data.aws_ip_ranges.az_s3.cidr_blocks is list of string with 6 elements
│ │ var.wan_range is list of string with 3 elements
│
│ Inappropriate value for attribute "egress": element 2: attribute "cidr_block": string required.
Комментарии:
1. В чем заключается ценность
sd_wan_range
?
Ответ №1:
Вам data.aws_ip_ranges.az_s3.cidr_blocks
также нужно проиндексировать. cidr_blocks
Атрибут представляет собой список.
напр.
cidr_block = data.aws_ip_ranges.az_s3.cidr_blocks[count.index]