У меня есть корзина S3 в качестве ресурса в моем шаблоне CloudFormation с DeletionPolicy
установлен в Retain
. Это работает, как ожидалось: при удалении стека он действительно сохраняет ведро. Однако, когда я снова пытаюсь создать стек, создание не удается при повторной попытке создать тот же сегмент, с сообщением об ошибке с жалобой на то, что он уже существует.
Что мне нужно добавить в мой шаблон CloudFormation, чтобы он не пытался воссоздать уже существующий ресурс?
Соответствующий фрагмент моего шаблона выглядит следующим образом:
"Resources": {
"SomeS3Bucket" : {
"Type" : "AWS::S3::Bucket",
"DeletionPolicy" : "Retain",
"Properties": {
"BucketName": "SomeS3Bucket"
}
}
Один из подходов - добавить входной параметр в шаблон CloudFormation, чтобы указать, что следует использовать существующий сегмент.
Используйте предложения Condition в шаблоне для создания сегмента, только если параметр указывает, что это необходимо.
CloudFormation использует теги с префиксом «aws:», чтобы отслеживать, какие ресурсы связаны с какими записями и в каких стеках - это «живое» состояние, которое он использует для сравнения с шаблоном, прежде чем решить, что добавить / удалить / обновить.
Как пользователь вы не можете добавлять, редактировать или удалять такие теги.
Поэтому, если ваши существующие ресурсы не имеют этих тегов или не имеют правильных значений для этих тегов, то они не считаются частью нового стека, и я не вижу способа это изменить.
Я тоже пытаюсь автоматизировать это, так как кажется, что это невозможно сделать только с помощью шаблона Cloudformation. Процесс, о котором я думаю, будет:
temp-$originalbucketname
$originalbucketname
temp-$originalbucketname
Это очень сложный процесс, в зависимости от размера корзины он может легко занять несколько часов, так как большинство шагов составляет O (n) с количеством ключей.
Вы могли бы подумать, что Cloudformation - это базовый уровень автоматизации AWS, но я думаю, что это просто (довольно ограниченный) монстр, объединяющий византийские API для всех своих сервисов.