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

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

В принципе, я хочу написать script/программу, которая:

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

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

Каковы варианты в Amazon AWS/EC2?

Ответ 1

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

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

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

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

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

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

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

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

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

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

Ответ 2

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

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

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

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

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