AWS Fargate против Batch против ECS для процесса обработки один раз в день - PullRequest
0 голосов
/ 15 октября 2018

У меня есть пакетный процесс, написанный на PHP и встроенный в контейнер Docker.По сути, он загружает данные из нескольких веб-сервисов, выполняет некоторые вычисления (в течение ~ 1 часа) и отправляет вычисленные данные в другой веб-сервис, затем завершает работу контейнера (с кодом возврата 0, если все в порядке, 1, если где-то произошел сбой)).Во время процесса некоторые журналы пишутся на STDOUT или STDERR.Пакет должен запускаться один раз в день.

Мне было интересно, какой сервис AWS лучше всего использовать для планирования, выполнения и мониторинга моего пакетного процесса:

  • в самом началеЯ использовал EC2-машину с crontab : здесь нет функции высокой доступности, поэтому я решил переключиться на более PaaS-подход.
  • тогда я использовал Elastic Beanstalkдля Docker , с неработающим веб-сервером (только для ответа на Healthcheck) и Crontab внутри контейнера, чтобы разбудить мою пакетную команду один раз в день.С правилом автоматического вызова min = 1 max = 1 у меня есть HA (если сбой контейнера или сбой виртуальной машины, он перезапускается AWS)
  • , но теперь, чтобы быть более эффективным, я решил перейти к некоторым Служба ECS , и у меня есть подход, при котором мне не нужно, чтобы экземпляры EC2 просыпались 23/24 даром.Поэтому я попробовал Fargate.
  • с Fargate Я определил свою задачу (тип Fargate, а не тип EC2) и настроил на ней все.
  • Я создаю Cluster для выполнения своей задачи: я могу запустить свою задачу «вручную, один раз», поэтому я знаю, что все настройки корректны.

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

  • Кажется, все работает нормально, когда я использовал Запланированная задача особенность ECS: запуск контейнера вовремя, запуск процесса, затем остановка контейнера.Но в CloudWatch отсутствуют некоторые показатели: CPUReservation и CPUUtilization не сообщаются.Кроме того, нет способа узнать, вышел ли пакет с кодом завершения 0 или 1 (все выполнение остановлено со статусом «STOPPED»).Поэтому я не могу отправить сигнал CloudWatch, если выполнение контейнера не удалось.

  • Я использую функцию «Службы» Fargate, но она не может обрабатывать пакетный процесс, потому что контейнер запускается каждый разэто останавливается.Это нормально, потому что у контейнера нет демона.Нет возможности запланировать услугу.Я хочу, чтобы мой контейнер был активен только тогда, когда он должен работать (один раз в день в течение максимум 1 часа).Но пропущенные метрики правильно отображаются в CloudWatch.

Вот мои вопросы: каковы наиболее подходящие управляемые сервисы AWS для запуска контейнера один раз в день, чтобы он выполнял свою задачуи есть ли средство отчетности для отслеживания выполнения (загрузка ЦП, длительность пакета), включая тревогу (SNS) при сбое задачи?

1 Ответ

0 голосов
/ 26 декабря 2018

У нас была та же проблема с выявлением неудачных заданий.Я предлагаю вам взглянуть на пакет AWS, где журналы для заданий FAILED доступны в журналах CloudWatch;Взгляните здесь .Еще одна вещь, которую вы должны учитывать, это общая стоимость владения тем решением, которое вы в конечном итоге выберете.Фаргейт в этом отношении довольно дорогой.

...