Сопоставление диапазонов портов AWS групп безопасности в Terraform - PullRequest
0 голосов
/ 05 мая 2020

Я пытаюсь перебрать карту портов и диапазонов портов, чтобы создать группу безопасности AWS в Terraform. Для входных портов они предоставляют поле from_port и поле to_port. Это должно определять диапазон портов для определенного правила c в группе безопасности. Я могу нормально выполнить сопоставление, если правилом является один порт, поскольку оба порта - это одно и то же. Но когда правило требует диапазона портов, я не могу понять, как это сделать. Вот код, с которым я тестировал. Я думаю, что у меня правильное представление о том, как это сделать, но я сталкиваюсь с ошибками типа.

По сути, я пытаюсь использовать значение индекса from_port, чтобы найти, какой порт должен отображаться на to_port.

provider "aws" {
  region  = "us-east-2"
  profile = "default"
}

locals {
  start = [22, 33, 44] # from_ports
  end   = [25, 35, 45] # to_ports
  vpcid = "vpc-xxxxxxxxxxxx"
}

resource "aws_security_group" "traffic_secgrp" {
  name        = "traffic_sec_grp"
  description = "Allows traffic"
  vpc_id      = local.vpcid

  dynamic "ingress" {
    for_each = local.start
    content {
      from_port   = ingress.value
      to_port     = element(local.end, [index(local.start, ingress.value)])
      protocol    = "UDP"
      cidr_blocks = ["10.2.0.0/20"]
    }
  }
}

Вот ошибка, которую я получаю из строки to_port:

Error: Invalid function argument

  on main.tf line 21, in resource "aws_security_group" "traffic_secgrp":
  21:       to_port     = element(local.end, [index(local.start, ingress.value)])
    |----------------
    | ingress.value is 44
    | local.start is tuple with 3 elements

Invalid value for "index" parameter: number required.

1 Ответ

0 голосов
/ 05 мая 2020

Я выяснил свою проблему с приведенным выше кодом. В строке to_port я заключил индекс функции element в скобки, что вызвало проблему с типом. Как только я удалил эти скобки, все заработало.

Рабочая to_port строка

to_port     = element(local.end, index(local.start, ingress.value))
...