Ecs 服务不更新任务定义

Lah*_*ana 9 amazon-ec2 amazon-web-services docker amazon-ecs

在 ecs 集群中,我有一个运行着 2 个 ec2 实例的服务。我更新了任务定义以获取新的 docker 镜像。但即使有新的任务定义,旧的任务定义仍在运行。

我已使用以下命令更新任务定义和服务。

aws ecs register-task-definition --family service90-task --cli-input-json file://service90-task.json

aws ecs update-service --cluster service90-cluster --service service90-service --desired-count 0

TASK_REVISION=`aws ecs describe-task-definition --task-definition service90-task | egrep "revision" | tr "/" " " | awk '{print $2}' | sed 's/"$//'`

aws ecs update-service --cluster service90-cluster --service service90-service --task-definition service90-task:${TASK_REVISION} --desired-count 2
Run Code Online (Sandbox Code Playgroud)

我尝试了几次,但无法弄清楚我哪里出错了。我想让 ecs 服务运行新的任务定义而不是旧的。

Lah*_*ana 7

后来我发现,不更新任务的原因是期望计数设置为 2,并且只有 2 个 EC2 实例可用。因此,即使任务已更新,ECS 代理也会尝试保留所需的计数。

解决方案 - 拥有一个额外的 EC2 实例(在本例中为 3 个 EC2 实例)。或者有一个比首选任务数多的实例。

通过这种方式,新的任务定义可以在额外的实例上运行。在额外的 EC2 实例上稳定后,ECS 代理将耗尽其他两个实例上旧任务定义的连接,同时负载均衡器将流量重定向到更新的实例。ECS 代理用新的任务定义替换旧的任务定义。然后它将所需的计数保持为 2。