Skip to main content

AWS CodeDeploy

AWS CodeDeploy คือบริการสำหรับการ ปรับใช้ (deployment) แอปพลิเคชันโดยอัตโนมัติ ทำให้สามารถอัปเกรดแอปจากเวอร์ชัน 1 ไปเวอร์ชัน 2 ได้อย่างราบรื่น

An image

เป้าหมายการปรับใช้ (Deployment Targets)​

คุณสามารถปรับใช้แอปไปยังเป้าหมายเหล่านี้ได้:

  • EC2 instances
  • เซิร์ฟเวอร์ On-premises
  • Lambda functions
  • ECS services

หมายเหตุ: EC2 และ on-premises ใช้วิธี deployment แบบเดียวกัน

ฟีเจอร์ของ CodeDeploy​

  • รองรับ การอัปเดตแอปพลิเคชันอัตโนมัติ
  • มีฟีเจอร์ rollback อัตโนมัติ หากการปรับใช้ล้มเหลวหรือมี alarm ถูก trigger
  • ควบคุมความเร็วการปรับใช้ได้ เช่น ทีละเครื่อง, ครึ่งหนึ่ง, ทั้งหมด, หรือใช้ Blue/Green Deployment

การปรับใช้ถูกควบคุมด้วยไฟล์ appspec.yml ซึ่งกำหนดว่า deployment จะทำงานอย่างไร

Deployment บน EC2 และ On-Premises​

รองรับการปรับใช้ 2 แบบ:

  1. In-place deployment An image
  2. Blue/green deployment An image

เงื่อนไข: ต้องติดตั้ง CodeDeploy agent บน instance เป้าหมาย เพื่อให้ agent ทำการอัปเดตแอป

ความเร็วของการปรับใช้ (Deployment Speed Options)​

  • AllAtOnce: อัปเดตทุก instance พร้อมกัน → downtime สูงสุด
  • HalfAtATime: อัปเดตทีละครึ่ง → ลด downtime ได้
  • OneAtATime: อัปเดตทีละเครื่อง → downtime น้อยที่สุด แต่ช้าที่สุด
  • สามารถกำหนดค่า custom เองได้

ตัวอย่าง In-Place Deployment แบบAn image HalfAtATime

  • แอปเวอร์ชัน 1 รันอยู่บน EC2 4 เครื่อง
  • ปรับใช้แบบครึ่งต่อครึ่ง → หยุด 2 เครื่อง → อัปเกรดเป็นเวอร์ชัน 2 → เสร็จแล้วทำกับอีก 2 เครื่อง
  • เป็นการปรับใช้แบบค่อย ๆ ลด downtime

Blue/Green Deployment​

  • รัน สองเวอร์ชันพร้อมกัน
  • Load Balancer ชี้ไปยังกลุ่ม instance เวอร์ชัน 1 (blue)
  • สร้าง Auto Scaling group ใหม่สำหรับเวอร์ชัน 2 (green)
  • Load Balancer ค่อย ๆ ย้าย traffic จาก blue → green
  • หลังจากเสร็จสิ้น traffic shift → terminate instance เวอร์ชันเก่า
  • ช่วยให้ ปรับใช้แบบ Zero Downtime

การติดตั้ง CodeDeploy Agent​

Agent ต้องติดตั้งบน EC2 ก่อนจึงจะ deploy ได้

  • ติดตั้งด้วยคำสั่ง Linux (manual)
  • หรือใช้ AWS Systems Manager (อัตโนมัติ)

An image

สิทธิ์ IAM ของ EC2 instance: ต้องมีสิทธิ์เข้าถึง S3 bucket ที่เก็บ application revisions เพื่อให้ agent โหลดไฟล์ deployment มาติดตั้ง

CodeDeploy กับ Lambda​

  • CodeDeploy สามารถ traffic shifting สำหรับ Lambda aliases ได้
  • เช่น PROD alias จากเวอร์ชัน 1 → เวอร์ชัน 2
  • ค่า X (0 → 100) ใช้บอกสัดส่วน traffic ที่ถูกย้ายจากเวอร์ชันเก่าไปใหม่

