CloudFormation - Rollbacks
การทำงานของ CloudFormation Rollbacks
เมื่อคุณสร้าง stack และเกิดความล้มเหลวในการสร้าง stack คุณมีสองตัวเลือก
-
ค่าเริ่มต้น (default): ระบบจะ rollback และลบทุก resource ที่สร้างไปแล้ว
- คุณสามารถดู logs การสร้าง stack เพื่อวิเคราะห์สาเหตุของความล้มเหลวได้
- แต่คุณ ไม่สามารถตรวจสอบ resource ที่ถูกสร้างไปแล้วได้
-
ปิดการ rollback ระหว่างสร้าง stack
- จะช่วยให้คุณ เก็บ resource ที่สร้างสำเร็จ ไว้เพื่อตรวจสอบปัญหา
- มีประโยชน์สำหรับการ debug เมื่อ resource บางตัวสร้างไม่สำเร็จ
การ rollback เมื่ออัปเดต stack
- ค่าเริ่มต้น: หากอัปเดต stack ล้มเหลว stack จะ rollback กลับไปยังสถานะที่ใช้งานได้ล่าสุด
- Resource ที่สร้างใหม่จะถูกลบ
- คุณสามารถตรวจสอบ logs และข้อความ error เพื่อวิเคราะห์ความล้มเหลว
Rollback ล้มเหลว
-
หาก rollback ล้มเหลว แสดงว่ามีปัญหากับ stack
- มักเกิดจาก resource ที่ถูกแก้ไขด้วยมือ นอก CloudFormation
-
วิธีแก้ไข:
- แก้ไข resource ด้วยตนเอง
- ใช้คำสั่ง ContinueUpdateRollback ผ่าน console, API หรือ CLI เพื่อให้ CloudFormation พยายาม rollback อีกครั้ง
ตัวอย่างการใช้งาน: Triggering Failures
-
สร้าง stack จาก template
trigger-failure.yaml- template นี้มีปัญหา เพราะ image ID ของ EC2 instance ไม่มีอยู่จริง → stack creation จะล้มเหลว
-
เมื่อสร้าง stack ชื่อ
TriggerCreationFailureคุณมีสองตัวเลือก:-
Rollback ทุก resource (default) → ลบทุก resource และกลับไปสถานะก่อนหน้า
-
Preserve resource ที่สร้างสำเร็จ → เก็บ resource ที่สร้างสำเร็จไว้ เช่น security group
- ตัวอย่าง: SSH security group ถูกสร้างสำเร็จและเก็บไว้ แต่ server security group ล้มเหลวเพราะไม่มี description
-
- หมายเหตุ: หากเลือกเก็บ resource บางตัว คุณต้องลบ stack ด้วยมือ ก่อน retry หรือ update stack ใหม่
ตัวอย่างการ rollback เมื่ออัปเดต stack
-
สร้าง stack จาก template
just-ec2.yamlชื่อFailureOnUpdate→ สร้างสำเร็จ -
อัปเดต stack ด้วย template
trigger-failure.yaml→ ล้มเหลวเพราะ AMI ID ไม่ถูกต้อง -
ในการอัปเดต คุณมีสองตัวเลือก:
- Rollback ทุก resource → ลบ resource ใหม่ทั้งหมด และคืนค่า stack ไปสถานะที่ใช้งานได้ล่าสุด
- Preserve resource ที่สร้างสำเร็จ → resource ที่สร้างก่อนเกิดความล้มเหลวจะยังคงอยู่ ส่วน resource ที่ล้มเหลวจะถูก rollback
- ทั้งสองพฤติกรรมถูกต้อง ขึ้นอยู่กับ ความต้องการ troubleshoot หรือ operation
- หลังเสร็จสิ้น อย่าลืม ลบ stack เพื่อเคลียร์ resource ทั้งหมด
สรุป (Key Takeaways)
- การสร้าง stack ล้มเหลว โดยค่าเริ่มต้นจะ rollback และลบทุก resource
- การปิด rollback ช่วยให้ เก็บ resource ที่สร้างสำเร็จ เพื่อตรวจสอบปัญหา
- การอัปเดต stack ล้มเหลว จะ rollback กลับไปสถานะที่ใช้งานได้ล่าสุดโดยอัตโนมัติ
- หาก rollback ล้มเหลว ต้องแก้ไขด้วยมือ และเรียกใช้ ContinueUpdateRollback API