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

ELB & Auto Scaling Groups

Load balancing & elastic scaling for EC2

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

01แนวคิดพื้นฐาน: High Availability & Scalability

ก่อนเข้าเรื่อง ELB และ ASG ต้องเข้าใจสองคำนี้ก่อน Scalability คือความสามารถในการรองรับ load ที่เพิ่มขึ้น ส่วน High Availability (HA) คือการทำให้ระบบยังทำงานต่อได้แม้บางส่วนล่ม (เช่น AZ ล่ม) ทั้งสองมักทำงานคู่กันแต่เป็นคนละแนวคิด

Scalability มี 2 แบบ

Vertical Scalability (Scale Up/Down)
เพิ่มขนาดของ instance เดียว (เช่น t2.micro -> m5.large) เหมาะกับ non-distributed system เช่น database (RDS, ElastiCache) มีเพดานจำกัดด้วย hardware
Horizontal Scalability (Scale Out/In)
เพิ่ม/ลดจำนวน instances ใช้ได้กับ distributed system เช่น web app นี่คือสิ่งที่ Auto Scaling Group + ELB ทำให้เกิดขึ้น
Tips สำหรับการสอบ
จำให้แม่น: Vertical = scale up/down (instance ใหญ่ขึ้น), Horizontal = scale out/in (จำนวนเพิ่ม), HA = ทนต่อการล่ม (มักรันข้ามหลาย AZ). ข้อสอบชอบสลับคำว่า scale up กับ scale out เพื่อหลอก

High Availability มักหมายถึงการรัน application อย่างน้อย 2 AZ เป้าหมายคือรอดจาก data center / AZ failure ส่วน ELB และ ASG เป็นเครื่องมือหลักที่ทำให้ได้ทั้ง scalability และ HA พร้อมกัน

02Elastic Load Balancer (ELB) ภาพรวม

Load Balancer คือ server ที่กระจาย traffic ไปยัง backend (EC2 instances) หลายตัว ประโยชน์คือกระจาย load, เปิด single point of access (DNS), จัดการ failure ของ instance ได้อย่าง transparent, ทำ regular health checks, และ terminate SSL/TLS

ELB เป็น managed load balancer ของ AWS ดูแล availability และ scaling ให้เอง integrate กับ EC2, ASG, ECS, ACM (certificates), CloudWatch, Route 53 และอื่น ๆ มี 4 ชนิด

  • Application Load Balancer (ALB) — Layer 7 (HTTP/HTTPS/gRPC/WebSocket)
  • Network Load Balancer (NLB) — Layer 4 (TCP/UDP/TLS), performance สูง
  • Gateway Load Balancer (GLB) — Layer 3 (IP packets), สำหรับ network appliances
  • Classic Load Balancer (CLB) — legacy (Layer 4 และ 7), AWS แนะนำให้เลิกใช้
Health Checks
ELB ทำ health check ที่ port + protocol + path (เช่น HTTP 200 ที่ /health) ถ้า instance ตอบไม่ผ่าน healthy threshold/unhealthy threshold จะถูกถือว่า unhealthy และหยุดส่ง traffic ไปให้ จนกว่าจะกลับมา healthy
กับดักข้อสอบ: Security Group
ระวัง! เมื่อใช้ ELB ควรตั้งให้ EC2 security group อนุญาต traffic จาก security group ของ load balancer (ไม่ใช่จาก client IP โดยตรง) เพราะ traffic จริงมาจาก ELB และ ELB security group ต้องเปิดรับจาก internet (0.0.0.0/0 สำหรับ ALB HTTP/HTTPS)

03Application Load Balancer (ALB) เจาะลึก

ALB ทำงานที่ Layer 7 เหมาะกับ HTTP/HTTPS micro-services และ container-based applications จุดเด่นคือ routing ที่ฉลาดและรองรับ target หลายแบบ

Listeners & Rules — routing ฉลาดได้แค่ไหน

  • Path-based routing — route ตาม URL path เช่น /users -> target group A, /posts -> target group B
  • Host-based routing — route ตาม hostname เช่น api.example.com vs www.example.com
  • Query string / header-based routing — route ตาม query parameter หรือ HTTP header
  • Routing actions — forward, redirect (เช่น HTTP -> HTTPS), fixed-response

Target Groups — ปลายทางของ ALB

  • Instance — EC2 instances (รองรับใช้กับ ASG ได้)
  • IP address — ต้องเป็น private IP (รองรับ on-premises ผ่าน Direct Connect/VPN, peered VPC)
  • Lambda function — request ถูกแปลงเป็น JSON event ส่งเข้า Lambda
  • Application Load Balancer — กรณี ALB เป็น target ของ NLB
