Возможно ли воссоздать ресурсы AWS с помощью CloudFormation?

#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. Теперь обновите стек, который синхронизирует ваш стек и ресурсы в вашей учетной записи.
  3. Верните шаблон в его состояние до шага 1 и снова обновите, что создаст ресурс, который был случайно удален.

Ответ №2:

К сожалению, ответ на оба ваших вопроса — НЕТ.

  1. Если вы измените ресурсы в стеке после завершения создания стека, CF ничего не сможет сделать, поскольку он не отслеживает изменения ресурсов
  2. У вас нет другого выбора, кроме как удалить текущий стек и создать новый

Комментарии:

1. Я думаю, что использование условий может быть последним средством. Но это может сделать мой шаблон CFN действительно громоздким!

2. @GreenDroid, вы можете попробовать Stack Update , но это работает не так, как вы хотели.

3. Работает как шарм!

Ответ №3:

Во-первых, имейте в виду, что изменение ресурсов, созданных CloudFormation за пределами CloudFormation, явно не рекомендуется в соответствии с рекомендациями AWS CloudFormation:

Управляйте всеми ресурсами стека с помощью AWS CloudFormation

После запуска стека используйте консоль AWS CloudFormation, API или интерфейс командной строки AWS для обновления ресурсов в вашем стеке. Не вносите изменения в ресурсы стека за пределами AWS CloudFormation. Это может привести к несоответствию между шаблоном вашего стека и текущим состоянием ваших ресурсов стека, что может привести к ошибкам при обновлении или удалении стека.

Однако, если вы случайно изменили ресурс, управляемый CloudFormation, и его необходимо восстановить, у вас могут быть некоторые ограниченные возможности, помимо простого удаления и повторного создания стека в целом (что может оказаться неприемлемым вариантом):

  1. Для CloudFormation невозможно автоматически обновлять свое внутреннее состояние на основе текущего состояния измененного извне ресурса.

    Однако, в зависимости от конкретного типа ресурса, в некоторых случаях вы можете вручную обновить CloudFormation впоследствии, применив обновление стека, соответствующее текущему состоянию ресурса.

  2. Аналогичным образом, CloudFormation не может автоматически вернуть измененный извне ресурс в исходное неизмененное состояние CloudFormation.

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

    • Верните ресурс, вручную обновив его до исходного состояния;
    • Обновите ресурс, применив обновление стека, в результате чего стек CloudFormation и управляемый ресурс перейдут в совершенно новое состояние, которое снова будет синхронизировано.

Ответ №4:

Чтобы принудительно воссоздать EC2, я использую простой трюк: при развертывании я переключаюсь между идентификаторами AMI (я взял два похожих идентификатора AMI), которые помогли мне при тестировании пользовательских данных или вещей, которые я хочу протестировать во время начальной загрузки EC2. Опять же, это работает только для EC2.

Ответ №5:

К сожалению, ответ — НЕТ

  1. если вы внесли изменения в стек после создания, Cloudformation не сможет отслеживать эти изменения.

  2. если вам нужно отменить эти изменения, вы должны удалить стек и перестроить.