Auto Scaling
EC2 Auto Scaling ช่วยรักษาจำนวน instances ตาม desired capacity, แทนที่ unhealthy instances และเพิ่ม/ลด capacity ตาม policy ที่กำหนด
Launch Template
Launch Template คือ definition สำหรับ launch EC2 เช่น AMI, Instance Type, Security Group, IAM Instance Profile, User Data และ storage Auto Scaling Group ใช้ Launch Template เพื่อสร้าง instance ใหม่อย่างสม่ำเสมอ
Auto Scaling Group
Auto Scaling Group หรือ ASG กำหนด minimum, maximum และ desired capacity รวมถึง subnet/AZ ที่ instance จะถูก launch เมื่อ instance unhealthy หรือถูก terminate ASG สามารถ launch instance ใหม่เพื่อกลับสู่ desired capacity
| Setting | ความหมาย |
|---|---|
| Minimum capacity | จำนวน instance ต่ำสุดที่ ASG รักษาไว้ |
| Desired capacity | จำนวน instance ที่ต้องการ ณ ตอนนี้ |
| Maximum capacity | เพดานสูงสุดสำหรับ scale out |
| Health check type | EC2 หรือ ELB health check |
Scaling policies
- Target tracking: รักษา metric เช่น CPU average ใกล้ target value
- Step scaling: เพิ่ม/ลด capacity ตาม alarm breach เป็นขั้นๆ
- Scheduled scaling: ปรับ capacity ตามเวลาที่คาดการณ์ load ได้
Design for scaling
Application ที่อยู่หลัง ASG ควร stateless หรือเก็บ state นอก instance เช่น Database, Redis, S3 หรือ shared session store ถ้าเก็บไฟล์หรือ session ไว้บน local disk ของ instance เมื่อ scale in หรือ replace instance ข้อมูลอาจหายหรือไม่สม่ำเสมอ
Common mistakes
- User Data ไม่ idempotent ทำให้ instance ใหม่ bootstrap ไม่สม่ำเสมอ
- Health check grace period สั้นเกินไป instance ยัง boot ไม่เสร็จก็ถูก mark unhealthy
- ตั้ง max capacity ต่ำเกินจน scale out ไม่พอช่วง peak
- เก็บ upload/session ไว้บน instance local disk
Review questions
- อธิบาย Launch Template กับ ASG ได้
- ตั้ง min, desired, max โดยคิดทั้ง availability และ cost ได้
- รู้ว่า workload หลัง ASG ควร stateless หรือเก็บ state นอก instance
- Launch Template เก็บ configuration อะไรบ้าง?
- Desired capacity ต่างจาก maximum capacity อย่างไร?
- ทำไม application หลัง ASG ควร stateless?