使用 Postgres DB 更新 ECS 容器。我的数据库会重置吗?

问题描述 投票:0回答:1

我目前有一个 AWS ECS 服务,它通过 Fargate 运行一个容器,其中有一个 django 应用程序和一个 postgres 数据库。如果我更新此服务,我的容器是否会重新启动到数据库重置的程度,或者内容会保留到容器停止或更换为止?

我知道这种设计不好,我打算将我的应用程序定向到 RDS 中托管的数据库。是否可以将 postgres 数据库从我的 Fargate/ECS 容器中移植出来,以便我可以通过转换保存数据?

这是用于创建服务的当前任务定义:

{
    "family": "${SERVICE_NAME}",
    "taskRoleArn": "arn:aws:iam::xxxxxxxxx:role/ecsMyAppBackend",
    "executionRoleArn": "arn:aws:iam::xxxxxxxxx:role/ecsTaskExecutionRole",
    "networkMode": "awsvpc",
    "containerDefinitions": [
        {
            "name": "backend",
            "image": "xxxxxxxxx.dkr.ecr.eu-west-1.amazonaws.com/MyApp-backend:${VERSION}",
            "cpu": 256,
            "memory": 512,
            "memoryReservation": 512,
            "portMappings": [
                {
                    "containerPort": 8011,
                    "protocol": "tcp"
                }
            ],
            "essential": true,
            "environment" : [
                {
                    "name": "SENTRY_ENVIRONMENT",
                    "value" : "${ENVIRONMENT}"
                },
                {
                    "name": "DOMAIN",
                    "value": "${DOMAIN}"
                },
                {
                    "name" : "BASE_URL",
                    "value": "${BASE_URL}"
                },
                {
                    "name": "ENV",
                    "value": "${ENV}"
                },
               {
                   "name" : "DEBUG",
                   "value": "${DEBUG}"
               },
               {
                   "name": "POSTGRES_DB",
                   "value": "${POSTGRES_DB}" 
               },
               {
                   "name": "POSTGRES_USER",
                   "value" : "${POSTGRES_USER}"
               },
               {
                   "name": "AWS_STORAGE_PUBLIC_BUCKET_NAME",
                   "value": "${AWS_STORAGE_PUBLIC_BUCKET_NAME}"
               },
               {
                "name": "AWS_STORAGE_PRIVATE_BUCKET_NAME",
                "value": "${AWS_STORAGE_PRIVATE_BUCKET_NAME}"
               }

            ],
            "secrets" : [
                {
                    "name" :"POSTGRES_PASSWORD",                                  
                    "valueFrom": "${POSTGRES_SECRETS_ARN}:password::"
                },
                {
                    "name": "POSTGRES_HOST",
                    "valueFrom": "${POSTGRES_SECRETS_ARN}:host::"
                },
                {
                    "name" : "AWS_SES_ACCESS_KEY_ID",
                    "valueFrom": "arn:aws:secretsmanager:eu-west-1:xxxxxxxxx:secret:ses-xxxxMG:AWS_SES_ACCESS_KEY_ID::"
                },
                {
                    "name" : "AWS_SES_SECRET_ACCESS_KEY",
                    "valueFrom": "arn:aws:secretsmanager:eu-west-1:xxxxxxxxx:secret:ses-xxxxMG:AWS_SES_SECRET_ACCESS_KEY::"
                },
                {
                    "name": "SENTRY_DSN",
                    "valueFrom" : "arn:aws:secretsmanager:eu-west-1:xxxxxxxxx:secret:myApp/sentry-xxxx7G:SENTRY_DSN::"
                },
                {
                    "name" : "DJANGO_SECRET_KEY",
                    "valueFrom" : "${SECRETS_ARN}:DJANGO_SECRET_KEY::"
                }
            ],
            "logConfiguration": {
                "logDriver": "awslogs",
                "options": {
                    "awslogs-group": "/ecs/MyApp/backend-${ENVIRONMENT}",
                    "awslogs-region": "eu-west-1",
                    "awslogs-stream-prefix": "ecs"
                }
            }
        }
    ],
    "placementConstraints": [],
    "requiresCompatibilities": [
        "FARGATE"
    ],
    "cpu": "256",
    "memory": "512"
}
postgresql containers amazon-rds amazon-ecs aws-fargate
1个回答
0
投票

如果我更新此服务,我的容器是否会重新启动到数据库重置的程度,或者内容会保留到容器停止或更换为止吗?

容器不会只是“重新启动”,它将被完全删除,并且将创建一个可能在完全不同的底层主机服务器上运行的新容器。您的容器定义中没有任何内容提供任何形式的持久性,因此存储在数据库中的所有内容都将丢失。

您可以创建一个 EFS 卷并将其映射为数据库容器的数据卷,这将允许跨部署的持久性,但 EFS 太慢而无法在其上运行数据库服务器,因此您的应用程序性能将受到严重影响。

实际的解决方案是根本不在 ECS Fargate 上运行数据库。 Fargate 绝对不是运行持久数据库的 AWS 服务。您应该为数据库服务器使用 AWS RDS Postgres 或 AWS Aurora(兼容 Postgres)。

© www.soinside.com 2019 - 2024. All rights reserved.