Извините без серверы, но AWS Lambda не отвечает на каждую проблему!
- Лямбда функции бежит максимум 15 минут
- У них только 512 МБ временного дискового пространства
- Пакеты могут быть только до 250 МБ (расстегнуты)
Для ситуаций, которые не соответствуют этим ограничениям, всегда есть Amazon EC2! (Контейнеры с Fargate являются еще одним вариантом.)
Вот несколько советов о том, как использовать экземпляры Amazon EC2 для пакетной работы, включая запуск сценариев при запуске и выключении, когда закончите.
Запуск скрипта на каждом запуске
Большинство людей знают о способности Передать сценарий через пользовательские данные который будет выполнен, когда экземпляр EC2 сначала загружен.
- Запуск команд на вашем экземпляре Linux при запуске
- Запуск команд в вашем экземпляре Windows при запуске
Вот немного истории … AWS не придумал идею передачи сценария к экземпляру. Пользовательские данные были просто там, чтобы пройти некоторую информацию, которая затем была доступна для приложений, работающих на экземпляре (например, вот пароль для базы данных »). Это было каноническое, которое придумало эту концепцию и создано Облако-init. . Они все еще поддерживают это сегодня:
Облако-init — это отрасль стандарт Метод с несколькими распределением для перекрестной платформы инициализации экземпляра облака. Он поддерживается во всех крупных общественных облачных провайдерах, системах обеспечения для частной облачной инфраструктуры и голых металлов.
Сценарий, пройденный через пользовательские данные, выполняется Первый раз, когда экземпляр загружен Отказ (Или, чтобы быть более точным, один раз на экземпляр ID .) Это делает его отличным для установки программного обеспечения и настройки систем, поскольку он работает только один раз.
Но … что, если вы хотите запустить скрипт Каждый раз, когда экземпляр начинается ? К счастью, облако-init также может запускать скрипты:
- На каждой загрузке
- На следующей загрузке Только
Итак, если вы собираетесь использовать экземпляр Amazon EC2 Linux, чтобы запустить пакетную задачу при запуске, просто установите сценарий в этом каталоге:
/var/lib/cloud/scripts/per-boot/
Каждый раз, когда экземпляр загружен (запущен), скрипт будет запущен. Это отличный способ вызвать пакетный процесс на экземпляре. Затем скрипт извлекает информацию, которая будет обработана из базы данных, очереди Amazon SQS или даже данные пользовательских данных экземпляра. (Например, вы можете пропустить имя файла S3 через пользовательские данные, а скрипт может загрузить и обработать файл. Обратите внимание, что пользовательские данные могут быть обновлены только тогда, когда экземпляр находится в остановке.)
Закрытие, когда вы закончите
Как только ваша пакетная работа завершена, каков самый простой способ отключить экземпляр?
Да, вы могли бы позвонить в Стоп ()
Команда, передавая идентификатор экземпляра. Однако более простым способом просто выдать команду отключения операционной системы:
Sudo выключается сейчас -h
( -H
означает «остановить», что говорит виртуальному оборудованию, чтобы выключиться. Если вы не включите его, то операционная система выключается, но виртуальный компьютер продолжает работать.)
Выключение экземпляра из операционной системы использует преимущества Поведение отключения Параметр, который сообщает EC2, что делать, когда операционная система отключает компьютер. Это может быть установлено на либо Стоп или Прекратить Отказ По умолчанию останавливается, что означает, что экземпляр будет выключен, но снова включается впоследствии.
Предупреждение!
Если что-то пойдет не так с пакетным сценарием, он может выключить экземпляр, прежде чем вы сможете войти и отладить ситуацию. Затем, если вы снова начнете экземпляр, он снова не удается и выключается.
Я предлагаю вам добавить Автоматический выключатель В коде, чтобы вы могли сообщить код не выключить. Например, скрипт может проверить, добавлен ли конкретный тег к экземпляру. Если это так, пропустите шаг отключения.
Фото кредиты: Производство печенья на фабрике | Вик |. Фликр
Оригинал: «https://dev.to/aws/auto-stop-ec2-instances-when-they-finish-a-task-2f0i»