Планирование остановки / запуска экземпляра EC2, когда он не используется развертыванием Beanstalk или задачей ECS? - PullRequest
0 голосов
/ 25 мая 2018

У меня есть образ Docker, содержащий код Python и сторонние двоичные исполняемые файлы.Есть только исходящие сетевые запросы.Образ должен запускаться ежечасно, а каждое выполнение длится ~ 3 минуты.

Я могу:

  1. Использовать экземпляр EC2 и планировать почасовое выполнение с помощью cron
  2. Создать CloudWatchСобытие / правило для запуска определения задачи ECS ежечасно
  3. Настройка среды Elastic Beanstalk и планирование почасового развертывания образа

Во всех этих сценариях экземпляр EC2 работает 24 /7, и с меня взимают плату за длительные периоды бездействия.

Как выполнить планирование запуска существующего экземпляра EC2 ежечасно и остановки указанного экземпляра после завершения моего образа докера?

1 Ответ

0 голосов
/ 25 мая 2018

Вот один из подходов, который я могу придумать.Это очень высокий уровень, и в нем пропущены некоторые детали, но концептуально это будет работать просто отлично.Вам также необходимо учитывать используемые роли управления идентификацией и доступом (IAM):

  • Правило события CloudWatch для запуска функции шага
  • Функция шага AWS для запуска функции лямбда
  • Лямбда-функция AWS для запуска экземпляров EC2
  • Экземпляр EC2, опрашивающий сервис пошаговых функций для задач действий

    1. Создание правила события CloudWatch для планирования периодическогозадача с использованием выражения cron
    2. Цель 1017 * правила события CloudWatch - это шаговая функция AWS
    3. Конечный автомат функции шага AWS запускается с помощью запуска лямбда-функции AWS,который запускает экземпляр EC2
    4. Следующий шаг в конечном автомате функций шага вызывает задачу Activity, представляющую контейнер Docker, который должен выполнить
    5. На экземпляре EC2 запущен скрипт, которыйопрашивает задание Activity для работы
    6. Экземпляр EC2 выполняет контейнер Docker, ожидает его завершения и отправляетs сообщение о завершении шагу «Задание функций шага»
    7. Сценарий, запущенный на экземпляре EC2, отключается
    8. Функция шага AWS завершается

Имейте в виду, что потенциально лучшим вариантом будет запускать новый экземпляр EC2 каждый час вместо простого запуска и остановки одного и того же экземпляра.Хотя вы можете повысить производительность при запуске существующего экземпляра по сравнению с запуском нового экземпляра, вам также придется потратить время на поддержание экземпляра EC2 как домашнего животного: исправлять проблемы, если они возникают, или периодически исправлять операционную систему.В современном мире общепринятая практика заключается в том, что инфраструктура должна быть одноразовой.В конце концов, вы уже упаковали свое приложение в Docker-контейнер, поэтому у вас, скорее всего, нет слишком определенных ожиданий относительно того, на каком хосте этот контейнер фактически выполняется.

Другой вариант - использоватьAWS Fargate, который предназначен для запуска контейнеров Docker, не беспокоясь об ускорении и управлении контейнерной инфраструктурой.

...