Как я могу повторно использовать существующие ресурсы в CloudFormation?


32

У меня есть S3 bucket как ресурс в моем шаблоне CloudFormation. С DeletionPolicyустановленным на Retain. Это работает, как и ожидалось, при удалении стека оно действительно сохраняет корзину. Тем не менее, когда я пытаюсь создать стек снова, создание завершается неудачно при попытке создать тот же сегмент снова, с сообщением об ошибке с жалобой на то, что он уже существует.

Что мне нужно добавить в мой шаблон CloudFormation, чтобы он не пытался воссоздать ресурс, который уже существует?

Соответствующий фрагмент моего шаблона выглядит следующим образом:

  "Resources": {
    "SomeS3Bucket" : {
      "Type" : "AWS::S3::Bucket",
      "DeletionPolicy" : "Retain",
      "Properties": {
          "BucketName": "SomeS3Bucket"
          }
      }

из интереса, для чего используется ведро? Может быть, есть другой способ обойти это в зависимости от того, что вы пытаетесь сделать.
Дрю Хури

Ответы:


15

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

Используйте условия Condition в шаблоне, чтобы создать сегмент, только если параметр указывает, что он необходим.


4
+1, пока это единственный способ, который я видел. Не отмечая это как ответ, хотя, потому что я действительно ищу способ автоматизировать это.
vartec

1
Должен быть способ, если нет: как работает «CloudFormer»?
jgomo3

7

CloudFormation использует теги с префиксом «aws:», чтобы отслеживать, какие ресурсы связаны с какими записями, в какие стеки - это «живое» состояние, которое оно использует для сравнения с шаблоном, прежде чем решить, что добавить / удалить / обновить.

Как пользователь, вы не можете добавлять, редактировать или удалять такие теги.

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


2

Я тоже пытаюсь автоматизировать это, так как кажется, что это невозможно сделать только с помощью шаблона Cloudformation. Процесс, о котором я думаю, будет:

  1. создать еще одно временное ведро temp-$originalbucketname
  2. скопируйте все содержимое там в ведро, чтобы сэкономить время
  3. удалить весь контент из $originalbucketname
  4. удалите $ originalbucketname теперь, когда оно пустое
  5. создайте стек Cloudformation (который будет воссоздавать корзину)
  6. скопировать содержимое обратно
  7. удалять temp-$originalbucketname

Это очень сложный процесс, в зависимости от размера корзины это может занять несколько часов, так как большинство шагов - это O (n) с количеством ключей.

Вы могли бы подумать, что Cloudformation - это базовый уровень автоматизации AWS, но я думаю, что это просто (довольно ограниченный) монстр, объединяющий византийские API для всех своих сервисов.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.