Как запустить экземпляры 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 работает хорошо.