AWS CloudFormation: Helper Scripts

Mart — Tanathip Viriya
2 min readJun 24, 2020

--

AWS ได้มี helper scripts หลายส่วนที่ช่วยเหลือเราในการจัดการ infrastructure ด้วย CloudFormation โดยหลักๆแล้วจะแบ่งเป็น 4 ตัวคือ

  1. cfn-init
    ใช้เพื่อ install package สร้าง files ต่างๆๆโดยดึงข้อมูลมาจาก metadata
  2. cfn-signal
    ใช้เพื่อ sync signal ใน condition หรือ wait policy ด้วยวิธีนี้จะทําให้เราสามารถ synchronize resource ต่างๆๆได้
  3. cfn-get-metadata
    ใช้เพื่อดึงข้อมูลจาก metadata มาใช้อะไรซักอย่าง โดยดึงจาก specific key
  4. cfn-hup
    ใช้เพื่อตรวจการเปลี่ยนแปลงใน metadata แล้วก็ไป trigger specific action เมื่อเราตรวจพบ

Cfn-init

ตัวอย่างการใช้งาน Cfn-init ในการลง CodeDeploy Agent บนเครื่อง EC2 ที่พึ่งสร้าง

โดยมันจะอ่านค่า template metadata จาก CloudFormation::Init: นั้นเอง

https://hta-cloudformation-bucket.s3.amazonaws.com/DeveloperTheory/CodeDeploy/nodejs-deploy-ec2.yml

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

https://hta-cloudformation-bucket.s3.amazonaws.com/DeveloperTheory/CodeDeploy/nodejs-deploy-ec2.yml

Cfn-signal

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

เช่นเราสร้าง test.txt ตัวนี้ไว้

https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-signal.html#cfn-signal-Examples

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

ด้วยวิธีนี้ถ้าเกิดการผิดพลาดในการ install มันจะทําให้ stack รับรู้ว่าเกิดการผิดพลาดและสามารถทําการ rollback ได้

https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-signal.html#cfn-signal-Examples

--

--