Estoy usando Terraform para implementar una tarea de ECS y me gustaría usar los parámetros de AWS SSM dentro de la definición de contenedor de la tarea de ECS.
Tengo 3 parámetros de SSM que me gustaría usar para anular las propiedades predeterminadas definidas en service.json. (PUERTO, PRUEBA_PROP_1, PRUEBA_PROP_2)
¿Hay alguna manera de que proporcione el ARN de estos parámetros de SSM para las variables de entorno de definición de contenedor?
Recurso de terraformación:
resource "aws_ecs_task_definition" "testapp" { family = "testapp" network_mode = "awsvpc" cpu = 256 memory = 512 container_definitions = file("../modules/ecs_service/task-definitions/service.json") requires_compatibilities = [ "FARGATE" ] execution_role_arn = "arn:aws:iam::redacted:role/ecsTaskExecutionRole" task_role_arn = "arn:aws:iam::redacted:role/ecsTaskExecutionRole" }servicio.json
[ { "name": "testapp", "image": "redacted/demoapp:latest", "portMappings": [ { "containerPort": 59817, "hostPort": 59817, "protocol": "tcp" } ], "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-group": "testappLG", "awslogs-region": "us-east-1", "awslogs-stream-prefix": "devtest" } }, "Environment": [ { "Name": "PORT", "Value": "9001" }, { "Name": "TEST_PROP_1", "Value": "Override value - test prop 1" }, { "Name": "TEST_PROP_2", "Value": "Override value - test prop 2" } ] } ]Puede crear el parámetro SSM en esta ejecución de Terraform, en cuyo caso ya tendría una referencia, o puede buscarlo mediante una fuente de datos . A modo de ejemplo, supongamos que utiliza una fuente de datos:
data "aws_ssm_parameter" "foo" { name = "foo" } Ahora, en lugar de la función file() , usaría la función templatefile() , para que pueda usar la interpolación dentro del json. Eso significa que la línea en su plantilla de Terraform cambiaría a esto (pasando el ARN de un secreto que desea usar en el JSON):
container_definitions = templatefile( "../modules/ecs_service/task-definitions/service.json", { secret1 = data.aws_ssm_parameter.foo.arn })Finalmente, su archivo JSON debería verse así para decirle a ECS que busque el secreto y lo pase al contenedor cuando cree una instancia de su tarea:
[ { "name": "testapp", "image": "redacted/demoapp:latest", "portMappings": [ { "containerPort": 59817, "hostPort": 59817, "protocol": "tcp" } ], "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-group": "testappLG", "awslogs-region": "us-east-1", "awslogs-stream-prefix": "devtest" } }, "secrets": [ { "name": "MY_SECRET", "valueFrom": "${secret1}" } ], "Environment": [ { "Name": "PORT", "Value": "9001" }, { "Name": "TEST_PROP_1", "Value": "Override value - test prop 1" }, { "Name": "TEST_PROP_2", "Value": "Override value - test prop 2" } ] } ]