CloudFormation and AWS CDK
Terraform ไม่ใช่ตัวเลือกเดียวของ IaC บน AWS การเข้าใจ CloudFormation และ AWS CDK ช่วยให้เลือก tool ตามทีมและระบบได้ดีขึ้น
CloudFormation basics
AWS CloudFormation ใช้ template เพื่อสร้างและจัดการ resources เป็น stack มี change set, stack events และ rollback เมื่อ deployment ล้มเหลว เหมาะกับทีมที่ต้องการ AWS-native managed IaC และ integration กับ AWS services โดยตรง
Resources:
LearningBucket:
Type: AWS::S3::Bucket
Properties:
BucketEncryption:
ServerSideEncryptionConfiguration:
- ServerSideEncryptionByDefault:
SSEAlgorithm: AES256
AWS CDK basics
AWS CDK เป็น framework สำหรับเขียน infrastructure ด้วยภาษาโปรแกรม เช่น TypeScript, Python, Java, C# และ Go CDK synthesize code เป็น CloudFormation template แล้ว deploy ผ่าน CloudFormation
Terraform vs CloudFormation vs CDK
| Tool | เหมาะกับ | Tradeoff |
|---|---|---|
| Terraform | Multi-cloud, ecosystem กว้าง, workflow คุ้นเคยใน platform teams | ต้องดูแล state/backend และ provider versions |
| CloudFormation | AWS-native stack management, rollback และ AWS service integration | Template อาจยาวและ reuse ซับซ้อน |
| AWS CDK | ทีม software engineer ที่อยากใช้ programming language และ constructs | ต้องเข้าใจทั้ง code abstraction และ CloudFormation ที่ถูก synthesize |
เลือก tool อย่างไร
- ถ้าองค์กรใช้ Terraform อยู่แล้วและมี multi-cloud หรือ module ecosystem ให้เริ่มจาก Terraform
- ถ้าต้องการ AWS-native deployment และไม่อยากดูแล Terraform state ให้พิจารณา CloudFormation/CDK
- ถ้าทีมถนัด TypeScript/Python และต้องการ abstraction สูง CDK อาจเหมาะกว่า template ล้วน
- อย่าผสมหลาย tools จัดการ resource เดียวกัน เพราะจะเกิด ownership conflict
Common mistakes
- ใช้ Terraform และ CloudFormation แก้ resource เดียวกันโดยไม่มี ownership boundary
- ดูเฉพาะ CDK code แต่ไม่ดู CloudFormation diff/template ที่ถูก synthesize
- เลือก tool จากความชอบส่วนตัวโดยไม่ดูทีม, pipeline, governance และ operations
Review questions
- CloudFormation stack คืออะไร?
- AWS CDK deploy ผ่านกลไกใด?
- ทำไมไม่ควรให้หลาย IaC tools จัดการ resource เดียวกัน?