将 EBS 卷挂载到 ECS 任务

Mount an EBS volume to ECS Task

使用 AWS CDK 我创建了一个 ASG + ECS 集群和一个外部 EBS 卷。

df -h
/dev/nvme0n1p1   30G  9.6G   21G  32% /
/dev/nvme1n1    200G  237M  200G   1% /mnt

注意:驱动器由 UserData 格式化和装载,因此在任何容器启动之前应该准备好。

我的容器使用 ENTRYPOINT 启动,

ENTRYPOINT ["/usr/bin/sh", "/opt/startup.sh"]

容器使用 startup.sh 启动正常,但现在我想将 /mnt 目录从主机挂载到容器中,我该怎么做?

在同一台服务器上,如果我 运行 docker run -p 80:80 -v /mnt:/opt httpd /mnt 目录安装正常,所以我需要一种方法来控制 ECS 任务。

完成此操作的最佳方法是使用 docker 卷插件,这是完成此操作的 CDK 代码。

我觉得这篇文章很有帮助

https://aws.amazon.com/blogs/compute/amazon-ecs-and-docker-volume-drivers-amazon-ebs/

    const EBSVolumeName = 'data-volume'
    cluster.addAsgCapacityProvider(capacityProvider)
    const taskDefinition = new ecs.Ec2TaskDefinition(this, 'TaskDef', {
      volumes:[{ //https://aws.amazon.com/blogs/compute/amazon-ecs-and-docker-volume-drivers-amazon-ebs/
        name: EBSVolumeName,
        dockerVolumeConfiguration:{
          autoprovision:true,
          scope: ecs.Scope.SHARED, //a shared volume is for use cases where the volume lifecycle is independent of the ECS task.
          driver: 'rexray/ebs',
          driverOpts:{
            volumetype: 'gp3',
            size:'200',
          }
        }
      }]
    });

const appTask = taskDefinition.addContainer('DefaultContainer', {//define the container})

appTask.addMountPoints({sourceVolume:EBSVolumeName, containerPath: '/mnt', readOnly: false})