#amazon-web-services #amazon-cloudformation
#amazon-веб-сервисы #aws-cloudformation
Вопрос:
Допустим, стек AWS был создан с использованием CloudFormation. Теперь один из этих ресурсов был изменен вне CloudFormation.
1) Возможно ли, чтобы CloudFormation специально создавала эти ресурсы? Насколько я понимаю, мы не можем этого сделать, потому что CloudFormation не определяет разницу и, следовательно, не создает измененные ресурсы. Верно ли мое наблюдение?
2) Кроме того, какие варианты у меня есть, чтобы вернуть стек в исходное состояние, если он изменен вне CloudFormation?
Комментарии:
1. @helloV, почему вы добавили amazon-ec2 в качестве тега … мои вопросы относятся ко всем ресурсам AWS, а не только к EC2?
Ответ №1:
Это один из возможных способов взлома, который вы могли бы использовать, не удаляя весь стек.
- Удалите из шаблона конкретный ресурс, который был случайно удален.
- Теперь обновите стек, который синхронизирует ваш стек и ресурсы в вашей учетной записи.
- Верните шаблон в его состояние до шага 1 и снова обновите, что создаст ресурс, который был случайно удален.
Ответ №2:
К сожалению, ответ на оба ваших вопроса — НЕТ.
- Если вы измените ресурсы в стеке после завершения создания стека, CF ничего не сможет сделать, поскольку он не отслеживает изменения ресурсов
- У вас нет другого выбора, кроме как удалить текущий стек и создать новый
Комментарии:
1. Я думаю, что использование условий может быть последним средством. Но это может сделать мой шаблон CFN действительно громоздким!
2. @GreenDroid, вы можете попробовать
Stack Update
, но это работает не так, как вы хотели.3. Работает как шарм!
Ответ №3:
Во-первых, имейте в виду, что изменение ресурсов, созданных CloudFormation за пределами CloudFormation, явно не рекомендуется в соответствии с рекомендациями AWS CloudFormation:
Управляйте всеми ресурсами стека с помощью AWS CloudFormation
После запуска стека используйте консоль AWS CloudFormation, API или интерфейс командной строки AWS для обновления ресурсов в вашем стеке. Не вносите изменения в ресурсы стека за пределами AWS CloudFormation. Это может привести к несоответствию между шаблоном вашего стека и текущим состоянием ваших ресурсов стека, что может привести к ошибкам при обновлении или удалении стека.
Однако, если вы случайно изменили ресурс, управляемый CloudFormation, и его необходимо восстановить, у вас могут быть некоторые ограниченные возможности, помимо простого удаления и повторного создания стека в целом (что может оказаться неприемлемым вариантом):
-
Для CloudFormation невозможно автоматически обновлять свое внутреннее состояние на основе текущего состояния измененного извне ресурса.
Однако, в зависимости от конкретного типа ресурса, в некоторых случаях вы можете вручную обновить CloudFormation впоследствии, применив обновление стека, соответствующее текущему состоянию ресурса.
-
Аналогичным образом, CloudFormation не может автоматически вернуть измененный извне ресурс в исходное неизмененное состояние CloudFormation.
Однако, в зависимости от конкретного типа ресурса, в некоторых случаях вы можете либо:
- Верните ресурс, вручную обновив его до исходного состояния;
- Обновите ресурс, применив обновление стека, в результате чего стек CloudFormation и управляемый ресурс перейдут в совершенно новое состояние, которое снова будет синхронизировано.
Ответ №4:
Чтобы принудительно воссоздать EC2, я использую простой трюк: при развертывании я переключаюсь между идентификаторами AMI (я взял два похожих идентификатора AMI), которые помогли мне при тестировании пользовательских данных или вещей, которые я хочу протестировать во время начальной загрузки EC2. Опять же, это работает только для EC2.
Ответ №5:
К сожалению, ответ — НЕТ
-
если вы внесли изменения в стек после создания, Cloudformation не сможет отслеживать эти изменения.
-
если вам нужно отменить эти изменения, вы должны удалить стек и перестроить.