Terraform не нравятся мои переменные, которые содержат списки строк в моем блоке NACL, не могу понять, почему

#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]