AWS DVA-C02
Esc
↑↓เลื่อน↵เปิดescปิด28 ผลลัพธ์
14

AWS Elastic Beanstalk

PaaS for deploying & scaling apps

Compute 10 นาที 21 คำถาม

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), เป็นต้น
  • รองรับหลายภาษา/แพลตฟอร์ม
Tips สำหรับการสอบ
จำว่า Elastic Beanstalk ฟรี ไม่มีค่าบริการของตัวมันเอง — จ่ายเฉพาะ underlying resources (EC2, ELB, RDS, S3). ถ้าโจทย์ถามถึง deploy แอปแบบ managed แต่ยังต้อง control EC2/infra คำตอบมักคือ Elastic Beanstalk

02Components: Application, Version, Environment

EB มี 3 components หลัก ที่ต้องแยกให้ออก เพราะข้อสอบชอบถามนิยาม

Application
Logical collection ของ EB components ทั้งหมด — รวม environments, versions, และ configurations เปรียบเหมือน folder ของโปรเจกต์
Application Version
iteration ของ deployable code เฉพาะหนึ่ง ๆ โดย EB เก็บ source bundle (ZIP/WAR) ไว้ใน S3 และ version ชี้ไปยัง S3 object นั้น สามารถ deploy / rollback ระหว่าง versions ได้
Environment
collection ของ AWS resources ที่รัน application version หนึ่ง ๆ (เช่น EC2, ASG, ELB) แต่ละ environment รันได้เพียง 1 application version ในแต่ละช่วงเวลา แต่ deploy version เดียวกันไปหลาย environment ได้
  • มี 2 environment tiers: Web Server Environment และ Worker Environment
  • มักแยก environment เป็น dev / test / prod
  • Environment lifecycle: create -> deploy -> update -> terminate
หมายเหตุ
การ deploy คือการนำ Application Version ไปใส่ใน Environment — สามารถ promote version จาก dev ไป prod ได้

03Web Server vs Worker Environment

EB มี environment 2 tiers ที่ออกแบบงานต่างกัน

หัวข้อWeb Server EnvironmentWorker Environment
หน้าที่รับ HTTP request จาก client โดยตรงประมวลผล background / asynchronous tasks
แหล่ง workHTTP จากผู้ใช้ผ่าน ELBดึง message จาก SQS queue
กลไกALB/CLB กระจาย traffic ไป EC2มี daemon อ่าน SQS แล้ว HTTP POST ไป local app
use casewebsite, REST APIvideo processing, long-running jobs, email
Tips สำหรับการสอบ
โจทย์ที่พูดถึง งานที่ใช้เวลานาน/ประมวลผลเป็น background/ดึงงานจาก SQS -> เลือก Worker Environment. โจทย์ที่ web tier ต้องส่งงานหนักไปให้ worker -> push message เข้า SQS แล้วให้ worker environment ดึงไปทำ (decoupling)

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 ให้
json
// 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 }
  ]
}
หมายเหตุ
Single container ใช้ Dockerrun v1 และรันบน EC2 โดยตรง ส่วน multi-container ใช้ v2 และรันบน ECS — ข้อสอบชอบสลับ version ให้สับสน

05Deployment Policies (สำคัญมากในข้อสอบ)

นี่คือหัวข้อที่ ออกสอบบ่อยที่สุด ของ EB ต้องจำว่าแต่ละ policy มี downtime ไหม, ลด capacity ไหม, rollback เร็วไหม, cost เท่าไหร่

All at once
deploy ทุก instance พร้อมกัน เร็วที่สุด แต่ มี downtime เหมาะ dev. ไม่มี cost เพิ่ม. rollback = redeploy version เก่า
Rolling
deploy ทีละ batch — no downtime แต่ capacity ลดลงชั่วคราว และมี 2 versions รันพร้อมกันระหว่างทาง ช้ากว่า all at once
Rolling with additional batch
เพิ่ม batch ใหม่ก่อนเพื่อ รักษา full capacity ตลอด — no downtime, ไม่ลด capacity เหมาะ production มี cost เพิ่มเล็กน้อย (1 batch). ระหว่างทางมี 2 versions
Immutable
สร้าง instance ใหม่ทั้งหมดบน temporary ASG ใหม่ ถ้า healthy จึง move เข้า ASG เดิม — zero downtime, rollback เร็วและปลอดภัยสุด แต่ ใช้เวลานานสุด, cost สูงสุด (instance 2 ชุด). ไม่มีปัญหา 2 versions ผสมกัน
Blue/Green (ไม่ใช่ built-in policy)
สร้าง environment ใหม่ (green) deploy/test แล้วใช้ Swap URLs (CNAME swap) ย้าย traffic ทันที zero downtime, rollback = swap กลับ
Traffic Splitting (Canary)
deploy version ใหม่บน temporary ASG แล้วส่ง % traffic เล็กน้อย (canary) ผ่าน ALB เพื่อ monitor health/metrics ถ้าผ่านจึง shift 100% อัตโนมัติ rollback เร็ว
PolicyDowntimeReduced capacityRollbackCost
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)
กับดักข้อสอบ
อย่าสับสน Rolling กับ Rolling with additional batch: ตัวแรก ลด capacity ระหว่าง deploy, ตัวหลัง ไม่ลด capacity (เพิ่ม batch ก่อน). และจำว่า Blue/Green ไม่ใช่ deployment policy ใน dropdown ต้องทำเองด้วยการสร้าง env ใหม่ + Swap URLs

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
yaml
# .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::Queue
Tips สำหรับการสอบ
สำหรับ platform Amazon Linux 2 ขึ้นไป ใช้ directory .platform/ สำหรับ platform hooks (prebuild/predeploy/postdeploy) และ config ของ web server (เช่น nginx) เป็นแนวทางแนะนำเสริมจาก .ebextensions

