如何跨账号、跨区域/可用区迁移AWS ECS及跨区域VPC迁移Docker容器
AWS ECS 迁移方案汇总
一、跨账号跨区域/可用区迁移ECS
镜像迁移
先将源账号ECR中的镜像复制到目标账号对应区域的ECR仓库:- 若目标账号无对应仓库,先创建:
aws ecr create-repository --repository-name my-image --region <目标区域> - 执行跨账号镜像复制:
aws ecr copy-image --source-region <源区域> --source-image-uri <源账号ECR镜像URI> --region <目标区域> --destination-image-uri <目标账号ECR镜像URI>
注意:需确保源ECR仓库权限策略允许目标账号复制,或操作双方账号的用户有对应ECR读写权限
- 若目标账号无对应仓库,先创建:
导出并适配任务定义
- 从源账号导出任务定义JSON:
aws ecs describe-task-definition --task-definition <任务定义名称> --region <源区域> > task-def.json - 编辑JSON文件:替换镜像URI为目标账号ECR地址,将任务角色、执行角色替换为目标账号已创建的同权限IAM角色,移除源账号专属资源ARN。
- 从源账号导出任务定义JSON:
记录集群与服务配置
记录源ECS集群类型(EC2/Fargate)、服务的核心配置:任务数量、负载均衡规则、自动扩缩容策略、网络模式等。目标账号准备资源
- 在目标区域创建同类型的ECS集群:EC2类型需配置EC2实例、Auto Scaling组;Fargate类型直接创建集群即可。
- 配置目标区域的网络资源:子网、安全组(规则匹配源环境,适配目标VPC网络逻辑)。
导入任务定义并部署服务
- 在目标账号注册修改后的任务定义:
aws ecs register-task-definition --cli-input-json file://task-def.json --region <目标区域> - 创建ECS服务,按照之前记录的配置设置任务数、负载均衡、自动扩缩容等参数,关联目标VPC的子网和安全组。
- 在目标账号注册修改后的任务定义:
验证迁移
检查服务状态、任务启动情况,测试业务功能是否正常运行。
二、同账号跨VPC(不同区域)迁移ECS容器
镜像复制到目标区域ECR
参照跨账号迁移的镜像复制步骤,将源区域ECR的镜像复制到目标区域的ECR仓库。导出并调整任务定义
- 导出源任务定义JSON,替换镜像URI为目标区域ECR地址。
- 修改网络配置:将
networkConfiguration中的子网、安全组ARN替换为目标VPC的对应资源ARN;若使用awsvpc模式,确保目标VPC子网和安全组规则满足容器网络访问需求。 - 调整IAM角色:若任务角色包含区域相关权限,确保目标区域的角色配置匹配。
目标VPC资源准备
- 在目标区域VPC内创建符合需求的子网(Fargate需根据业务选择公有/私有子网)、安全组(开放必要端口与访问规则)。
- 确认目标区域ECS集群已存在,无集群则创建对应类型的集群。
部署服务到目标VPC
- 注册修改后的任务定义到目标区域。
- 创建ECS服务,指定目标VPC的子网和安全组,配置任务数、负载均衡(需在目标区域创建对应负载均衡并关联)等参数。
验证与流量切换
确认目标服务运行正常后,逐步将业务流量切换至目标服务,最终停止源区域的ECS服务。
内容的提问来源于stack exchange,提问作者Subhajeet Paria
相关产品推荐
相关产品推荐

