Задача AWS ECS без необходимых контейнеров

#amazon-web-services #docker #containers #amazon-ecs

#amazon-веб-сервисы #docker #контейнеры #amazon-ecs

Вопрос:

У меня есть приложение, которое запускается как группа контейнеров в задаче ECS. Каждый контейнер обрабатывает записи из фрагмента kinesis. Если имеется n сегментов, то n контейнеров будут частью этой задачи. Каждый контейнер обрабатывает свой сегмент до тех пор, пока не достигнет «конца потока». В этот момент контейнер записывает результат и завершает работу. Когда все контейнеры завершают работу, задача завершена, и лямбда-модуль обрабатывает результаты.

Моя проблема в том, что ECS требует, чтобы я обозначил хотя бы один из контейнеров как «Необходимый». Если основной контейнер завершит работу до того, как другие контейнеры завершат свою обработку, то вся задача завершится и все незавершенные контейнеры завершатся.

Есть ли способ избежать обозначения любого из контейнеров как «необходимого»? Я хотел бы, чтобы они завершили свою работу без какого-либо учета того, что делают другие контейнеры в задаче.

Ответ №1:

В итоге я решил эту проблему, добавив в задачу еще один контейнер, который будет отслеживать состояние несущественных контейнеров.

Использование этого кода позволяет мне видеть состояние других контейнеров.

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

Это позволяет вам проверить состояние других контейнеров и завершить задачу, когда вы будете готовы.