Tips สำหรับการสอบ
ALB ให้ fixed hostname (DNS name) ไม่ใช่ static IP. ถ้าโจทย์ถามหา static IP ให้นึกถึง NLB ทันที. นอกจากนี้ ALB เห็น client IP ผ่าน header X-Forwarded-For, client port ผ่าน X-Forwarded-Port, protocol ผ่าน X-Forwarded-Proto (เพราะ ALB terminate connection จึงต้องส่งต่อใน header)

Routing algorithm default ของ ALB คือ round robin สามารถเปลี่ยนเป็น least outstanding requests ได้ (เหมาะเมื่อแต่ละ request ใช้เวลาประมวลผลต่างกันมาก)

04Network LB (NLB) & Gateway LB (GLB)

Network Load Balancer (NLB)

NLB ทำงานที่ Layer 4 (TCP, UDP, TLS) ออกแบบมาเพื่อ performance สูงสุด รองรับได้ระดับล้าน requests/วินาที latency ต่ำมาก (~100 ms vs ~400 ms ของ ALB)

  • มี static IP per AZ และรองรับการ assign Elastic IP (ข้อได้เปรียบเหนือ ALB)
  • Target types: instance, IP, และ Application Load Balancer
  • Health check รองรับทั้ง TCP, HTTP, HTTPS
  • ใช้ flow hash algorithm ในการกระจาย traffic
กับดักข้อสอบ: NLB cross-zone ปิด default
NLB และ GLB ปิด cross-zone load balancing เป็น default และเมื่อเปิดจะ มีค่า inter-AZ data transfer. ตรงข้ามกับ ALB ที่ เปิด default และฟรี. ถ้าโจทย์บอก traffic ไม่สมดุลข้าม AZ บน NLB คำตอบคือเปิด cross-zone

Gateway Load Balancer (GLB)

GLB ใช้สำหรับ deploy, scale, manage third-party network virtual appliances เช่น firewalls, IDS/IPS, deep packet inspection ทำงานที่ Layer 3 (Network layer, IP packets) ใช้ GENEVE protocol บน port 6081. มันทำหน้าที่ทั้ง transparent network gateway และ load balancer ส่ง traffic ผ่าน appliance ก่อนถึงปลายทาง

05เปรียบเทียบ Load Balancer ทั้ง 4 ชนิด

ตารางสรุปที่ออกสอบบ่อยที่สุด อ่านให้ขึ้นใจ เพราะข้อสอบเกือบทุกชุดมีคำถามแนว "เลือก LB ให้เหมาะกับ scenario"

คุณสมบัติALBNLBGLBCLB
OSI Layer7 (HTTP/S)4 (TCP/UDP/TLS)3 (IP/GENEVE)4 & 7 (legacy)
Static IPไม่ (DNS name)ใช่ (per AZ + EIP)ไม่ไม่ (DNS name)
Path/Host routingได้ไม่ได้ไม่ได้ไม่ได้
Target: Lambdaได้ไม่ได้ไม่ได้ไม่ได้
Cross-zone defaultเปิด (ฟรี)ปิด (มีค่า)ปิด (มีค่า)เปิด (ฟรี)
Use caseweb/microservicehigh perf, TCP/UDPfirewall/IDS applianceอย่าใช้ของใหม่
Tips สำหรับการสอบ
Keyword mapping เร็ว ๆ: เห็น HTTP/path/host/microservice/Lambda -> ALB; เห็น static IP / TCP / UDP / extreme performance / millions of requests -> NLB; เห็น third-party firewall/IDS/IPS appliance / GENEVE -> GLB; เห็น Classic Load Balancer ในตัวเลือก มักเป็น distractor

06Sticky Sessions, Cross-Zone, SSL/TLS & SNI

Sticky Sessions (Session Affinity)

Sticky sessions ทำให้ client เดิมถูกส่งไป instance เดิมเสมอ ใช้ได้กับ CLB และ ALB ผ่าน cookie. มีกับดักว่าอาจทำให้ load ไม่สมดุล

Application-based cookie
Custom cookie สร้างโดย target (กำหนดชื่อเองได้ ห้ามชื่อ AWSALB, AWSALBAPP, AWSALBTG) หรือ application cookie ของ ALB เอง
Duration-based cookie
Cookie สร้างโดย ELB อัตโนมัติ ชื่อ AWSALB (ALB) หรือ AWSELB (CLB) หมดอายุตาม duration ที่ตั้ง
NLB stickiness ต่างออกไป
NLB ทำ stickiness ด้วย source IP ที่ Layer 4 (ไม่ใช้ cookie) เพราะมันไม่เห็น HTTP cookie