07Environment 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 / testproduction
เชื่อมต่อauto env vars (RDS_*)env properties / connection string
ความเสี่ยงข้อมูลหายตอน terminateปลอดภัย คงข้อมูล
กับดักข้อสอบ
การสร้าง RDS ภายใน EB environment ทำให้ DB lifecycle ผูกกับ environment — terminate environment แล้ว RDS หายไปด้วย (data loss). Production ควร สร้าง RDS แยก แล้วเชื่อมผ่าน environment variables เพื่อ decouple

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

bash
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   # ลบ environment

Environment Health (สีบอกสถานะ)

  • Green: ทำงานปกติ ผ่าน health check
  • Yellow: บาง request fail
  • Red: หลาย request fail / instance unhealthy
  • Grey: กำลัง update หรือ unknown state
หมายเหตุ
เปิด Enhanced Health Reporting เพื่อดูเมตริกละเอียด (เช่น HTTP status, latency, CPU) มากกว่า Basic health

คำถามทบทวน

ทดสอบความเข้าใจหัวข้อ AWS Elastic Beanstalk

21 ข้อ · เลือกคำตอบเพื่อดูเฉลยและคำอธิบาย

ทำแล้ว 0/21คะแนน 0
  1. 1.บริษัทต้องการ deploy แอป Java บน AWS โดยไม่ต้องจัดการ infrastructure เอง แต่ยังต้องการ full control ของ EC2, ASG, ELB ที่อยู่เบื้องหลัง บริการใดเหมาะที่สุด?

  2. 2.แอปต้องการประมวลผลงานจาก SQS queue แบบ background ที่ใช้เวลานานนอกเหนือจาก HTTP request ควรใช้ EB environment แบบใด?

  3. 3.deployment policy ใดของ EB ที่ deploy เร็วที่สุดแต่มี downtime และเหมาะกับ dev environment?

  4. 4.deployment policy ใดสร้าง instance ใหม่ทั้งหมดบน temporary ASG, deploy version ใหม่, แล้วค่อย swap ทำให้ rollback ทำได้เร็วและปลอดภัยที่สุด?

  5. 5.ระหว่าง Rolling deployment แอปจะอยู่ในสถานะใด?

  6. 6.ต้องการ deploy แบบ no downtime และรักษา full capacity ตลอด (ไม่ลด capacity) โดยใช้ในหลาย production แต่ไม่อยากเสีย cost เท่า Immutable ควรใช้ policy ใด?

  7. 7.feature ใดของ EB ใช้ deploy version ใหม่ไปยัง instance ใหม่บางส่วนแล้วส่ง traffic เพียงเปอร์เซ็นต์เล็กน้อยไปทดสอบ (canary) ก่อน shift เต็ม?

  8. 8.Blue/Green deployment บน Elastic Beanstalk ทำได้อย่างไร (ไม่ใช่ built-in policy)?

  9. 9.ต้องการติดตั้ง package เพิ่มเติมและตั้ง environment variables ตอน deploy บน EB โดยใช้ไฟล์ config ต้องวางไฟล์ไว้ที่ใดและนามสกุลอะไร?

  10. 10.กับดักข้อสอบ: เมื่อสร้าง RDS database ภายใน Elastic Beanstalk environment โดยตรง จะเกิดอะไรขึ้นเมื่อ terminate environment นั้น?

  11. 11.แนวทางที่ AWS แนะนำสำหรับ production เพื่อ decouple RDS ออกจาก EB environment คืออะไร?

  12. 12.ทีมต้องการสร้าง environment ใหม่ที่มี config และ resources เหมือน production เป๊ะ ๆ เพื่อทำ test ควรใช้ feature ใดของ EB?

  13. 13.EB supported platform ใดให้คุณรัน custom application โดย package เป็น container ภาพเดียว และ EB จัดการ EC2/scaling ให้?

  14. 14.คำสั่ง EB CLI ใดใช้ deploy application version ปัจจุบันขึ้น environment ที่ active อยู่?

  15. 15.Application Version ใน Elastic Beanstalk หมายถึงอะไร?

  16. 16.ในระหว่าง Immutable deployment ถ้า health check ของ instance ใหม่ fail จะเกิดอะไรขึ้น?

  17. 17.ต้องการให้ traffic 10% ไป version ใหม่และ monitor ก่อน หาก metric ดีจึง shift 100% โดยอัตโนมัติ ภายใน environment เดียว ควรใช้อะไร?

  18. 18.ข้อใดถูกต้องเกี่ยวกับค่าใช้จ่ายของ Elastic Beanstalk?

  19. 19.กับดักข้อสอบ: ต้องการ deploy ไฟล์/script ลงในระดับ OS หรือ web server ของ EB platform เวอร์ชันใหม่ (Amazon Linux 2+) แนะนำให้ใช้อะไรแทน .ebextensions packages บางส่วน?

  20. 20.ต้องการ lifecycle policy ให้ EB ลบ application versions เก่าอัตโนมัติเมื่อเกินจำนวนที่กำหนด เพื่ออะไร?

  21. 21.environment health ใน EB แสดงเป็นสีใดเมื่อ environment ทำงานปกติและผ่าน health check?