Можно ли принудительно создать экземпляр EC2 или RDS, используя стеки облачной информации?
Мой стек застревает в точке, где простое уничтожение и создание ресурса исправят его, вместо этого мне пришлось удалить весь стек, чтобы продолжить работу.
редактировать:
Этот вопрос ударил меня дважды. Сначала я создал AWS :: RDS :: Instance с некоторыми значениями по умолчанию, а затем попытался понизить его до «EngineVersion»: «5.5». Изменение этого параметра может произойти с некоторым прерыванием, но экземпляры mysql не могут быть понижены с 5.6 до 5.5, поэтому стек остался в состоянии UPDATE_FAILED, и я не могу восстановить RDS без неприятного трюка.
Другим случаем было то, что у меня есть несколько «AWS :: EC2 :: Instance», которые загружают и выполняют сценарий из его «UserData», очевидно, если Y изменит загруженный сценарий, я должен будет восстановить экземпляр, и нет никакого способа сделать это. Я снова использую ту же неприятную уловку, чтобы воссоздать машину.
Гадкий трюк:
Вместо того, чтобы использовать группу автоматического масштабирования одной машины, я решил обе проблемы, изменяя зону доступности в свойствах ... но оставил мне неприятный вкус
cfn-hup
: docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/…Ответы:
Для экземпляров EC2, поддерживаемых хранилищем, одна хитрость заключается в добавлении комментария к сценарию пользовательских данных, содержащего номер версии, дату или подобное, а затем измените его всякий раз, когда вы хотите, чтобы экземпляр был создан заново:
Любое изменение
UserData
приведет к тому, что экземпляр будет заменен (т. Е. Восстановлен). Поведение сценария пользовательских данных должно быть таким же, поскольку единственной модификацией является комментарий. Обратите внимание, что это не работает для экземпляров, поддерживаемых EBS.Для RDS вы можете сделать снимок БД текущего экземпляра RDS, а затем изменить шаблон, чтобы использовать этот снимок с
DBSnapshotIdentifier
:Всякий раз, когда
DBSnapshotIdentifier
изменяется, экземпляр базы данных будет заменен. Использование снимков также позволит вам сохранить данные с момента создания снимка. (Если вы хотите стереть данные, вы можете создать пустой снимок и передать его в качестве входных данных. Или удалить и заново создать весь стек CloudFormation.)Более общий подход заключается в изменении логического имени ресурса. От изменения шаблона стека в документах CloudFormation:
источник
Если вы поместите его в AutoScalingGroup, вы можете отредактировать AutoScalingGroup min / max / default на 0, затем, как только он начнет уничтожать старый экземпляр, вы можете установить min / max / default на 1/1/1 и Presto: новый экземпляр.
источник
Если ваш EC2 входит в AutoScalingGroup, вы можете установить
AutoScalingGroupName
свойство с номером версии в нем.Каждый раз, когда вы меняете этот номер версии, CFN будет: 1. создавать новую группу автоматического масштабирования и раскручивать нужные экземпляры 2. убивать экземпляры в старой группе автоматического масштабирования и удалять ее
Вот фрагмент кода из моего стека, где я использую эту технику, чтобы заставить большое количество машин EC2 заново создавать и автоматически извлекать новое программное обеспечение из S3.
источник