An image

กลยุทธ์การย้าย traffic (Traffic Shifting Strategies):

  • Linear → เพิ่ม traffic แบบเปอร์เซ็นต์คงที่ทุก ๆ N นาที
  • Canary → ส่ง traffic น้อย ๆ ไปทดสอบก่อน (เช่น 10% 5 นาที) ถ้าผ่านค่อยย้ายทั้งหมด
  • AllAtOnce → ย้าย traffic ทั้งหมดในครั้งเดียว

CodeDeploy กับ ECS​

  • รองรับเฉพาะ Blue/Green Deployment

  • การทำงาน:

    • Load Balancer route traffic ไปยัง target group ที่มี ECS tasks
    • CodeDeploy สร้าง target group ใหม่ (green) สำหรับ task definition ใหม่
    • รัน tasks ใหม่ใน cluster ด้วยความจุเท่าเดิม
    • ค่อย ๆ ย้าย traffic จาก blue → green
    • ใช้กลยุทธ์ linear, canary หรือ all-at-once เช่นเดียวกับ Lambda

An image

CodeDeploy สำหรับ EC2 และ Auto Scaling Group (ASG)​

เมื่อทำการปรับใช้ (deploy) ไปยัง EC2 instance คุณจะต้องมีไฟล์ appspec.yml ที่วางไว้ที่ root ของ code repository ไฟล์นี้จะกำหนดกลยุทธ์การปรับใช้ (deployment strategy) และ hooks ที่ใช้สำหรับตรวจสอบความถูกต้องหลังจากแต่ละขั้นตอนของการปรับใช้

An image

กลยุทธ์ In-Place Deployment​

  • เป็นกลยุทธ์ที่ใช้บ่อยที่สุด
  • จะอัปเดต EC2 instances ที่มีอยู่โดยตรง
  • ตัวอย่างเช่น กำหนดการปรับใช้แบบ HalfAtATime → หยุดทำงานครึ่งหนึ่งของ instances เพื่ออัปเกรดเป็นเวอร์ชัน 2 จากนั้นอัปเกรดอีกครึ่งหนึ่ง

การปรับใช้ร่วมกับ Auto Scaling Groups (ASG)​

กรณีที่ปรับใช้กับ ASG จะมีความซับซ้อนมากขึ้น โดยมี 2 ตัวเลือกหลัก:

  1. In-Place Deployment

    • คล้ายกับการปรับใช้ EC2 ปกติ → อัปเดต instances ที่มีอยู่โดยตรง
  2. Blue/Green Deployment

    • CodeDeploy จะสร้าง Auto Scaling Group (ASG) ใหม่ที่คัดลอกค่าการตั้งค่าเดิมมา
    • จากนั้นสามารถกำหนดระยะเวลาเก็บ ASG เก่าไว้ได้
    • Elastic Load Balancer (ELB) จะสลับการรับส่งข้อมูล (traffic) จากกลุ่มเก่าไปยังกลุ่มใหม่

An image

In-Place Deployment ร่วมกับ ASG​

  • หาก ASG สร้าง EC2 instances ใหม่ขึ้นมาโดยอัตโนมัติ CodeDeploy จะปรับใช้แอปพลิเคชันลงใน instances ใหม่เหล่านั้นโดยอัตโนมัติ
  • คุณสมบัตินี้ช่วยเพิ่มความสามารถและความยืดหยุ่นอย่างมากให้กับกระบวนการปรับใช้

Workflow ของ Blue/Green Deployment​

