gpt4 book ai didi

amazon-web-services - 如何保持最后 X 个 ECS 任务定义处于事件状态?

转载 作者:行者123 更新时间:2023-12-02 09:21:15 25 4
gpt4 key购买 nike

我有以下 Terraform 代码来使用新任务定义更新服务:

resource "aws_ecs_task_definition" "app_definition" {
family = "my-family"

container_definitions = "${data.template_file.task_definition.rendered}"
network_mode = "bridge"
}

resource "aws_ecs_service" "app_service" {
name = "my-service"
cluster = "my-cluster"
task_definition = "${aws_ecs_task_definition.app_definition.arn}"
desired_count = "1"
iam_role = "my-iam-role"
}

更新我的服务时,我的任务定义的最后一个修订版变为非事件状态。因此,我在 ECS 控制台中尝试手动回滚到之前的版本时无法选择它:

Error: No active task definition found

理想情况下,我希望保持最新的 X 修订版处于事件状态,这样如果出现问题,我始终可以通过控制台手动回滚。

我怎样才能实现这一目标?

最佳答案

Terraform 目前不允许这样做,其资源生命周期模型意味着当您替换某些内容时(任务定义是不可变的),Terraform 必须创建一个新的并销毁旧的。

使用 ECS 任务定义也无法真正被销毁,而只是被标记为非事件状态,因为当前部署的任务可能正在使用它,直到服务将它们更新为新的任务定义。

有两种常见的方法可以处理这个问题,并且需要能够回滚到任务定义的先前版本。

第一个就是不要使用 Terraform 来管理初始创建之外的任务定义,而是使用 AWS ECS CLI 工具之类的工具来执行此操作。

另一个选项,也是我使用的选项,是让我的 CI(在我们的例子中是 Gitlab CI)生成一个 Docker 镜像,标记有要部署的应用程序的提交 SHA,然后 Terraform 将任务定义更新为apply 上的新提交 SHA 标记图像以及使用新任务定义 ARN 更新 ECS 服务。

当我们想要回滚时,我们使用 CI 的能力回滚到不同的提交,仅使用旧提交 SHA 启动部署作业,从而部署旧镜像。

这使得 Terraform 非常不知道正在部署的内容,并使 CI 系统负责部署所需的版本,该版本通常是最新的,但有时是特定的提交(如果我们手动单击部署),当然还有回滚时的目标先前版本.

这确实意味着您无法通过 AWS 控制台启动回滚,但我实际上很喜欢这一点,因为我希望 CI 系统成为随时部署内容的事实来源。

关于amazon-web-services - 如何保持最后 X 个 ECS 任务定义处于事件状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51781565/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com