PlAwAnSaI
Administrator
Feature Task Scale-in Protection สำหรับ Amazon ECS
Feature Task Scale-in Protection สำหรับ Amazon ECS ช่วยให้ผู้ใช้สามารถป้องกันไม่ให้ Task บางตัวที่สำคัญถูก Terminate โดยอัตโนมัติเมื่อเกิดเหตุการณ์ Scale-in ของบริการ (Service Auto Scaling) หรือเมื่อมีการ Deploy Task รุ่นใหม่
ผู้ใช้สามารถตั้งค่าว่างานที่สำคัญให้ได้รับการป้องกันจาก Scale-in ได้ โดยใช้ Endpoint ใหม่ของ ECS Agent หรือผ่าน API ใหม่ที่ AWS จัดไว้
ที่มาของความต้องการ:
แนวทางแก้ไข (Solution Overview):
Feature Task Scale-in Protection ให้ผู้ใช้สามารถใช้ Attribute ใหม่ชื่อ protectionEnabled เพื่อทำงาน 2 อย่าง:
มี 2 วิธีหลักในการตั้ง/ปลด Protection:
ตัวอย่างการใช้งาน
สรุป
Feature Task Scale-in Protection ช่วยให้ผู้ใช้ควบคุมได้มากขึ้นว่างานใดควร “คงอยู่” เมื่อเกิด Scale-in หรือ Deploy และช่วยลดความยุ่งยากในการสร้างเครื่องมือเฉพาะทางเพื่อจัดการเรื่องนี้

Feature Task Scale-in Protection สำหรับ Amazon ECS ช่วยให้ผู้ใช้สามารถป้องกันไม่ให้ Task บางตัวที่สำคัญถูก Terminate โดยอัตโนมัติเมื่อเกิดเหตุการณ์ Scale-in ของบริการ (Service Auto Scaling) หรือเมื่อมีการ Deploy Task รุ่นใหม่
ผู้ใช้สามารถตั้งค่าว่างานที่สำคัญให้ได้รับการป้องกันจาก Scale-in ได้ โดยใช้ Endpoint ใหม่ของ ECS Agent หรือผ่าน API ใหม่ที่ AWS จัดไว้
ที่มาของความต้องการ:
- Feature Service Auto Scaling ช่วยให้ ECS สามารถปรับจำนวน Task ขึ้นหรือลงตามความต้องการ (Load) โดยอัตโนมัติ
- แต่ในบางกรณี ผู้ใช้ต้องการให้บาง Task ทำงานต่อไป แม้ในช่วงที่ Load ต่ำ เช่น งานที่ Run ยาวนาน (Long-running Job), Server Game ที่ต้องคงสถานะไว้, หรืองานที่ยังไม่เสร็จสิ้น
- ก่อนหน้านี้ ไม่มีวิธีง่าย ๆ ที่ ECS จะรู้ว่างานใดควรได้รับการ “ไม่ถูกหยุด” เมื่อ Scale-in เกิดขึ้น จึงต้องทำ Workaround ซับซ้อน
แนวทางแก้ไข (Solution Overview):
Feature Task Scale-in Protection ให้ผู้ใช้สามารถใช้ Attribute ใหม่ชื่อ protectionEnabled เพื่อทำงาน 2 อย่าง:
- ตั้งค่าว่า Task ไหนให้ “ได้รับการป้องกัน” (Protection)
ถ้าตั้ง protectionEnabled = true > Task นั้นจะไม่ถูกหยุดโดยการ Scale-in หรือ Deploy
- ปลดการป้องกันเมื่อไม่ได้ใช้งานแล้ว
เมื่อ Task ทำงานเสร็จ ผู้ใช้สามารถตั้ง protectionEnabled = false ให้ Task กลับเข้าสู่สถานะที่สามารถถูกหยุดได้
มี 2 วิธีหลักในการตั้ง/ปลด Protection:
- ภายใน Container / ผ่าน ECS Agent Endpoint
Task สามารถ “รู้เอง” ว่าต้องการให้ตัวเองได้รับการป้องกัน (เช่น เมื่อเริ่มงานจาก Queue) แล้วตั้ง Protection ผ่าน Endpoint ภายใน Container
- ผ่าน API (UpdateTaskProtection)
ส่วนควบคุมภายนอกสามารถ Management หลาย Task พร้อมกัน โดยเรียก API เพื่อ Mark งานที่ต้องป้องกัน
ตัวอย่างการใช้งาน
- SQS Queue Consumer:
งานดึงข้อความจาก Queue มา แล้วประมวลผล เมื่องานกำลังประมวลผล จะตั้ง Protection เพื่อให้ ECS ไม่หยุดงานกลางทาง และเมื่อเสร็จแล้วจึงปลด Protection
- บริการ WebSocket / Game / Server ที่ใช้งานตลอด:
ถ้ามีการเชื่อมต่อ Active อยู่ จะตั้ง Protection เพื่อไม่ให้ถูกหยุดกลางทาง และเมื่อลูกค้า (Client) ปิดการเชื่อมต่อทั้งหมด จึงปลด Protection
สรุป
Feature Task Scale-in Protection ช่วยให้ผู้ใช้ควบคุมได้มากขึ้นว่างานใดควร “คงอยู่” เมื่อเกิด Scale-in หรือ Deploy และช่วยลดความยุ่งยากในการสร้างเครื่องมือเฉพาะทางเพื่อจัดการเรื่องนี้
Code:
https://aws.amazon.com/blogs/containers/announcing-amazon-ecs-task-scale-in-protection
Last edited: