Задача AWS ECS без необходимых контейнеров - PullRequest
0 голосов
/ 06 марта 2019

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

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

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

1 Ответ

0 голосов
/ 06 марта 2019

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...