Lesson 5AWS-native

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
TerraformMulti-cloud, ecosystem กว้าง, workflow คุ้นเคยใน platform teamsต้องดูแล state/backend และ provider versions
CloudFormationAWS-native stack management, rollback และ AWS service integrationTemplate อาจยาวและ 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

  1. CloudFormation stack คืออะไร?
  2. AWS CDK deploy ผ่านกลไกใด?
  3. ทำไมไม่ควรให้หลาย IaC tools จัดการ resource เดียวกัน?