#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']
Это позволяет вам проверить состояние других контейнеров и завершить задачу, когда вы будете готовы.