Измените желаемую емкость группы автоматического масштабирования в java

#java #amazon-web-services #autoscaling

#java #amazon-web-services #автоматическое масштабирование

Вопрос:

Я хочу вызвать экземпляр EC2 в определенное время, запустить пакетное задание java и закрыть экземпляр после завершения, используя Java. Я понял, как вызвать экземпляр и запустить свою работу. Нужно знать, как я могу отключить ее после выполнения задания. Выяснилось, что это возможно, изменив значение «setDesiredCapacity» для группы автоматического масштабирования на 0. этот метод принимает имя группы автоматического масштабирования в качестве входных данных. Но поскольку имя ASG создается динамически, не уверен, как я могу перенести его в свою работу Java. Есть предложения?

Ответ №1:

Похоже, что ваши требования:

  • Регулярно запускайте экземпляр Amazon EC2, который будет выполнять пакетное задание
  • По завершении задания завершите работу экземпляра EC2

Вместо использования автоматического масштабирования (которое предназначено для динамического масштабирования емкости в зависимости от спроса), я бы рекомендовал:

  • Используйте расписание для запуска нового экземпляра EC2. Расписание может быть cron заданием на каком-либо компьютере (в EC2 или в любом месте Интернета), или вы можете использовать события Amazon CloudWatch для запуска лямбда-функции, которая запускает экземпляр.
  • По завершении пакетного задания завершите работу экземпляра, что можно сделать с помощью нескольких методов:

Или вы могли бы быть хорошими и современными и не использовать экземпляр Amazon EC2!

Поскольку ваше пакетное задание выполняется на Java, вы можете использовать лямбда-функцию вместе с расписанием событий CloudWatch. Расписание вызовет лямбда-функцию, которая может запускать ваш Java-код. Когда это будет завершено, Lambda автоматически завершится. Вам выставляется счет только за 100 мс использования.

Пожалуйста, обратите внимание, что лямбда-функции могут выполняться максимум 5 минут, поэтому, если ваша операция занимает больше времени, Lambda не является подходящим решением.

Комментарии:

1. спасибо за предложения. Лямбда не работает для меня из-за ограничения по времени, как вы упомянули.

2. С помощью TerminateInstances, хотя экземпляр будет завершен, не будет ли группа автоматического масштабирования снова запускать другой экземпляр, когда увидит, что их нет?

Ответ №2:

Вы можете использовать следующее-

  • Правило события Cloudwatch в качестве планировщика. Целью будет лямбда в точке 2.
  • Лямбда, чтобы изменить желаемую емкость группы автоматического масштабирования, вызвав «setDesiredCapacity» группы автоматического масштабирования.
  • Чтобы закрыть экземпляры после завершения пакетного задания, пожалуйста, используйте AWS Java SDK в экземпляре EC2, чтобы снова изменить значение «setDesiredCapacity» на ноль.

Моменты, на которые следует обратить внимание

  • Ваша минимальная емкость должна быть равна нулю, чтобы экземпляры были завершены.
  • Выражение Cron правила события Cloudwatch должно учитывать время, затраченное EC2 на развертывание.
  • Если вы не хотите, чтобы ваши запросы передавались через общедоступный Интернет, используйте конечные точки vpc для внутренней настройки трафика в вашем VPC.