我使用具有任务定义的 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/