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

AWS ECS: Force redeployment on new latest image in ECR

我知道在这个方向上已经有无数的问题,但遗憾的是我还没有找到正确的答案。如果 post 已经存在,请在这里分享 link。

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

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

条件:

非常感谢!

作为一般性评论,不建议始终推送相同的容器标记,因为在出​​现故障时回滚到以前的版本会变得非常困难。

一个合适的选择是使用 git 标签。 假设您正在部署版本 v0.0.1 您可以创建一个文件 app-version.tf,其中将包含您可以在 ecs 服务的任务定义中引用的变量 backend-version = v0.0.1。 使用 git describe.

可以为容器创建做同样的事情

因此,您会为每个 git 标记获得一个新的任务定义,并且只需更改 terraform 配置中的值即可回滚。

使用摘要或唯一 immutable tags 来引用图像是有益的。管道推送图像后,它可以:

  1. 获取图片的 digest/unique 标签
  2. 创建任务定义的新修订
  3. 使用新任务定义触发 ECS 部署。

正如 sgramo93 所提到的,最大的好处是可以通过部署任务定义的旧版本来回滚您的应用程序。

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

aws ecs update-service --cluster <<cluster-name>> --service <<service-name>> --force-new-deployment --region <<region>>

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