Amazon ECS – Task Placement Process

-
Task Placement Strategies เป็นเพียง “best effort” หรือพยายามให้ดีที่สุดตามเงื่อนไข
-
เมื่อ Amazon ECS จะวาง task มันจะทำตามขั้นตอนดังนี้:
- ระบุ EC2 instances ที่รองรับ CPU, memory, และ port ที่กำหนดใน task definition
- ระบุ instances ที่สอดคล้องกับ Task Placement Constraints
- ระบุ instances ที่สอดคล้องกับ Task Placement Strategies
- เลือก instance ที่เหมาะสมที่สุดและวาง task ลงไป
ECS Task Placements
-
เมื่อสร้าง task แบบ EC2 launch type ECS ต้องเลือกว่าจะวาง task ที่ instance ไหนตาม CPU, memory, port ที่ว่างอยู่
-
ตัวอย่าง:
- ECS cluster มี 3 EC2 instances
- มี tasks บางตัวอยู่แล้ว
- ถ้า service ต้องการรัน container ใหม่ ECS ต้องตัดสินใจว่าจะวาง task ใหม่ที่ instance ไหน
-
ในกรณีที่ service scale in (ลดจำนวน task) ECS ต้องตัดสินใจว่าจะ terminate task ไหน
หมายเหตุ:
- การวาง task ด้วย constraints และ strategies จะใช้ได้ เฉพาะ ECS บน EC2
- สำหรับ Fargate, AWS จะจัดการ placement ให้เอง
Task Placement Strategies
-
Binpack
- วาง tasks บน instance ที่มี CPU หรือ memory เหลือน้อยที่สุด ก่อน
- ช่วยลดจำนวน EC2 instances ในการใช้งาน → ประหยัดค่าใช้จ่าย
{
"type": "binpack",
"field": "memory"
}
- ECS จะพยายามใส่ containers ให้เต็ม instance หนึ่งก่อน แล้วจึงย้ายไป instance ถัดไป
-
Random
- วาง tasks แบบสุ่ม ไม่มีลำดับ logic
{
"type": "random"
}
-
Spread
- กระจาย tasks ตามค่า attribute เช่น instance ID หรือ availability zone (AZ)
{
"type": "spread",
"field": "attribute:ecs.availability-zone"
}
- ตัวอย่าง: มี 3 EC2 instances ใน 3 AZ → task จะถูกกระจายสลับกัน AZ-A → AZ-B → AZ-C
- เพิ่ม high availability ของ service
-
สามารถผสม strategies ได้
- เช่น spread ตาม AZ + binpack ตาม memory
-
สำหรับสอบ ให้เข้าใจ binpack, spread, random
ECS Task Placement Constraints
-
distinctInstance
- ทำให้แต่ละ task อยู่ คนละ EC2 instance
{
"type": "distinctInstance"
} -
memberOf
- วาง task บน instances ที่ตรงตาม expression ของ cluster query language
{
"type": "memberOf",
"expression": "attribute:ecs.instance-type == t2.*"
}- ตัวอย่าง: tasks จะรันเฉพาะบน t2 instances
สรุป:
- distinctInstance → เข้าใจง่าย
- memberOf → ซับซ้อนขึ้น ใช้ expression กำหนดเงื่อนไข
สรุป Key Takeaways
-
ECS task placement กำหนด ที่วาง task บน EC2 ตาม resource และ strategy ที่กำหนด
-
Task placement strategies มี 3 แบบหลัก:
- Binpack → ประหยัดค่าใช้จ่าย
- Random → วางแบบสุ่ม
- Spread → กระจายเพื่อ availability
-
Task placement constraints:
- distinctInstance → task อยู่คนละ instance
- memberOf → task อยู่บน instance ที่ตรงตามเงื่อนไข
-
concepts เหล่านี้ ใช้เฉพาะ ECS บน EC2
- Fargate จะจัดการ placement อัตโนมัติ