สมมติว่ามีการปรับใช้แบบ Blue/Green:

  1. เริ่มต้น ELB จะส่ง traffic ไปยัง EC2 instances ที่รันด้วย เวอร์ชัน 1 (V1) ภายใน ASG
  2. CodeDeploy ทำการปรับใช้แอปเวอร์ชัน V1 บน instances เหล่านี้
  3. เมื่ออัปเกรดเป็น เวอร์ชัน 2 (V2) → จะสร้าง instances ใหม่ขึ้นมาจาก launch template V2
  4. CodeDeploy จะปรับใช้แอป V2 บน instances เหล่านี้
  5. ELB จะส่ง traffic ไปยังทั้ง V1 และ V2 ชั่วระยะเวลาหนึ่ง
  6. หากทุกอย่างทำงานปกติ → V1 instances จะถูก terminate → การปรับใช้เสร็จสมบูรณ์

การ Redeploy และ Rollback​

Rollback = กระบวนการนำเวอร์ชันก่อนหน้าที่ใช้งานได้ (known good revision) มาปรับใช้อีกครั้งเพื่อย้อนกลับไปสู่สถานะที่มั่นคง

มี 2 วิธี:

  • อัตโนมัติ (Automatic) → เกิดขึ้นเมื่อการปรับใช้ล้มเหลวหรือ CloudWatch Alarms แจ้งเตือน
  • ด้วยตนเอง (Manual) → ผู้ใช้เป็นคนสั่ง rollback

❗ ถ้า rollback ถูกปิดใช้งาน (disabled) → จะไม่มีการ rollback

กลไกการ Rollback ของ CodeDeploy​

  • เมื่อ rollback เกิดขึ้น CodeDeploy จะไม่กู้คืน (restore) deployment เดิมในที่เดิม
  • แต่จะ สร้างการปรับใช้ใหม่ โดยใช้ last known good revision
  • กล่าวคือ rollback = การ deploy เวอร์ชันที่เสถียรอีกครั้ง ไม่ใช่การย้อนกลับไปสู่สถานะเก่าแบบ snapshot

นี่เป็นรายละเอียดที่สำคัญและอาจถูกถามในข้อสอบ

สรุป​

  • CodeDeploy คือบริการที่ช่วยปรับใช้แอปบน EC2, on-premises, Lambda, และ ECS
  • รองรับทั้ง in-place และ blue/green deployment
  • ปรับแต่งความเร็วในการ deploy ได้ เช่น one-at-a-time, half-at-a-time, all-at-once
  • มีระบบ rollback อัตโนมัติ เพื่อความปลอดภัย
  • Lambda และ ECS รองรับการ traffic shifting (linear, canary, all-at-once)
  • CodeDeploy ใช้ไฟล์ appspec.yml ที่ root ของ code เพื่อกำหนดกลยุทธ์และ hooks
  • In-place deployment → อัปเดต EC2 instances ที่มีอยู่
  • Blue/Green deployment → สร้าง ASG ใหม่และ ELB จะสลับ traffic ให้
  • หากมี EC2 ใหม่ถูกสร้างจาก ASG → CodeDeploy จะ deploy ให้โดยอัตโนมัติ
  • Rollback = การ deploy เวอร์ชันที่ดีล่าสุดอีกครั้ง (ไม่ใช่การกู้คืนสถานะเก่า)
  • Rollback อาจเกิดขึ้น อัตโนมัติ หรือ ด้วยตนเอง

Key Takeaways​

  • CodeDeploy = ระบบปรับใช้แอปอัตโนมัติ
  • รองรับ: EC2, On-premises, Lambda, ECS
  • มีกลยุทธ์: in-place, blue/green
  • ความเร็ว deploy: AllAtOnce, HalfAtATime, OneAtATime
  • Rollback อัตโนมัติเมื่อเกิดปัญหา
  • Traffic shifting ใช้ Linear, Canary, หรือ AllAtOnce
  • appspec.yml = ไฟล์หลักสำหรับกำหนดการปรับใช้
  • In-place = อัปเดต instance เดิม
  • Blue/Green = สร้าง ASG ใหม่ + ELB switch traffic
  • ASG instances ใหม่ → CodeDeploy deploy ให้ทันที
  • Rollback = redeploy เวอร์ชันเสถียร ไม่ใช่ restore deployment เก่า