Как использовать значения aws secret manager базы данных postgres в постановке задачи terraform ecs
У меня есть файл settings.py
ниже приложения django с использованием terraform , docker compose и я пытаюсь получить значение базы данных, хранящееся в aws secret manager в определении задачи ecs
settings.py
DATABASES = {
"default": {
"ENGINE": "django.db.backends.postgresql_psycopg2",
"NAME": os.environ.get("POSTGRES_DB"),
"USER": os.environ.get("POSTGRES_USER"),
"PASSWORD": os.environ.get("POSTGRES_PASSWORD"),
"HOST": os.environ.get("POSTGRES_HOST"),
"PORT": 5432,
}
}
определение задачи
resource "aws_ecs_task_definition" "ecs_task_definition" {
family = "ecs_container"
network_mode = "awsvpc"
requires_compatibilities = ["FARGATE"]
cpu = 256
memory = 512
execution_role_arn = data.aws_iam_role.fargate.arn
task_role_arn = data.aws_iam_role.fargate.arn
container_definitions = jsonencode([
{
"name" : "ecs_test_backend",
"image" : "${aws_ecr_repository.ecr_repository.repository_url}:latest",
"cpu" : 256,
"memory" : 512,
"essential" : true,
"portMappings" : [
{
containerPort = 8000
}
],
"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-region": "us-east-1",
"awslogs-group": "/ecs/ecs_test_backend",
"awslogs-stream-prefix": "ecs"
}
}
"environment" : [
{
"name": "POSTGRES_DB",
"value": "${var.POSTGRES_NAME}" <=== HERE
},
{
"name": "POSTGRES_PASSWORD",
"value": "${var.POSTGRES_PASSWORD}" <=== HERE
},
{
"name": "POSTGRES_USERNAME",
"value": "${var.POSTGRES_USERNAME}" <=== HERE
},
{
"name": "POSTGRES_PORT",
"value": "${var.POSTGRES_PORT}" <=== HERE
},
{
"name": "POSTGRES_HOST",
"value": "${var.POSTGRES_HOST}" <=== HERE
},
]
}
])
}
Приведенная ниже конфигурация var.XXX
, похоже, не работает, поскольку журналы заданий возвращают psycopg2.OperationalError: FATAL: password authentication failed for user "root"
Вероятно, потому что он не может прочитать значение.
Является ли вышеприведенный способ правильным для получения значения из AWS Secret Manager с помощью Terraform и ECS?
Вы должны использовать функцию обработки конфиденциальных данных в задачах ECS, документированную здесь.
Вы переместите переменные окружения из блока environment
в блоке secrets
, а вместо значения укажите ARN секрета. Тогда контейнер ECS будет считывать эти секреты при запуске вашего контейнера и устанавливать их в окружении контейнера.