Вы можете создать параметр SSM в этом прогоне Terraform, и в этом случае у вас уже будет ссылка на него, или вы можете найти его, используя источник данных . В качестве примера предположим, что вы используете источник данных:
data "aws_ssm_parameter" "foo" {
name = "foo"
}
Теперь вместо функции file()
я бы использовал функцию templatefile()
, поэтому вы можете использовать интерполяцию внутри json. Это означает, что строка в вашем шаблоне Terraform изменится на это (передавая ARN секрета, который вы хотите использовать в JSON):
container_definitions = templatefile( "../modules/ecs_service/task-definitions/service.json", {
secret1 = data.aws_ssm_parameter.foo.arn
})
Наконец, ваш JSON файл должен выглядеть как это для того, чтобы сообщить ECS найти секрет и передать его в контейнер при создании экземпляра вашей задачи:
[
{
"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"
}
]
}
]