没有必要容器的 AWS ECS 任务

AWS ECS task with no essential containers

我有一个应用程序作为 ECS 任务中的一组容器运行。每个容器处理来自运动碎片的记录。如果有 n 个分片,则 n 个容器将成为此任务的一部分。每个容器都会处理它的碎片,直到它到达 "end of the stream"。在那个时间点,容器写入结果并退出。当所有容器退出时,任务完成并且 lambda 处理结果。

我的问题是 ECS 要求我将至少一个容器指定为 "Essential"。如果基本容器在其他容器完成处理之前完成,则整个任务完成,所有未完成的容器退出。

有什么方法可以避免将任何容器指定为 'essential'?我希望他们完成他们的工作而不用考虑任务中的其他容器在做什么。

我最终通过向将监视非必要容器状态的任务添加另一个容器来解决此问题。

使用此代码可以让我看到其他容器的状态。

import requests
import os
import time

uri = os.getenv('ECS_CONTAINER_METADATA_URI')

r = requests.get(uri + '/task')
data = r.json()

status_map = {}
for container in data['Containers']:
  status_map[container['Name']] = container['KnownStatus']

这允许您检查其他容器的状态并在您准备好时结束任务。