Terraform - список требуемой строки (cidr_blocks в AWS) - PullRequest
0 голосов
/ 15 января 2020

В Terraform у меня возникают проблемы при составлении списка, который будет храниться в переменной.

При выполнении terraform plan меня спрашивают о cidr_blocks (это должен быть список строк).

Я пытался набрать несколько «форм», которые могут представлять список строк, но всегда получаю ошибку. Примеры:

1-я попытка:

$terraform plan
...
var.monitoring_access_ips_mysystem
  Enter a value: "10.180.1.0/24", "10.180.2.0/25", "10.180.3.0/23"

2-я попытка:

var.monitoring_access_ips_mysystem
  Enter a value: ["10.180.1.0/24", "10.180.2.0/25", "10.180.3.0/23"]

3-я попытка:

var.monitoring_access_ips_mysystem
  Enter a value: '["10.180.1.0/24", "10.180.2.0/25", "10.180.3.0/23"]'

4-я попытка:

var.monitoring_access_ips_mysystem
  Enter a value: "["10.180.1.0/24", "10.180.2.0/25", "10.180.3.0/23"]"

5-я попытка:

var.monitoring_access_ips_mysystem
  Enter a value: "10.180.1.0/24"

Для любой попытки ошибка всегда одинакова:

Error: Incorrect attribute value type

  on ecs/security_group.tf line 10, in resource "aws_security_group" "ecs-cluster-sg":
  10:     cidr_blocks = var.monitoring_access_ips_mysystem

Inappropriate value for attribute "cidr_blocks": list of string required.

И файл ecs/security_group.tf выглядит следующим образом ecs / security_group.tf:

resource "aws_security_group" "ecs-cluster-sg" {
  name   = "${var.app_name}-cluster-sg"
  vpc_id = var.vpc_id

  ingress {
    description = "Ingress from monitoring VPC on custom port"
    from_port   = 80
    to_port     = 80
    protocol    = "tcp"
    cidr_blocks = var.monitoring_access_ips_mysystem
  }
  ...

В каком допустимом формате я могу набирать / передавать IP-адреса, чтобы он принимался как «список строк»?

1 Ответ

3 голосов
/ 15 января 2020

Ввод пользовательского интерфейса (то, что вы видите, когда появляется запрос после запуска команды Terraform без определенных переменных) поддерживает только строковые значения , поэтому, если вы хотите передать что-то, что не является строкой, вам понадобится сделать это не в интерактивном режиме. Это может быть одна из перечисленных опций в документации по переменным . Это:

  • В рабочем пространстве Terraform Cloud.
  • По отдельности с параметром командной строки -var.
  • В определениях переменных (.tfvars) файлы, указанные в командной строке или автоматически загружаемые.
  • Как переменные среды.

В вашем случае вы можете запустить план с помощью следующей команды:

terraform plan -var='monitoring_access_ips_mysystem=["10.180.1.0/24", "10.180.2.0/25", "10.180.3.0/23"]'

Если это не то, что вероятно, будет меняться при каждом запуске Terraform, тогда обычно вместо этого следует поместить в файл terraform.tfvars, например:

monitoring_access_ips_mysystem = [
  "10.180.1.0/24",
  "10.180.2.0/25",
  "10.180.3.0/23",
]
...