SSL/TLS & SNI

ELB terminate SSL ได้โดยใช้ X.509 certificate (จัดการผ่าน ACM). SNI (Server Name Indication) แก้ปัญหาการ load หลาย SSL certificate บน server เดียว โดย client ระบุ hostname ใน TLS handshake. SNI รองรับเฉพาะ ALB และ NLB (และ CloudFront) ไม่รองรับ CLB

กับดักข้อสอบ: CLB กับหลาย certificate
CLB รองรับได้แค่ 1 SSL certificate ต่อ load balancer ถ้าต้องการหลายโดเมน/หลาย cert ต้องสร้างหลาย CLB หรือ (ดีกว่า) ใช้ ALB/NLB + SNI. โจทย์มักให้ scenario multi-domain แล้วถามว่าจะแก้อย่างไร

07Connection Draining (Deregistration Delay)

Connection Draining (ชื่อใน CLB) หรือ Deregistration Delay (ชื่อใน ALB/NLB target group) คือเวลาที่ ELB ให้ in-flight requests ทำงานจนเสร็จ ก่อนจะถอด instance ที่กำลัง draining/deregistering หรือ unhealthy ออกจริง

  • ระหว่าง draining ELB จะ หยุดส่ง request ใหม่ ไปยัง instance นั้น แต่ปล่อยให้ request เดิมเสร็จ
  • ค่า default = 300 วินาที, ตั้งได้ระหว่าง 0 ถึง 3600 วินาที
  • ตั้งเป็น 0 = ปิด feature นี้ (ตัด connection ทันที)
Tips สำหรับการสอบ
ถ้า request แต่ละครั้งสั้น ตั้งค่าต่ำ (เช่น 30 วินาที) เพื่อ deregister เร็ว; ถ้า request ยาว (long-running) ตั้งสูงเพื่อไม่ตัดงานกลางคัน. ค่า default 300s เป็นตัวเลขที่ออกสอบ

08Auto Scaling Group (ASG) พื้นฐาน

Auto Scaling Group (ASG) จัดการการ scale out/in EC2 instances อัตโนมัติ เป้าหมายคือรักษาจำนวน instance ตาม load, ลงทะเบียน instance ใหม่กับ load balancer ให้อัตโนมัติ, และ replace instance ที่ unhealthy. ตัว ASG เองฟรี จ่ายแค่ค่า resource ที่ launch

ค่าหลัก 3 ตัว

  • Minimum capacity — จำนวน instance ขั้นต่ำที่ต้องมีเสมอ
  • Desired capacity — จำนวนที่ ASG พยายามรักษาในภาวะปกติ
  • Maximum capacity — เพดานบนที่ scaling จะปรับ desired ขึ้นไปได้

Launch Template (แทน Launch Configuration)

ASG ต้องมี template บอกว่าจะ launch instance แบบไหน (AMI, instance type, EC2 user data, EBS, security groups, key pair, IAM role). AWS แนะนำให้ใช้ Launch Template แทน Launch Configuration (legacy)

คุณสมบัติLaunch TemplateLaunch Configuration
สถานะแนะนำ (ปัจจุบัน)legacy (ไม่แนะนำ)
Versioningมี (สร้างหลาย version)ไม่มี (immutable)
Multiple instance typesได้ไม่ได้
Mix On-Demand + Spotได้ (mixed instances policy)ไม่ได้
T2/T3 unlimitedรองรับไม่รองรับ
Tips สำหรับการสอบ
ถ้าโจทย์พูดถึง mixed instances (On-Demand + Spot), multiple instance types, หรือ versioning ต้องเป็น Launch Template เท่านั้น. Launch Configuration ทำไม่ได้และกำลังถูก deprecate

09Scaling Policies

ASG ปรับ desired capacity ได้หลายวิธี เลือกให้ตรงกับ scenario

