Как запустить экземпляры EC2 и загрузить / запустить скрипт запуска на каждом из них?

Я хочу автоматизировать запуск набора экземпляров Linux EC2.

По сути, я хочу написать скрипт / программу, которая бы:

  • Изучить N случаев данного AMI моего.
  • Для каждого запущенного экземпляра будет загружен настроенный сценарий, и сценарий будет запущен в экземпляре.

Используя VMWare, я обычно делал бы это, используя vmrun или Vix SDK.

Какие есть варианты в Amazon AWS/EC2?

2 ответа

Решение

Ответ немного зависит от того, какой AMI вы используете, поскольку предоставляемые функции полностью зависят от AMI.

В Amazon Linux AMIS и официальных AMI Ubuntu установлен пакет cloud-init. У этого есть несколько способов инициировать действия при запуске, но тот, который наиболее точно соответствует вашему запросу (и мой любимый, потому что я его придумал), это концепция скрипта пользовательских данных.

Вы можете просто передать любой скрипт (начиная с двух символов #!) В качестве пользовательских данных при запуске экземпляров EC2. Он будет запущен с правами root при первой загрузке экземпляра.

Для конкретного примера того, как это работает, я использую эту точную технику в моей недавней статье: Загрузка известного ключа хоста ssh в скрипт пользовательских данных EC2

Вы также хотели запустить более одного экземпляра EC2 с одним и тем же сценарием. Команда ec2-run-instances и соответствующие API и веб-консоль позволяют указать любое количество экземпляров для запуска с одними и теми же пользовательскими данными. Например:

ec2-run-instances            \
  --instance-count 10        \
  --user-data-file $MYSCRIPT \
  --key $USER                \
  $SOMEAMI

Если вы в настоящее время используете AMI, на котором не установлен cloud-init, вы можете выполнить одно из следующих действий:

  • Переключитесь на AMI, на котором установлен cloud-init, или

  • Создайте пользовательскую версию AMI с установленным cloud-init или

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

У меня есть учебник по запуску сценария в "cloud-init", который запускается каждый раз при запуске AWS EC2.

  • установить файл конфигурации (AWS CentOS6) и

  • запускать скрипты при запуске EC2

Для настройки файла конфигурации в Linux вы можете обратиться к файлу configure cloud-init в AWS Linux.

Я лично использую AWS VPC/EBS, который был настроен на основе Linux AMI, я ничего не трогал в файле конфигурации /etc/cloud/cloud.cfg но мой загрузочный скрипт в cloud-init работает хорошо.

Другие вопросы по тегам