AWS CloudFormation: Helper Scripts
AWS ได้มี helper scripts หลายส่วนที่ช่วยเหลือเราในการจัดการ infrastructure ด้วย CloudFormation โดยหลักๆแล้วจะแบ่งเป็น 4 ตัวคือ
- cfn-init
ใช้เพื่อ install package สร้าง files ต่างๆๆโดยดึงข้อมูลมาจาก metadata - cfn-signal
ใช้เพื่อ sync signal ใน condition หรือ wait policy ด้วยวิธีนี้จะทําให้เราสามารถ synchronize resource ต่างๆๆได้ - cfn-get-metadata
ใช้เพื่อดึงข้อมูลจาก metadata มาใช้อะไรซักอย่าง โดยดึงจาก specific key - cfn-hup
ใช้เพื่อตรวจการเปลี่ยนแปลงใน metadata แล้วก็ไป trigger specific action เมื่อเราตรวจพบ
Cfn-init
ตัวอย่างการใช้งาน Cfn-init ในการลง CodeDeploy Agent บนเครื่อง EC2 ที่พึ่งสร้าง
โดยมันจะอ่านค่า template metadata จาก CloudFormation::Init: นั้นเอง

หลังจากนั้นเวลาเราเรียกใช้ เราก็เรียน cfn-init จาก binary บน ec2 ให้มันทําการรัน config ที่เราสร้างไว้ ซึ่งในที่นี้คือ InstallAndRun config นั้นเอง มันก็จะทําการ install agent ตาม metada ที่เราเขียนไว้นั้นเอง

Cfn-signal
อีกส่วนที่เห็นใช้บ่อยคือเรื่องของการใช้ cfn-signal ที่เป็นการสร้าง WaitCondition ให้กับ resource ต่างๆๆ โดย pattern ปกติที่ใช้กันเลย คือใช้ cfn-init ควบคู่กับ cfn-signal เพื่อให้รู้ status ของการจัดการ metadata นั้นๆ
เช่นเราสร้าง test.txt ตัวนี้ไว้

แล้วหลังจากนั้นใน UserData หลังจากเราทําการ install files ตาม meta ที่เราเรียกละ เราก็ทําการเรียก cfn-signal เพื่อทําการส่ง status ของ cfn-init ตัวข้างบนกลับไป ด้วย shell construct #?
ด้วยวิธีนี้ถ้าเกิดการผิดพลาดในการ install มันจะทําให้ stack รับรู้ว่าเกิดการผิดพลาดและสามารถทําการ rollback ได้