Target Tracking Scaling
ตั้งง่ายสุด — ระบุ target ของ metric เช่น Average CPU = 50% แล้ว AWS สร้าง CloudWatch alarm และจัดการ scale in/out ให้เอง
Simple Scaling
ผูกกับ CloudWatch alarm 1 ตัว -> ปรับ capacity 1 ครั้ง (เช่น CPU > 70% เพิ่ม 2 instances) ต้องรอ cooldown ก่อนทำซ้ำ ตอบสนองช้ากว่า step
Step Scaling
ปรับ capacity เป็นขั้น ๆ ตามขนาดของ alarm breach (เช่น CPU 60-70% +1, CPU >70% +3) ละเอียดและตอบสนองดีกว่า simple
Scheduled Scaling
ตั้ง min/max/desired ตามเวลาที่รู้ล่วงหน้า เช่น เพิ่ม capacity ทุกวันศุกร์ 17:00 (recurring schedule)
Predictive Scaling
ใช้ Machine Learning วิเคราะห์ historical load เพื่อ forecast และ schedule scaling ล่วงหน้า เหมาะกับ load ที่มี pattern เป็นรอบ ๆ

Metrics ที่ใช้ scale บ่อย: CPUUtilization, RequestCountPerTarget (ต่อ instance ของ ALB target), Average Network In/Out, หรือ custom CloudWatch metric

กับดักข้อสอบ: เลือก policy ให้ถูก
แยกให้ออก: รู้เวลาแน่นอน -> Scheduled; มี pattern ตามประวัติแต่ไม่เป๊ะเวลา -> Predictive; อยากรักษา metric ที่ค่าหนึ่ง -> Target Tracking; ต้องการ step ละเอียดตาม breach size -> Step. โจทย์ชอบให้ scenario แล้วถามว่า policy ไหนเหมาะ/ตั้งง่ายสุด

10Cooldown, Lifecycle Hooks & Health Checks

Cooldown Period

Cooldown (default 300 วินาที) เป็นช่วงหลังเกิด scaling activity ที่ ASG จะไม่ launch/terminate เพิ่ม เพื่อให้ metric ปรับตัวนิ่ง ป้องกัน scale ซ้ำซ้อน. Tip: ใช้ AMI ที่ติดตั้งของพร้อมแล้ว (golden AMI) เพื่อให้ instance boot เร็ว ลดเวลาที่ต้องรอใน cooldown

Lifecycle Hooks

Lifecycle hooks ให้ instance หยุดที่สถานะ wait ก่อนเปลี่ยนสถานะ เพื่อทำงานเตรียม/ทำความสะอาด

  • Pending:Wait — ก่อน instance เข้า InService (ติดตั้ง config, ดึงข้อมูล, warm-up)
  • Terminating:Wait — ก่อน instance ถูก terminate (drain logs, ดึงข้อมูลออก, debug)

Health Checks ใน ASG

  • EC2 status checks (default) — ตรวจระดับ instance/hypervisor เท่านั้น
  • ELB health checks — ถือ unhealthy เมื่อ target group health check fail (ตรวจถึง application layer)
  • Custom health check — ส่งสถานะเข้ามาเองผ่าน API/CLI (SetInstanceHealth)
Health check grace period
Health check grace period (default 300 วินาที) คือเวลาที่ ASG รอให้ instance ใหม่ boot และ start application ก่อนเริ่มนับ health เพื่อไม่ให้ ASG terminate instance ที่ยัง bootstrap ไม่เสร็จทิ้งโดยเข้าใจผิด
กับดักข้อสอบ: EC2 vs ELB health check
ถ้า application ค้าง (ไม่ตอบ HTTP) แต่ instance ยังรันอยู่ — EC2 status check ยังถือว่า healthy จะไม่ replace ให้! ต้องเปิด ELB health checks ใน ASG เพื่อให้ตรวจถึง app และ replace instance ที่ app ตายได้

11ตัวอย่าง CLI & Config

ตัวอย่าง command ที่เกี่ยวข้อง (ระดับที่ออกสอบมักเป็นแนวคิดมากกว่า syntax เป๊ะ แต่ควรคุ้นรูปแบบ)

สร้าง ASG ด้วย launch template

bash
aws autoscaling create-auto-scaling-group \
  --auto-scaling-group-name my-asg \
  --launch-template LaunchTemplateName=my-template,Version='$Latest' \
  --min-size 2 \
  --max-size 10 \
  --desired-capacity 2 \
  --vpc-zone-identifier "subnet-aaa,subnet-bbb" \
  --target-group-arns arn:aws:elasticloadbalancing:...:targetgroup/my-tg/abc \
  --health-check-type ELB \
  --health-check-grace-period 300

Target tracking policy (รักษา CPU 50%)

json
{
  "TargetValue": 50.0,
  "PredefinedMetricSpecification": {
    "PredefinedMetricType": "ASGAverageCPUUtilization"
  }
}
bash
aws autoscaling put-scaling-policy \
  --auto-scaling-group-name my-asg \
  --policy-name cpu50-target-tracking \
  --policy-type TargetTrackingScaling \
  --target-tracking-configuration file://config.json

