AWS ECS:强制重新部署 ECR 中新的最新映像

Ste*_*fan 2 amazon-web-services amazon-ecs gitlab gitlab-ci amazon-ecr

我知道在这个方向上已经有无数的问题,但不幸的是我还没有找到正确的答案。如果帖子已经存在,请在此处分享链接。

我有几个 gitlab CI/CD 管道。第一个管道使用 Terraform 为基于 Fargate 的 ECS 集群构建完整的基础设施。第二个/第三个管道创建前端和后端的夜间构建,并将带有“最新”标签的 Docker 镜像推送到(暂存)AWS 账户的 ECR 中。

我现在想要实现的是,重新部署相应的 ECS 任务,以便使用最新的 Docker 镜像。我实际上认为有一种方法可以通过 CloudWatch Events 或其他任何方式来做到这一点,但我在这里找不到一个很好的起点。一种解决方法是在 CI/CD 管道中安装 AWS CLI,然后使用“强制新部署”进行服务更新。但这对我来说似乎并不优雅。这里有更好的方法吗?

状况:

  • 解决方案必须完全自动化(在 AWS 或 gitlab CI/CD 中)
  • 切换到 AWS CodePipeline 不在讨论范围内
  • 理想情况下尽可能接近 AWS 标准。我想避免由于可维护性而执行大量操作的大量 lambda 函数。

非常感谢!

Ste*_*fan 6

好的,对于所有对答案感兴趣的人。我是这样解决的:我在 CICD 管道中执行以下 AWS CLI 命令

aws ecs update-service --cluster <<cluster-name>> --service <<service-name>> --force-new-deployment --region <<region>>
Run Code Online (Sandbox Code Playgroud)

不是我正在寻找的解决方案,但它有效。

  • 不错的反对票。现在正在工作。那么,我该怎么说呢?[AWS CLI 文档](https://docs.aws.amazon.com/cli/latest/reference/ecs/update-service.html) 说:如果更新的 Docker 映像使用与现有任务中相同的标签定义您的服务(例如 my_image:latest ),您无需创建任务定义的新修订版。您可以使用forceNewDeployment 选项更新服务。部署启动的新任务启动时会从存储库中提取当前图像/标签组合。 (5认同)
  • 它有效,但需要注意的是,使用最新标签来部署映像是一种反模式。例如:如果新镜像有问题,则无法回滚,因为标签相同(“最新”) (2认同)
  • 是的你是对的。这就是为什么不支持开箱即用的原因。但有时你还是需要它。:) (2认同)