将图像从 EC2 容器注册表部署到 Elastic Beanstalk 凭据?
Deploy image from EC2 Container Registry to Elastic Beanstalk credentials?
鉴于以下设置:
- 在本地开发并推送到 EC2 Container Registry 私有注册表的应用程序
- Elastic Beanstalk 环境设置 Docker 主机
为了部署我的应用程序,Elastic Beanstalk single container guide 说要创建一个 Dockerrun.aws.json
文件。
Elastic Beanstalk 指南 also says 要使用来自(任何)私有存储库的图像,需要将凭据文件(带有身份验证令牌和电子邮件地址)添加到 S3 存储桶。
身份验证to the EC2 Container Registry涉及查询docker login
命令可以使用的令牌,但它的有效期仅为12小时.
所以,理论上,我可以按照 Elastic Beanstalk 指南,使用 aws ecr get-login
、docker login ...
命令获取 Docker 创建我需要的配置文件,将其转换到 .dockercfg
文件并将其放在 S3 上。
如果我随后将 Dockerrun.aws.json
文件作为新应用程序版本上传到 Elastic Beanstalk,如果 12 小时还没有过去,我可以立即部署它。
我担心的是 12 小时后会发生什么?如果 Elastic Beanstalk 需要自动扩展我的应用程序并启动更多实例,如果它尝试使用 S3 存储的凭证,它将失败。或者,如果我意识到我需要回滚到我的应用程序的以前版本,我不能仅仅通过过去应用程序版本的 Elastic Beanstalk 列表来做到这一点;我需要在安装了 AWS CLI 的机器上再次执行 aws ecr get-login
、docker login ...
、上传到 S3 舞蹈?
是否有一种不那么脆弱的方法来设置 Elastic Beanstalk 和 EC2 容器注册表之间的身份验证,以便 12 小时超时不是问题?
只是在此处内联相关的 ECR FAQ answer(强调):
All you need to do is specify the Amazon ECR repository in your Dockerrun.aws.json configuration and attach the AmazonEC2ContainerRegistryReadOnly policy to your container instance role.
鉴于以下设置:
- 在本地开发并推送到 EC2 Container Registry 私有注册表的应用程序
- Elastic Beanstalk 环境设置 Docker 主机
为了部署我的应用程序,Elastic Beanstalk single container guide 说要创建一个 Dockerrun.aws.json
文件。
Elastic Beanstalk 指南 also says 要使用来自(任何)私有存储库的图像,需要将凭据文件(带有身份验证令牌和电子邮件地址)添加到 S3 存储桶。
身份验证to the EC2 Container Registry涉及查询docker login
命令可以使用的令牌,但它的有效期仅为12小时.
所以,理论上,我可以按照 Elastic Beanstalk 指南,使用 aws ecr get-login
、docker login ...
命令获取 Docker 创建我需要的配置文件,将其转换到 .dockercfg
文件并将其放在 S3 上。
如果我随后将 Dockerrun.aws.json
文件作为新应用程序版本上传到 Elastic Beanstalk,如果 12 小时还没有过去,我可以立即部署它。
我担心的是 12 小时后会发生什么?如果 Elastic Beanstalk 需要自动扩展我的应用程序并启动更多实例,如果它尝试使用 S3 存储的凭证,它将失败。或者,如果我意识到我需要回滚到我的应用程序的以前版本,我不能仅仅通过过去应用程序版本的 Elastic Beanstalk 列表来做到这一点;我需要在安装了 AWS CLI 的机器上再次执行 aws ecr get-login
、docker login ...
、上传到 S3 舞蹈?
是否有一种不那么脆弱的方法来设置 Elastic Beanstalk 和 EC2 容器注册表之间的身份验证,以便 12 小时超时不是问题?
只是在此处内联相关的 ECR FAQ answer(强调):
All you need to do is specify the Amazon ECR repository in your Dockerrun.aws.json configuration and attach the AmazonEC2ContainerRegistryReadOnly policy to your container instance role.