如何将EC2实例移动到另一个ECS集群

53次阅读
没有评论

问题描述

在使用ECS时,想知道如何将一个EC2实例从一个集群移动到另一个集群。用户有两个集群,分别是devclusterqacluster,他希望将一个EC2实例从qacluster移动到devcluster

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

要将EC2实例从一个ECS集群移动到另一个集群,需要按照以下步骤进行操作:
1. 在EC2实例上编辑/etc/ecs/ecs.config文件,将ECS_CLUSTER设置为目标集群的名称(例如devcluster)。
2. 停止所有任务/容器。
3. 删除检查点文件/var/lib/ecs/data/ecs_agent_data.json
4. 根据这里的说明,重新启动ECS agent。
为了确保EC2实例使用了正确的集群,请检查日志docker logs ecs-agent。日志中应该有类似以下的消息:

[INFO] Registration completed successfully. I am running as 'arn:aws:ecs:eu-west-1:ACCOUNT_ID:container-instance/CLUSTER_ID' in cluster 'devcluster'

请注意,depends_on属性并不能保证容器A的完全可用性。如果容器A需要一些额外的时间来准备并变为可连接状态(如数据库启动时间),则还需要在容器B连接之前等待适当的时间。

方案2

另一种方法是修改ECS agent使用的配置文件/etc/ecs/ecs.config,将其指定为另一个集群的名称。然后重新启动ECS agent,这将有效地将EC2实例移动到另一个集群。
有关ecs.config的更多信息,请参阅文档
修改后,可以通过向ECS Agent元数据服务发送HTTP请求来验证并查看新集群的显示。具体操作请参考文档
此外,还需要通知ECS集群本身。可以使用Register/Deregister API调用来实现,例如使用AWS CLI:
register-container-instance
deregister-container-instance
在ECS agent本身可能还需要进行其他清理工作,例如删除缓存的检查点文件等。具体操作请参考这里

方案3

请注意以下操作注意版本差异及修改前做好备份。
根据2021年5月的ECS优化AMI镜像更新,sudo start命令已被删除,检查点文件/var/lib/ecs/data/ecs_agent_data.json已更改为agent.db
按照以下步骤进行操作:
1. 如前所述,编辑/etc/ecs/ecs.config文件(添加ECS_CLUSTER=devcluster)。
2. 使用mv /var/lib/ecs/data/agent.db /var/lib/ecs/data/agent.db.old命令重命名代理状态文件。
3. 使用sudo systemctl restart ecs命令重新启动ECS agent。
使用systemctl status ecs命令检查代理的状态,应该显示Active: active (running)
请注意,由于我找到的Amazon在线文档仍显示旧信息,因此这个过程有点令人沮丧。感谢devops的帮助,我才能完成这个操作。

正文完