AWS Elastic Beanstalk
PaaS for deploying & scaling apps
01PaaS Concept & ภาพรวม Elastic Beanstalk
AWS Elastic Beanstalk คือบริการแบบ PaaS (Platform as a Service) ที่ช่วยให้ developer deploy และจัดการ application ได้ง่ายโดยไม่ต้อง provision/จัดการ infrastructure ด้วยมือ เราแค่ upload code (เช่น JAR, WAR, ZIP) ส่วน EB จะจัดการ EC2, Auto Scaling Group (ASG), Elastic Load Balancer (ELB), RDS ฯลฯ ให้อัตโนมัติ
จุดเด่นคือเป็น developer-centric — เราโฟกัสที่ code แต่ยังคง เข้าถึงและ control resources เบื้องหลังได้เต็มที่ (ต่างจาก Lambda/App Runner ที่ซ่อน infra). EB ใช้ CloudFormation เบื้องหลังในการ provision resources
- Managed service: EB จัดการ capacity provisioning, load balancing, scaling, health monitoring ให้
- ยังควบคุมได้: ปรับ configuration ของ EC2/ASG/ELB ได้ทั้งหมด
- 3 architecture models: Single Instance (dev), High Availability with LB (prod), เป็นต้น
- รองรับหลายภาษา/แพลตฟอร์ม
02Components: Application, Version, Environment
EB มี 3 components หลัก ที่ต้องแยกให้ออก เพราะข้อสอบชอบถามนิยาม
- มี 2 environment tiers: Web Server Environment และ Worker Environment
- มักแยก environment เป็น dev / test / prod
- Environment lifecycle: create -> deploy -> update -> terminate
03Web Server vs Worker Environment
EB มี environment 2 tiers ที่ออกแบบงานต่างกัน
| หัวข้อ | Web Server Environment | Worker Environment |
|---|---|---|
| หน้าที่ | รับ HTTP request จาก client โดยตรง | ประมวลผล background / asynchronous tasks |
| แหล่ง work | HTTP จากผู้ใช้ผ่าน ELB | ดึง message จาก SQS queue |
| กลไก | ALB/CLB กระจาย traffic ไป EC2 | มี daemon อ่าน SQS แล้ว HTTP POST ไป local app |
| use case | website, REST API | video processing, long-running jobs, email |
04Supported Platforms & Docker
EB รองรับ หลาย platform / language ถ้าไม่มี platform ที่รองรับ ก็เขียน custom platform ได้ (advanced)
- Languages: Go, Java (SE และ Tomcat), .NET (Core บน Linux, .NET บน Windows Server), Node.js, PHP, Python, Ruby
- Web servers/containers: Tomcat, Nginx, Passenger
- Docker: Single Container Docker และ Multi-container (ECS managed)
- ถ้าไม่มี platform ที่ต้องการ -> สร้าง Custom Platform (ใช้ Packer)
Docker บน EB
- Single Docker Container: deploy ผ่าน Dockerfile หรือ Dockerrun.aws.json (v1) รันบน EC2 ที่ EB จัดการ (ไม่ใช้ ECS)
- Multi-container Docker: ใช้ Dockerrun.aws.json (v2) รันบน ECS ที่ EB สร้าง cluster ให้
// Dockerrun.aws.json (v1) สำหรับ single container — ดึง image จาก ECR/Docker Hub
{
"AWSEBDockerrunVersion": "1",
"Image": {
"Name": "123456789012.dkr.ecr.us-east-1.amazonaws.com/my-app:latest",
"Update": "true"
},
"Ports": [
{ "ContainerPort": 8080, "HostPort": 80 }
]
}05Deployment Policies (สำคัญมากในข้อสอบ)
นี่คือหัวข้อที่ ออกสอบบ่อยที่สุด ของ EB ต้องจำว่าแต่ละ policy มี downtime ไหม, ลด capacity ไหม, rollback เร็วไหม, cost เท่าไหร่
| Policy | Downtime | Reduced capacity | Rollback | Cost |
|---|---|---|---|---|
| All at once | มี (Yes) | - | redeploy เก่า | ต่ำสุด |
| Rolling | ไม่มี | มี | manual/ช้า | ไม่เพิ่ม |
| Rolling + additional batch | ไม่มี | ไม่มี | manual/ช้า | เพิ่มน้อย (1 batch) |
| Immutable | ไม่มี | ไม่มี | เร็ว (terminate ใหม่) | สูง (2 ชุด) |
| Blue/Green | ไม่มี | ไม่มี | เร็ว (swap กลับ) | สูง (2 env) |
| Traffic Splitting | ไม่มี | ไม่มี | เร็วมาก | สูง (canary ASG) |
06.ebextensions (Config Files)
.ebextensions ใช้ customize environment ตอน deploy เช่น ติดตั้ง packages, ตั้ง environment variables, สร้าง AWS resources เพิ่ม
- ต้องอยู่ใน directory ชื่อ .ebextensions/ ที่ root ของ source code
- ไฟล์ต้องนามสกุล .config (เขียนเป็น YAML หรือ JSON)
- สามารถสร้าง resources เพิ่มผ่าน key Resources (ใช้ CloudFormation syntax)
- resources ที่สร้างผ่าน .ebextensions จะถูก ลบเมื่อ terminate environment
# .ebextensions/01-options.config
option_settings:
aws:elasticbeanstalk:application:environment:
DB_HOST: mydb.example.com
LOG_LEVEL: info
aws:autoscaling:asg:
MinSize: 2
MaxSize: 4
packages:
yum:
git: []
Resources:
MyQueue:
Type: AWS::SQS::Queue07Environment Lifecycle, RDS Coupling & Cloning
Application Version Lifecycle
EB มี limit จำนวน application versions (default 1000 ต่อ region) ถ้าชนจะ deploy version ใหม่ไม่ได้ ใช้ Lifecycle Policy ให้ลบ version เก่าอัตโนมัติ (ตามจำนวนหรืออายุ) เลือกได้ว่าจะลบ source bundle ใน S3 ด้วยหรือไม่
RDS Coupling vs Decoupling
| หัวข้อ | RDS ภายใน EB (coupled) | RDS แยกต่างหาก (decoupled) |
|---|---|---|
| Lifecycle | ผูกกับ environment — ลบ env = ลบ DB | อิสระจาก environment |
| เหมาะกับ | dev / test | production |
| เชื่อมต่อ | auto env vars (RDS_*) | env properties / connection string |
| ความเสี่ยง | ข้อมูลหายตอน terminate | ปลอดภัย คงข้อมูล |
Environment Cloning
- Clone สร้าง environment ใหม่จากของเดิม โดย copy configuration/resources เหมือนกัน (instance type, version, env vars, security groups)
- เหมาะสร้าง staging/test ที่เหมือน production
- สำคัญ: RDS data ไม่ถูก clone (clone เฉพาะ config)
08EB CLI & Health
EB CLI ช่วยจัดการ EB จาก command line ทำให้ deploy/ดู logs/config ได้สะดวก เหมาะกับ automation/CI-CD
eb init # ตั้งค่า EB CLI / repo ครั้งแรก (เลือก region, platform, app)
eb create # สร้าง environment ใหม่
eb deploy # deploy code version ปัจจุบันขึ้น environment ที่ active
eb status # ดูสถานะ environment
eb health # ดู health ของ instances
eb config # ดู/แก้ configuration
eb logs # ดึง logs
eb open # เปิด URL ของ app ใน browser
eb terminate # ลบ environmentEnvironment Health (สีบอกสถานะ)
- Green: ทำงานปกติ ผ่าน health check
- Yellow: บาง request fail
- Red: หลาย request fail / instance unhealthy
- Grey: กำลัง update หรือ unknown state
คำถามทบทวน
ทดสอบความเข้าใจหัวข้อ AWS Elastic Beanstalk
21 ข้อ · เลือกคำตอบเพื่อดูเฉลยและคำอธิบาย
1.บริษัทต้องการ deploy แอป Java บน AWS โดยไม่ต้องจัดการ infrastructure เอง แต่ยังต้องการ full control ของ EC2, ASG, ELB ที่อยู่เบื้องหลัง บริการใดเหมาะที่สุด?
2.แอปต้องการประมวลผลงานจาก SQS queue แบบ background ที่ใช้เวลานานนอกเหนือจาก HTTP request ควรใช้ EB environment แบบใด?
3.deployment policy ใดของ EB ที่ deploy เร็วที่สุดแต่มี downtime และเหมาะกับ dev environment?
4.deployment policy ใดสร้าง instance ใหม่ทั้งหมดบน temporary ASG, deploy version ใหม่, แล้วค่อย swap ทำให้ rollback ทำได้เร็วและปลอดภัยที่สุด?
5.ระหว่าง Rolling deployment แอปจะอยู่ในสถานะใด?
6.ต้องการ deploy แบบ no downtime และรักษา full capacity ตลอด (ไม่ลด capacity) โดยใช้ในหลาย production แต่ไม่อยากเสีย cost เท่า Immutable ควรใช้ policy ใด?
7.feature ใดของ EB ใช้ deploy version ใหม่ไปยัง instance ใหม่บางส่วนแล้วส่ง traffic เพียงเปอร์เซ็นต์เล็กน้อยไปทดสอบ (canary) ก่อน shift เต็ม?
8.Blue/Green deployment บน Elastic Beanstalk ทำได้อย่างไร (ไม่ใช่ built-in policy)?
9.ต้องการติดตั้ง package เพิ่มเติมและตั้ง environment variables ตอน deploy บน EB โดยใช้ไฟล์ config ต้องวางไฟล์ไว้ที่ใดและนามสกุลอะไร?
10.กับดักข้อสอบ: เมื่อสร้าง RDS database ภายใน Elastic Beanstalk environment โดยตรง จะเกิดอะไรขึ้นเมื่อ terminate environment นั้น?
11.แนวทางที่ AWS แนะนำสำหรับ production เพื่อ decouple RDS ออกจาก EB environment คืออะไร?
12.ทีมต้องการสร้าง environment ใหม่ที่มี config และ resources เหมือน production เป๊ะ ๆ เพื่อทำ test ควรใช้ feature ใดของ EB?
13.EB supported platform ใดให้คุณรัน custom application โดย package เป็น container ภาพเดียว และ EB จัดการ EC2/scaling ให้?
14.คำสั่ง EB CLI ใดใช้ deploy application version ปัจจุบันขึ้น environment ที่ active อยู่?
15.Application Version ใน Elastic Beanstalk หมายถึงอะไร?
16.ในระหว่าง Immutable deployment ถ้า health check ของ instance ใหม่ fail จะเกิดอะไรขึ้น?
17.ต้องการให้ traffic 10% ไป version ใหม่และ monitor ก่อน หาก metric ดีจึง shift 100% โดยอัตโนมัติ ภายใน environment เดียว ควรใช้อะไร?
18.ข้อใดถูกต้องเกี่ยวกับค่าใช้จ่ายของ Elastic Beanstalk?
19.กับดักข้อสอบ: ต้องการ deploy ไฟล์/script ลงในระดับ OS หรือ web server ของ EB platform เวอร์ชันใหม่ (Amazon Linux 2+) แนะนำให้ใช้อะไรแทน .ebextensions packages บางส่วน?
20.ต้องการ lifecycle policy ให้ EB ลบ application versions เก่าอัตโนมัติเมื่อเกินจำนวนที่กำหนด เพื่ออะไร?
21.environment health ใน EB แสดงเป็นสีใดเมื่อ environment ทำงานปกติและผ่าน health check?