У меня есть пакетный процесс, написанный на 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) при сбое задачи?