amazon-ecs - 如何在ecs中持久化数据量?

标签 amazon-ecs

我使用具有任务定义的 ecs 服务创建了一个 ecs 集群。任务定义包含挂载点。当我停止任务时,ecs 服务会重新启动它并为任务定义提供一个新的容器 ID,这会导致数据丢失.如何在任务定义重启时持久化数据量?

最佳答案

我建议您使用 EFS 卷

如果使用 Amazon ECS 优化的 AMI(Red Hat),您必须在 EC2 实例上安装软件包 < strong>nfs-utils 来处理该文件系统。

然后您可以创建一个/mnt/efs 目录,并在实例/etc/fstab 中文件一个条目:

<YOUR EFS CLUSTER DOMAIN NAME>:/ /mnt/efs nfs4 nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,fsc 0 0

在您的服务定义中,您将能够声明诸如 /mnt/efs/myvolume 之类的卷,这些卷将在您的 EC2 实例 中共享。

然后运行 ​​sudo mount -a 来激活这个新的网络卷。


而且因为您不想在每个创建的实例上都这样做,所以您可以在 EC2 实例 创建的用户数据 部分添加这组代码屏幕(或启动配置创建屏幕,如果是自动缩放组)。不要忘记使用您自己的 EFS 集群域名进行编辑。

Content-Type: multipart/mixed; boundary="==BOUNDARY=="
MIME-Version: 1.0

--==BOUNDARY==
MIME-Version: 1.0
Content-Type: text/text/x-shellscript; charset="us-ascii"
#!/bin/bash
yum install -y nfs-utils

mkdir "/mnt/efs"
echo "<YOUR EFS CLUSTER DOMAIN NAME>:/ /mnt/efs nfs4 
nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,fsc 0 0" >> /etc/fstab
mount -a
--==BOUNDARY==--

它将在创建实例时为您完成所有这些步骤。

如果使用限制性安全组,您还需要添加对 NFS 网络端口的访问权限(如果我提醒得好,则为 2049)。

关于amazon-ecs - 如何在ecs中持久化数据量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47191114/

相关文章:

amazon-web-services - AWS ECS Fargate 自动缩放 - 它如何缩小选择要终止的任务?

amazon-web-services - Cfn-Lint : Property "ExecutionRoleArn" has no valid Refs to Resources at Resources/TaskDefinition/Properties/ExecutionRoleArn/Ref

amazon-web-services - 我应该使用 AWS Elastic Beanstalk 还是 Amazon EC2 Container Service (ECS) 来扩展 Docker 容器?

docker - 将多个 docker 容器部署到 AWS ECS

amazon-web-services - 如何根据其中运行的容器动态修改正在运行的ECS实例的安全组?

amazon-ecs - Amazon ECS Fargate : static ip address

amazon-web-services - AWS ECS 定期作业 - 在实例中自动扩展

Docker:能够从主机但不能从容器远程登录到远程机器

amazon-web-services - 如何获取/设置AWS ECS容器实例角色

docker - 如何诊断 ECS Fargate 任务启动失败?