В 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"
}
]
}