Запустите и остановите EC2, а затем включите / проверьте службы на экземпляре с помощью bash

#linux #bash #amazon-web-services #amazon-ec2 #cron

#linux #bash #amazon-веб-сервисы #amazon-ec2 #cron

Вопрос:

Мне нужно остановить запуск нескольких экземпляров EC2 и запустить несколько команд после их запуска, используя bash на том же сервере управления без необходимости ssh.

Я знаю, как запускать и останавливать экземпляры EC2, например:

запустите экземпляр:

 #! /bin/bash
aws ec2 start-instances --instance-ids i-1a1234
 

Остановить экземпляр:

 #! /bin/bash
aws ec2 stop-instances --instance-ids i-1a1234
 

Я понял, как перечислить все идентификаторы EC2, выполнив:

 aws ec2 describe-instances --filters "Name=tag:Name,Values=Test: Instance 1" --query 'Reservations[].Instances[].[InstanceId] --output text
 

Мои вопросы:

  1. Как я могу остановить / запустить несколько экземпляров EC2?
  2. Как я могу захватить конкретный экземпляр EC2 и запустить команду для проверки службы, включенной после запуска экземпляра?

Может быть, мне нужно выполнить if условие для сравнения идентификатора или имени тега с экземпляром EC2, необходимым для запуска команды оболочки?

Я знаю логику, но, пожалуйста, помогите мне с деталями сценария.

Ответ №1:

Вы можете запускать / останавливать несколько экземпляров, указав их идентификаторы:

 aws ec2 start-instances --instance-ids i-1a1234 i-1a1235 i-1a1236
 

Если вы хотите запускать скрипт на экземпляре при каждом его запуске, вы можете поместить скрипт в:

 /var/lib/cloud/scripts/per-boot/
 

Это будет использоваться cloud-init для автоматического запуска скрипта, который затем может выполнять любую проверку / обработку, которую вы пожелаете.

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

 sudo shutdown now -h
 

Более подробную информацию см. В разделе: Автоматическая остановка экземпляров EC2 при завершении задачи — Сообщество разработчиков

В качестве альтернативы вы можете использовать команду запуска AWS Systems Manager Run для запуска скрипта на экземпляре. Это отличный способ запускать задания на экземплярах, которые уже запущены. Команда может даже выполняться на нескольких экземплярах одновременно.

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

1. Спасибо, Джон, что ответил на мой первый вопрос, я, возможно, не объяснил свою проблему. итак, у меня есть 5 ec2, один из которых мне нужно корректно остановить oracle, прежде чем я его остановлю, когда я останавливаю его вручную, я обычно подключаюсь к нему по ssh и запускаю: «su — grid» (это пользователь oracle), затем я запускаю «crsctl stop has» (чтобы остановить oracle), поэтому янеобходимо запустить эту команду из скрипта на oracle ec2. Мне удается запустить скрипт из crontab и не могу использовать ssm.

2. Итак, в чем ваша реальная проблема? Если вы хотите остановить Oracle, а затем остановить экземпляр, то один и тот же скрипт может выполнить оба — сначала с помощью crsctl stop has , затем с помощью sudo shutdown now -h . (У вас могут возникнуть проблемы с одним скриптом, переключающимся между пользователями с su помощью — для подтверждения потребуется некоторое тестирование.)