ฉันจะใช้ทรัพยากรที่มีอยู่ใน CloudFormation อีกครั้งได้อย่างไร


32

ฉันมี S3 bucket เป็นทรัพยากรในเทมเพลต CloudFormation ของฉัน ด้วยการกำหนดให้DeletionPolicy Retainวิธีนี้ทำงานได้ตามที่คาดไว้เมื่อลบสแต็ก อย่างไรก็ตามเมื่อฉันพยายามที่จะสร้างสแต็คอีกครั้งการสร้างล้มเหลวในขณะที่พยายามสร้างที่เก็บข้อมูลเดียวกันอีกครั้งโดยมีข้อความแสดงข้อผิดพลาดบ่นว่ามีอยู่แล้ว

ฉันต้องเพิ่มอะไรในเทมเพลต CloudFormation ของฉันเพื่อไม่ให้ลองสร้างทรัพยากรที่มีอยู่แล้ว?

เทมเพลตของฉันที่เกี่ยวข้องมีดังนี้:

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

จากที่สนใจถังที่ใช้ทำอะไร อาจมีวิธีอื่นรอบ ๆ ขึ้นอยู่กับสิ่งที่คุณพยายามทำ
Drew Khoury

คำตอบ:


15

วิธีหนึ่งคือการเพิ่มพารามิเตอร์การป้อนข้อมูลลงในเทมเพลต CloudFormation เพื่อระบุว่าควรใช้ที่ฝากข้อมูลที่มีอยู่

ใช้ส่วนเงื่อนไขในเทมเพลตเพื่อสร้างที่เก็บข้อมูลเฉพาะเมื่อพารามิเตอร์ระบุว่าจำเป็นต้องมี


4
+1 เท่านี้เป็นวิธีเดียวที่ฉันเห็น ไม่ได้ทำเครื่องหมายว่าเป็นคำตอบเพราะฉันกำลังมองหาวิธีที่จะทำให้มันเป็นไปโดยอัตโนมัติ
vartec

1
ควรมีวิธีถ้าไม่: "CloudFormer" ทำงานอย่างไร
jgomo3

7

CloudFormation ใช้แท็กที่มีคำนำหน้า "aws:" เพื่อติดตามทรัพยากรที่เกี่ยวข้องกับรายการใดที่สแต็คนั่นคือสถานะ "สด" ที่ใช้เพื่อเปรียบเทียบกับเทมเพลตก่อนตัดสินใจว่าจะเพิ่ม / ลบ / อัปเดตใด

ในฐานะผู้ใช้คุณไม่สามารถเพิ่มแก้ไขหรือลบแท็กดังกล่าวได้

ดังนั้นหากทรัพยากรที่มีอยู่ของคุณไม่มีแท็กเหล่านี้หรือไม่มีค่าที่ถูกต้องสำหรับแท็กเหล่านั้นพวกเขาจะไม่ถือว่าเป็นส่วนหนึ่งของสแต็กใหม่และฉันไม่เห็นวิธีในการเปลี่ยนแปลง


2

ฉันกำลังพยายามทำให้มันเป็นแบบอัตโนมัติด้วยเหมือนว่ามันไม่สามารถทำได้ด้วยเทมเพลต Cloudformation กระบวนการที่ฉันคิดจะ:

  1. สร้างที่เก็บข้อมูลชั่วคราวอื่น temp-$originalbucketname
  2. คัดลอกเนื้อหาทั้งหมดที่มี bucket-to-bucket เพื่อประหยัดเวลา
  3. ลบเนื้อหาทั้งหมดออกจาก $originalbucketname
  4. ลบ $ originalbucketname ทันทีที่ว่างเปล่า
  5. สร้าง Cloudformation stack (ซึ่งจะสร้างที่เก็บข้อมูลใหม่)
  6. คัดลอกเนื้อหากลับ
  7. ลบ temp-$originalbucketname

นั่นเป็นกระบวนการที่เกี่ยวข้องกันมากขึ้นอยู่กับขนาดที่ฝากข้อมูลซึ่งอาจใช้เวลาหลายชั่วโมงได้ง่ายเนื่องจากขั้นตอนส่วนใหญ่เป็น O (n) พร้อมจำนวนของปุ่ม

คุณจะคิดว่า Cloudformation เป็นเลเยอร์พื้นฐานของ AWS automation แต่ฉันคิดว่ามันเป็นเพียงมอนสเตอร์ที่ค่อนข้าง จำกัด ที่จะรวมไบเซนไทน์ API เข้ากับบริการทั้งหมดของพวกเขา

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.