เพิ่ม lifecycle hook (Terminating:Wait)

bash
aws autoscaling put-lifecycle-hook \
  --lifecycle-hook-name drain-logs-hook \
  --auto-scaling-group-name my-asg \
  --lifecycle-transition autoscaling:EC2_INSTANCE_TERMINATING \
  --heartbeat-timeout 300
Tips สำหรับการสอบ
จำตัวเลข default ที่ออกบ่อย: cooldown = 300s, health check grace period = 300s, deregistration delay = 300s (range 0-3600), CLB = 1 cert, SNI = ALB/NLB only. และจำว่า ASG จะ register/deregister instance กับ target group ให้อัตโนมัติเมื่อผูก ASG เข้ากับ load balancer

คำถามทบทวน

ทดสอบความเข้าใจหัวข้อ ELB & Auto Scaling Groups

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

ทำแล้ว 0/21คะแนน 0
  1. 1.บริษัทรัน HTTP/HTTPS web application และต้องการ route traffic ไปยัง microservices ต่างกันตาม URL path (เช่น /users vs /orders) ควรใช้ Load Balancer ชนิดใด?

  2. 2.แอปต้องการ static IP per Availability Zone และรองรับ throughput สูงระดับล้าน requests/sec ที่ latency ต่ำมาก (TCP) ควรใช้อะไร?

  3. 3.ใน ALB การส่ง client IP จริงไปยัง backend instance ทำได้อย่างไร?

  4. 4.Sticky sessions (session affinity) ของ ALB ใช้กลไกอะไรในการผูก client กับ instance เดิม?

  5. 5.Cross-zone load balancing ของ ALB มีลักษณะอย่างไรเรื่องการกระจาย traffic และค่าใช้จ่าย?

  6. 6.ต้องการ terminate SSL/TLS หลายโดเมน (multiple certificates) บน ALB ตัวเดียว โดย client เลือก cert ตาม hostname ต้องใช้อะไร?

  7. 7.Deregistration delay (connection draining) มีหน้าที่อะไร?

  8. 8.ใน Auto Scaling Group ค่าใดเป็นจำนวน instance ที่ ASG พยายามรักษาไว้ในภาวะปกติ?

  9. 9.ต้องการให้ ASG รักษา average CPU utilization ของ group ไว้ที่ 50% โดยไม่ต้องกำหนด threshold ขึ้น/ลงเอง ควรใช้ scaling policy ใด?

  10. 10.ทีมรู้ว่าทุกวันศุกร์ 18:00 มี traffic peak จึงอยากเพิ่ม capacity ล่วงหน้าตามเวลา ควรใช้อะไร?

  11. 11.ก่อนที่ instance ใหม่จะเข้าสถานะ InService ต้องการรันสคริปต์ติดตั้ง config และดึงข้อมูลก่อน หรือก่อน terminate ต้องการ drain logs ควรใช้อะไรใน ASG?

  12. 12.Health check grace period ใน ASG มีไว้เพื่ออะไร?

  13. 13.ASG ควรใช้ health check แบบใดเพื่อตรวจว่า application ตอบสนองได้จริง ไม่ใช่แค่ instance ยังรันอยู่?

  14. 14.AWS แนะนำให้สร้าง EC2 instance config สำหรับ ASG ด้วยอะไร แทนของเดิมที่ deprecated?

  15. 15.คุณต้องการ scale อย่างละเอียดตามขนาดของการเบี่ยงเบน metric เช่น CPU 60-70% เพิ่ม 1 instance แต่ CPU >70% เพิ่ม 3 instances ควรใช้ policy ใด?

  16. 16.GLB (Gateway Load Balancer) ทำงานที่ Layer ใด และใช้ protocol อะไรในการส่ง traffic ไป appliance?

  17. 17.NLB ต้องการให้ target ทุกตัวรับ traffic เท่ากันข้าม AZ แต่ทีมพบว่า traffic ไม่สมดุล สาเหตุที่เป็นไปได้และวิธีแก้คือ?

  18. 18.Default cooldown period ของ ASG (simple scaling) คือเท่าไร และมีหน้าที่อะไร?

  19. 19.ALB target group รองรับ target type แบบใดบ้าง?

  20. 20.ใน scenario ASG ใช้ launch template และต้องการให้รองรับทั้ง On-Demand และ Spot Instances แบบผสมเพื่อลดต้นทุน ต้องทำอย่างไร?

  21. 21.ALB routing algorithm แบบ default คืออะไร และมีทางเลือกอะไรอีก?