ECS Fargate 中的数据库持久性

Vis*_*wan 5 mongodb amazon-ecs amazon-efs aws-fargate

我们正在 ECS Fargate 中运行 MongoDB 容器。ECS 服务启动正常,数据库可访问。

但是,我们都知道容器存储是短暂的,如何使其持久化呢?我尝试按照 AWS 文档挂载 efs 文件系统。服务已创建并且任务运行正常,但我无法再访问数据库。比如,我什至无法登录。

就 EFS 而言,我尝试了两个版本 - 未加密的和加密的。

我的 MongoDB 任务定义如下:(已删除传递用户名和密码参数的部分)

{
    "taskDefinitionArn": "arn:aws:ecs:us-east-2:1234567890:task-definition/mongo_efs_test_1215:2",
    "containerDefinitions": [
        {
            "name": "mongo_efs_container_1215",
            "image": "public.ecr.aws/docker/library/mongo:latest",
            "cpu": 0,
            "portMappings": [
                {
                    "containerPort": 27017,
                    "hostPort": 27017,
                    "protocol": "tcp"
                }
            ],
            "essential": true,
            "entryPoint": [],
            "command": [],
            "environment": [],
            "mountPoints": [
                {
                    "sourceVolume": "efs-disk",
                    "containerPath": "/data/db"
                }
            ],
            "volumesFrom": [],
            "logConfiguration": {
                "logDriver": "awslogs",
                "options": {
                    "awslogs-group": "/ecs/mongo_efs_test_1215",
                    "awslogs-region": "us-east-2",
                    "awslogs-stream-prefix": "ecs"
                }
            }
        }
    ],
    "family": "mongo_efs_test_1215",
    "taskRoleArn": "arn:aws:iam::1234567890:role/ecsTaskExecutionRole",
    "executionRoleArn": "arn:aws:iam::1234567890:role/ecsTaskExecutionRole",
    "networkMode": "awsvpc",
    "revision": 2,
    "volumes": [
        {
            "name": "efs-disk",
            "efsVolumeConfiguration": {
                "fileSystemId": "fs-dvveweo837af981fa",
                "rootDirectory": "/",
                "transitEncryption": "DISABLED",
                "authorizationConfig": {
                    "iam": "DISABLED"
                }
            }
        }
    ],
    "status": "ACTIVE",
    "requiresAttributes": [
        {
            "name": "com.amazonaws.ecs.capability.logging-driver.awslogs"
        },
        {
            "name": "ecs.capability.execution-role-awslogs"
        },
        {
            "name": "ecs.capability.efsAuth"
        },
        {
            "name": "com.amazonaws.ecs.capability.docker-remote-api.1.19"
        },
        {
            "name": "ecs.capability.efs"
        },
        {
            "name": "com.amazonaws.ecs.capability.task-iam-role"
        },
        {
            "name": "com.amazonaws.ecs.capability.docker-remote-api.1.25"
        },
        {
            "name": "com.amazonaws.ecs.capability.docker-remote-api.1.18"
        },
        {
            "name": "ecs.capability.task-eni"
        }
    ],
    "placementConstraints": [],
    "compatibilities": [
        "EC2",
        "FARGATE"
    ],
    "requiresCompatibilities": [
        "FARGATE"
    ],
    "cpu": "256",
    "memory": "512",
    "runtimePlatform": {
        "operatingSystemFamily": "LINUX"
    },
    "registeredAt": "2022-12-15T12:06:34.477Z",
    "registeredBy": "arn:aws:iam::1234567890:root",
    "tags": []
}
Run Code Online (Sandbox Code Playgroud)

有人可以指导我吗?我为此苦苦挣扎了很长时间。非常感谢任何帮助。

谢谢。