首页 > 解决方案 > 没有必要容器的 AWS ECS 任务

问题描述

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

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

有没有办法可以避免将任何容器指定为“必需”?我希望他们完成他们的工作,而不考虑任务中的其他容器在做什么。

标签: amazon-web-servicesdockercontainersamazon-ecs

解决方案


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

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

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']

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


推荐阅读