Як я можу повторно використовувати наявні ресурси у CloudFormation?


32

У моєму шаблоні CloudFormation у мене є відро S3. З 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.