#amazon-web-services #amazon-cloudformation
#amazon-web-services #aws-cloudformation
Вопрос:
У нашей команды возникла проблема, когда кто-то вручную изменил роль IAM для операционного события. Мы надеялись, что перераспределение стека CloudFormation вернет состояние роли IAM, однако изменение вручную все еще было.
Моя рабочая теория заключается в том, что, поскольку arn роли IAM один и тот же, CloudFormation не удаляет и не создает его заново. Это точно? И если да, то как мы можем гарантировать, что все соответствующие ресурсы будут отключены во время развертывания?
Комментарии:
1. Из-за этой проблемы многие организации выбирают terraform вместо cloudformation.
2. Как все прошло. Это все еще неясно?
Ответ №1:
Моя рабочая теория заключается в том, что, поскольку arn роли IAM один и тот же, CloudFormation не удаляет и не создает его заново. Это точно?
CloudFormation (CFN) не проверяет наличие каких-либо изменений, внесенных вне его контроля. Вы можете удалить роль, и CFN все равно «подумает», что эта роль существует.
Если вы измените ресурс, созданный CFN вручную, за пределами CFN (плохая практика), у вас так называемый дрейф стека. CFN сам по себе не знает о каких-либо изменениях, внесенных в создаваемые им ресурсы, которые произошли вне его контроля. Но CFN предоставляет специальные инструменты, которые необходимо явно вызывать для обнаружения смещения:
Не все ресурсы поддерживают обнаружение дрейфа, но AWS::IAM::Role
есть один, который поддерживает.
И если да, то как мы можем гарантировать, что все соответствующие ресурсы будут отключены во время развертывания?
Не уверен, что вы здесь имеете в виду. Но вы должны вручную исправить смещение. У вас есть четыре варианта:
- Верните роль в исходное состояние,
- Обновите шаблон, чтобы отразить внешние изменения,
- Используйте импорт, чтобы импортировать измененную роль в stack,
- Удалите весь стек и создайте новый из исходного шаблона.
Последний выбор гарантирует, что измененная роль также будет удалена и воссоздана в ее первоначальном виде.
Комментарии:
1. Вариант 5. Удалите роль из шаблона, выполните развертывание (при этом роль будет удалена), добавьте роль обратно в шаблон, повторно выполните развертывание (при этом роль будет создана в ее первоначальном виде).