Использование переменной списка для задачи ECS в container_definitions с terraform - PullRequest
0 голосов
/ 27 ноября 2018

В terraform я пытаюсь передать переменную (список) в модуль, который мы создали.Эту переменную необходимо использовать в ресурсе aws_ecs_task_definition в container_definitions.
. Сейчас я только начинаю с пустого списка по умолчанию, определенного как переменная:

variable "task_enviornment" {
  type        = "list"
  default = []
}

Определение моей задачи ECSвыглядит так:

resource "aws_ecs_task_definition" "ecs_task_definition" {
  family                   = "${var.ecs_family}"
  network_mode             = "awsvpc"
  task_role_arn            = "${aws_iam_role.iam_role.arn}"
  execution_role_arn       = "${data.aws_iam_role.iam_ecs_task_execution_role.arn}"
  requires_compatibilities = ["FARGATE"]
  cpu                      = "${var.fargate_cpu}"
  memory                   = "${var.fargate_memory}"

  container_definitions =<<DEFINITION
  [
    {
      "cpu": ${var.fargate_cpu},
      "image": "${var.app_image}",
      "memory": ${var.fargate_memory},
      "name": "OURNAME",
      "networkMode": "awsvpc",
      "environment": "${jsonencode(var.task_enviornment)}",
      "logConfiguration": {
        "logDriver": "awslogs",
        "options": {
          "awslogs-group" : "${aws_cloudwatch_log_group.fargate-logs.name}",
          "awslogs-region": "us-east-1",
          "awslogs-stream-prefix": "demo"
        }
      },
      "portMappings": [
        {
        "containerPort": ${var.app_port},
        "hostPort": ${var.app_port}
        }
      ]
    }
  ]
  DEFINITION
}

Часть, с которой у меня проблема с частью "environment":

"environment": "${jsonencode(var.task_enviornment)}",

Я пробовал несколько разных способов заставить это работать.

Если я делаю "environment": "${jsonencode(var.task_enviornment)}", Я получаю ECS Task Definition container_definitions is invalid: Error decoding JSON: json: cannot unmarshal string into Go struct field ContainerDefinition.Environment of type []*ecs.KeyValuePair

Если я делаю "environment": "${var.task_enviornment}", или "environment": ["${var.task_enviornment}"],
Я получаю At column 1, line 1: output of an HIL expression must be a string, or a single list (argument 8 is TypeList) in: Тогда он просто выводит содержимое container_definitions

Я также попытался добавить значения по умолчанию и получал похожие сообщения об ошибках.Однако мне нужно иметь возможность обрабатывать никакие отправляемые значения, поэтому пустой список.

variable "task_enviornment" {
  type        = "list"
  default = [
    {
      "name" = "BUCKET",
      "value" = "test"
    }
  ]
}

1 Ответ

0 голосов
/ 27 ноября 2018

После долгих исследований и свежего взгляда на это решение было найдено.Я не уверен, почему это исправляет это, и я чувствую, что это, вероятно, ошибка.
Необходимо сделать 2 вещи, чтобы это исправить.

  1. Удалить type = "list" из определения переменной.

    variable "task_environment" { default = [] }

  2. Удалить кавычки при использовании переменной:
    "environment": ${jsonencode(var.task_environment)},

...