
บทนำ
เมื่อระบบขนาดใหญ่ต้องรองรับผู้ใช้จำนวนมาก การแยกส่วนระบบออกเป็นบริการย่อย ๆ (Microservices) คือแนวทางที่ทำให้การพัฒนาและดูแลระบบมีประสิทธิภาพมากขึ้น โดยเฉพาะเมื่อผนวกกับการใช้ Container ผ่านบริการอย่าง AWS ECS (Elastic Container Service) และ AWS EKS (Elastic Kubernetes Service) ซึ่งช่วยจัดการการรัน Container ได้แบบอัตโนมัติ และปรับขนาดระบบได้ตามโหลดที่เปลี่ยนแปลง

Microservices คืออะไร?
Microservices คือแนวคิดการพัฒนาแอปพลิเคชันโดยแยกออกเป็น “บริการย่อย” ที่ทำงานแยกกัน โดยแต่ละบริการจะมีหน้าที่เฉพาะ เช่น ระบบผู้ใช้, ระบบสั่งซื้อ, ระบบชำระเงิน และสามารถ Deploy อิสระจากกันได้
- 🔸 พัฒนาโดยทีมอิสระแต่ละส่วน
- 🔸 ใช้เทคโนโลยีและภาษาโปรแกรมที่แตกต่างกันได้
- 🔸 สามารถ Scale เฉพาะบริการที่จำเป็น
- 🔸 ลดผลกระทบของการ Deploy ทั้งระบบ
ความแตกต่างระหว่าง ECS และ EKS
ก่อนเลือกว่าจะใช้ ECS หรือ EKS ควรเข้าใจแนวคิดของแต่ละบริการ:
| คุณสมบัติ | AWS ECS | AWS EKS |
|---|---|---|
| เครื่องมือจัดการ Container | Amazon Orchestrator (Native) | Kubernetes |
| การเรียนรู้ | ง่าย เหมาะกับผู้เริ่มต้น | ซับซ้อนกว่า แต่ยืดหยุ่นสูง |
| การทำงานร่วมกับระบบอื่น | ผสานกับบริการ AWS ได้ดี | รองรับมาตรฐาน Kubernetes API |
| การจัดการ Cluster | จัดการอัตโนมัติ | ต้องดูแล Node และ Control Plane |
ภาพรวมสถาปัตยกรรม ECS / EKS
ทั้ง ECS และ EKS มีสถาปัตยกรรมที่คล้ายกัน โดยใช้แนวคิด Container และ Service Orchestration:
- ผู้พัฒนา Push Docker Image ไปยัง Amazon ECR (Elastic Container Registry)
- ECS/EKS ทำการ Pull Image และรันบน Cluster
- Service Discovery ช่วยให้ Container ค้นหากันเองได้
- Auto Scaling ปรับจำนวน Instance ตามโหลด

เริ่มต้นสร้าง Service ด้วย ECS
ตัวอย่างการ Deploy Container ด้วย ECS แบบ Fargate:
{
"family": "my-web-service",
"containerDefinitions": [{
"name": "web",
"image": "123456789012.dkr.ecr.ap-southeast-1.amazonaws.com/myapp:latest",
"portMappings": [{
"containerPort": 80,
"hostPort": 80
}],
"memory": 512,
"cpu": 256
}]
}
จากนั้นสามารถ Deploy ผ่าน AWS Console หรือใช้คำสั่ง CLI:
aws ecs create-service \
--cluster myCluster \
--service-name web-service \
--task-definition my-web-service \
--desired-count 2 \
--launch-type FARGATE
ตัวอย่าง Deployment ด้วย EKS
สำหรับ EKS จะใช้ Kubernetes YAML ในการกำหนดการรัน Pod:
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-deployment
spec:
replicas: 3
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: web
image: 123456789012.dkr.ecr.ap-southeast-1.amazonaws.com/myapp:latest
ports:
- containerPort: 80
ใช้คำสั่ง Deploy:
kubectl apply -f web-deployment.yaml
การ Scale ระบบแบบอัตโนมัติ
ทั้ง ECS และ EKS รองรับการ Auto Scaling โดยสามารถตั้งค่าให้ปรับจำนวน Task หรือ Pod ตามโหลดของระบบ เช่น CPU, Memory หรือ Request Rate
aws application-autoscaling register-scalable-target \
--service-namespace ecs \
--resource-id service/myCluster/web-service \
--scalable-dimension ecs:service:DesiredCount \
--min-capacity 2 --max-capacity 10
Service Discovery และ Load Balancing
เพื่อให้ Container แต่ละตัวสามารถติดต่อกันได้ AWS มีเครื่องมือช่วยดังนี้:
- 🔹 AWS Cloud Map สำหรับ Service Discovery
- 🔹 Elastic Load Balancer (ALB/NLB) สำหรับกระจายโหลด
- 🔹 Route 53 สำหรับจัดการ DNS
การเชื่อมต่อกับ CI/CD Pipeline
สามารถผสาน ECS/EKS เข้ากับบริการ DevOps ของ AWS ได้อย่างง่าย เช่น:
- CodeCommit → CodeBuild → CodePipeline → ECS/EKS
Best Practices ในการออกแบบระบบ Microservices
- ✅ แยก Service ตาม Domain ของระบบ
- ✅ ใช้ IAM Role แยกกันสำหรับแต่ละ Service
- ✅ ใช้ Parameter Store หรือ Secrets Manager สำหรับ Config
- ✅ Monitor ด้วย CloudWatch และ Prometheus
- ✅ ใช้ Load Balancer กระจายโหลดระหว่าง Container
สรุป
การออกแบบระบบ Microservices ด้วย ECS / EKS ช่วยให้การพัฒนาและ Deploy ระบบมีความยืดหยุ่น, ปลอดภัย และรองรับการขยายตัวของผู้ใช้ได้ง่าย หากคุณต้องการระบบที่ปรับขนาดได้อัตโนมัติ และบริหารจัดการ Container ได้อย่างเป็นระบบ การใช้ ECS หรือ EKS คือคำตอบที่ดีที่สุดในโลกของ Cloud-native Application
📘 บทความโดย King Pool
ภาพประกอบ: ECS/EKS Architecture, Microservices Design, Auto Scaling, CI/CD Integration
อ่านต่อ: การ Optimize Lambda (Cold Start, Provisioned Concurrency)