1

我正在 ECS 中设置新服务并多次更新我的任务定义。当我这样做时,我需要编辑相应的服务并将版本更新到最新。

有没有办法在更新时使用其对应任务定义的最新版本自动更新 AWS 服务?

4

3 回答 3

1

答案是肯定的,但这是一个复杂的过程。我知道的最好方法是使用 CodePipeline 进行构建自动化,并让您的构建步骤生成一个新文件taskdef.json和一个新appspec.yml文件作为输出工件。

然后这些是部署步骤的输入。假设您已经设置了 CodeDeploy 应用程序,并且部署组链接到负载均衡器,那么您可以让 CodeDeploy 更新您的服务以使用新的任务定义。

然而,完成这项工作的关键是让生成新的代码appspec.yml找到任务定义的当前修订号并将其加 1。

在不增加修订的情况下,即使它会创建新的修订,它也只会保留在任务 def 的旧版本上。

我已经使用 SDK 完成了这项工作,但我想您可以使用一些巧妙的 CLI 脚本和jq. 例如,要查找最新版本的 taskdef:

aws ecs list-task-definitions --family-prefix <taskdef-family> --query 'taskDefinitionArns[-1]'

从那里增加修订号并构建appspec.yml包含 taskdef 的“下一个”修订的新版本并不远。

于 2021-11-16T16:33:40.580 回答
0

强制 ECS 服务重新评估任务定义并拉取新的容器镜像。利用

aws ecs update-service --cluster cluster_name --service service_name --force-new-deployment

于 2021-04-25T12:29:57.463 回答
0

我想你在这里有几个选择。第一个是,根据您更新任务定义的方式(手动?通过管道?),您可以force-new-deployment在任务更新调用之后对服务调用进行排队。

如果这是不可能的(出于某种原因),但您需要自动执行此操作,您可能需要查看利用 Event Bridge 来创建规则来拦截您正在进行的更新任务定义 api 调用,然后调用 Lambda代表您执行“强制新部署”。

于 2021-04-27T11:09:02.293 回答