Bagaimana saya bisa menggunakan kembali sumber daya yang ada di CloudFormation?

32

Saya memiliki S3 bucket sebagai sumber daya dalam templat CloudFormation saya. Dengan DeletionPolicydiatur ke Retain. Ini berfungsi seperti yang diharapkan, saat menghapus tumpukan, itu memang mempertahankan ember. Namun, ketika saya mencoba membuat tumpukan lagi, kreasi gagal saat mencoba membuat keranjang yang sama lagi, dengan pesan kesalahan mengeluh bahwa itu sudah ada.

Apa yang harus saya tambahkan ke templat CloudFormation saya untuk membuatnya tidak mencoba membuat ulang sumber daya yang sudah ada?

Fragmen yang relevan dari templat saya adalah sebagai berikut:

  "Resources": {
    "SomeS3Bucket" : {
      "Type" : "AWS::S3::Bucket",
      "DeletionPolicy" : "Retain",
      "Properties": {
          "BucketName": "SomeS3Bucket"
          }
      }
vartec
sumber
tidak tertarik, untuk apa ember itu digunakan? Mungkin ada jalan lain tergantung pada apa yang Anda coba lakukan.
Drew Khoury

Jawaban:

15

Salah satu pendekatan adalah menambahkan parameter input ke template CloudFormation untuk mengindikasikan bahwa bucket yang ada harus digunakan.

Gunakan klausa Kondisi dalam templat untuk membuat ember hanya jika parameter menunjukkan itu diperlukan.

Eric Hammond
sumber
4
+1 sejauh ini adalah satu-satunya cara yang pernah saya lihat. Tidak menandainya sebagai jawaban, karena saya benar-benar mencari cara untuk mengotomatisasi itu.
vartec
1
Harus ada cara, jika tidak: Bagaimana cara "CloudFormer" bekerja?
jgomo3
7

CloudFormation menggunakan tag dengan awalan "aws:" untuk melacak sumber daya apa yang terkait dengan entri di mana tumpukan - itulah keadaan "live" yang digunakan untuk membandingkan dengan templat sebelum memutuskan apa yang akan ditambahkan / dihapus / perbarui.

Sebagai pengguna, Anda tidak dapat menambah, mengedit, atau menghapus tag semacam itu.

Jadi jika sumber daya Anda yang ada tidak memiliki tag ini, atau tidak memiliki nilai yang benar untuk tag tersebut, maka tag tersebut tidak dianggap sebagai bagian dari tumpukan baru, dan saya tidak melihat cara untuk mengubahnya.

djmitche
sumber
2

Saya mencoba untuk mengotomatisasi ini juga, karena tampaknya tidak dapat dilakukan hanya dengan template Cloudformation. Proses yang saya pikirkan akan:

  1. buat ember sementara lain temp-$originalbucketname
  2. salin semua konten di sana bucket-to-bucket untuk menghemat waktu
  3. hapus semua konten dari $originalbucketname
  4. hapus $ originalbucketname sekarang karena kosong
  5. buat tumpukan Cloudformation (yang akan membuat ulang bucket)
  6. salin kembali konten
  7. menghapus temp-$originalbucketname

Itu adalah proses yang sangat terlibat, tergantung pada ukuran bucket dengan mudah bisa memakan waktu berjam-jam karena sebagian besar langkahnya adalah O (n) dengan jumlah kunci.

Anda akan berpikir Cloudformation adalah lapisan dasar otomatisasi AWS, tapi saya pikir itu hanya monster (yang sangat terbatas) yang menyatukan API Bizantium untuk semua layanan mereka.

giorgiosironi
sumber