Назад | Перейти на главную страницу

Автоматическое завершение экземпляра EC2 при создании образа

Я хочу запустить автоматизированный процесс создания AMI, и одна оставшаяся часть - это автоматическая очистка экземпляра после создания образа.

Экземпляр загружается с сценарий пользовательских данных который выполняет необходимую настройку, а затем запускает создание изображения самостоятельно, используя AWS CLI. Потом отключается. Я мог бы пойти с --no-reboot вариант и подождите, пока изображение не будет готово, а затем прекратите, но в документации указано, что «целостность файловой системы в созданном образе не может быть гарантирована», поэтому я хочу избежать его использования.

Как лучше всего убить экземпляр из самого себя после завершения создания образа?

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

  1. Запустите экземпляр EC2 с параметром instance-init-shutdown-behavior, установленным на «terminate», затем «sudo halt» или эквивалентным изнутри экземпляра.

  2. Запустите экземпляр EC2 с ролью IAM, которая позволяет ему завершить работу, затем вызовите API-интерфейс ec2 terminate-instance из экземпляра (например, с помощью aws-cli). Получите идентификатор экземпляра из метаданных экземпляра.

Первый метод немного проще и имеет меньший риск того, что экземпляр сможет завершить работу других экземпляров, но вы уже вызываете API AWS из экземпляра, поэтому вы на полпути к rm /etc/rc2.d/S90halt- after-create-image второй метод.

Теперь о том, как вызвать завершение работы после перезагрузки создания образа.

Вы можете просто вставить желаемую команду halt / terminate в сценарий запуска, например /etc/rc.local, и он запустится, когда система вернется в исходное состояние. Как указывает @AlexB в комментариях, вам нужно убедиться, что это не приводит к остановке новых экземпляров с изображением, поэтому, возможно, проверьте instance_id.

Нет необходимости ждать завершения создания нового AMI. Он завершится нормально, даже если ваш экземпляр больше не работает.

Вот быстрый совет, который можно улучшить:

# This would be dangerous in a non-EC2 environment or on an instance that
# does not fit the criteria in the original question.
original_instance_id=$(curl -s http://instance-data/latest/meta-data/instance-id)
cat >/etc/rc2.d/S90halt-after-create-image <<EOF
#!/bin/sh
rm \$0
instance_id=\$(curl -s http://instance-data/latest/meta-data/instance-id)
test "\$instance_id" = "$original_instance_id" && sudo halt
EOF
chmod +x /etc/rc2.d/S90halt-after-create-image

Этот код создает сценарий запуска, который удаляется и останавливает систему, если выполняются определенные условия. Может вызвать общий хаос, если что-то пойдет не так. Проверено на Ubuntu 12.04. Может не работать в другом месте.

Проверять, выписываться packer.io инструмент для создания изображений с открытым исходным кодом от HashiCorp.

Вам следует использовать его, потому что это стандартный инструмент, используемый такими компаниями, как Google, Netflix, Target и другие. Он также включен в инструмент компакт-дисков с открытым исходным кодом более высокого уровня, который называется Спинакер.

Вы можете использовать AMAZON AMI BUILDER.