AWS ECR Cross Region Replication
跨Region复制镜像之前是AWS ECR缺失的功能,不过可以通过Cloudformation实现(https://github.com/aws-samples/amazon-ecr-cross-region-replication)。
在reInvent2020中,终于发布了ECR的Cross Region Replication (CRR)新功能 😄
CRR有以下优点:
可以将镜像复制到其他帐号/区域, 减少了拉取镜像时带来的网络延迟,部署上线更快。 高可用,毕竟同一份镜像分布在几个区域。 使用场景 假设有两个团队,开发团队位于欧洲(eu-west-1),运维团队位于美国(us-west-2)。
开发团队打包完镜像后,需要同步到运维团队所在的region。
有了CRR后,开发团队只需要通过CodePipeline将镜像上传到eu-west-1区域的仓库,此镜像就会自动同步到us-west-2区域,于是运维团队可以将此镜像部署到EKS/ECS上。
CRR实践 我们将实现上面的场景,将上传到eu-west-1的镜像自动同步到us-west-2。
默认情况下,CRR功能是关闭的,要在eu-west-1的ECR开启CRR:
复制的目标区域是us-west-2:
在eu-west-1创建一个仓库(下面全是通过cli创建,也可以通过console创建):
aws ecr create-repository --repository-name crr-test --region eu-west-1 创建完成后,在控制台显示如下:
在eu-west-1进行仓库登录授权:
aws ecr get-login-password --region eu-west-1 | \ docker login --username AWS --password-stdin \ 123456789012.dkr.ecr.eu-west-1.amazonaws.com 将上面的123456789012替换成真实的AWS帐户ID
将镜像上传到源区域 (eu-west-1):
docker pull nginx docker tag nginx:latest 123456789012.dkr.ecr.eu-west-1.amazonaws.com/crr-test docker push 123456789012.dkr.ecr.us-west-2.amazonaws.com/mservice:42 将上面的123456789012替换成真实的AWS帐户ID
经过上面的步骤,镜像成功上传到了eu-west-1区域,现在切换到us-west-2区域进行验证:
aws ecr get-login-password --region us-west-2 | \ docker login --username AWS --password-stdin \ 123456789012.