กฎผู้รับฟังและการกำหนดเส้นทางตามเส้นทาง
เขียนกฎผู้รับฟังบน ALB เพื่อส่งคำขอไปยังกลุ่มเป้าหมายต่างกันตามส่วนหัวโฮสต์ รูปแบบเส้นทาง หรือสตริงคำค้น
กฎผู้รับฟังและการกำหนดเส้นทางตามเส้นทาง เป็นบทเรียน AWS Solutions Architect ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน AWS Solutions Architect และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส AWS Solutions Architect มีบทเรียนทั้งหมด 4 บทเรียน
อธิบายตัวรับฟังของ ALB
ตัวรับฟังของ ALB คือกระบวนการที่ตรวจสอบคำขอเชื่อมต่อโดยใช้โพรโทคอลและพอร์ตที่คุณระบุ เช่น HTTP บนพอร์ต 80 หรือ HTTPS บนพอร์ต 443 ตัวรับฟังแต่ละตัวมีกฎอย่างน้อยหนึ่งกฎที่กำหนดว่าจะส่งต่อคำขอไปที่ใดโดยพิจารณาจากเนื้อหาของคำขอ
ตัวรับฟังต้องมีกฎเริ่มต้น (การดำเนินการแบบครอบคลุมทุกกรณีเมื่อไม่มีกฎอื่นตรงกัน) และสามารถมีกฎเพิ่มเติมได้สูงสุด 100 กฎ ระบบจะประเมินกฎตามลำดับความสำคัญ (หมายเลขต่ำกว่าหมายถึงความสำคัญสูงกว่า) เมื่อคำขอตรงตามเงื่อนไขของกฎ ระบบจะดำเนินการตามการกระทำที่เกี่ยวข้อง และจะไม่ประเมินกฎถัดไป
# Create an HTTP listener on port 80
aws elbv2 create-listener \
--load-balancer-arn arn:aws:elasticloadbalancing:us-east-1:123456789:loadbalancer/app/my-alb/abc123 \
--protocol HTTP \
--port 80 \
--default-actions Type=forward,TargetGroupArn=arn:aws:elasticloadbalancing:us-east-1:123456789:targetgroup/default-tg/def456เงื่อนไขของกฎ
กฎตัวรับฟังจะจับคู่คำขอตามเงื่อนไข คุณสามารถรวมหลายเงื่อนไขไว้ในกฎเดียวได้ (ทุกเงื่อนไขต้องตรงกันจึงจะใช้กฎได้) ประเภทเงื่อนไขที่มีให้ใช้ ได้แก่:
- ส่วนหัวโฮสต์: จับคู่กับส่วนหัว HTTP
Hostเช่นapi.example.com - รูปแบบเส้นทาง: จับคู่กับเส้นทาง URL เช่น
/api/*,/images/*.jpg - ส่วนหัว HTTP: จับคู่กับชื่อส่วนหัว HTTP และรูปแบบค่าของส่วนหัวใดก็ได้
- เมธอดคำขอ HTTP: จับคู่กับเมธอด HTTP (GET, POST, DELETE และอื่น ๆ)
- สตริงคำค้นหา: จับคู่กับคู่คีย์-ค่าในสตริงคำค้นหา
- IP ต้นทาง: จับคู่กับช่วง CIDR ของ IP ไคลเอ็นต์
การกำหนดเส้นทางตามเส้นทาง
การกำหนดเส้นทางตามเส้นทางจะส่งคำขอไปยังกลุ่มเป้าหมายที่แตกต่างกันโดยพิจารณาจากเส้นทาง URL นี่เป็นรูปแบบการกำหนดเส้นทางที่พบได้บ่อยที่สุดสำหรับไมโครเซอร์วิสที่อยู่ด้านหลัง ALB เดียว ตัวอย่างกฎบน ALB หนึ่งตัว:
- เส้นทางเป็น
/api/*→ กลุ่มเป้าหมาย: api-service - เส้นทางเป็น
/images/*→ กลุ่มเป้าหมาย: image-processor - เส้นทางเป็น
/admin/*→ กลุ่มเป้าหมาย: admin-app - ค่าเริ่มต้น → กลุ่มเป้าหมาย: frontend-app
วิธีนี้ทำให้ ALB เพียงตัวเดียวทำหน้าที่ด้านหน้าสำหรับบริการที่แยกจากกันหลายบริการได้ โดยไม่ต้องใช้ตัวจัดสมดุลโหลดหลายตัว จึงช่วยลดค่าใช้จ่ายและความซับซ้อนของ DNS
# Create a path-based routing rule
aws elbv2 create-rule \
--listener-arn arn:aws:elasticloadbalancing:us-east-1:123456789:listener/app/my-alb/abc123/lis456 \
--priority 10 \
--conditions Field=path-pattern,Values='/api/*' \
--actions Type=forward,TargetGroupArn=arn:aws:elasticloadbalancing:us-east-1:123456789:targetgroup/api-service/xyz789การกำหนดเส้นทางตามโฮสต์
การกำหนดเส้นทางตามโฮสต์จะกำหนดเส้นทางคำขอตามส่วนหัว HTTP Host ทำให้สามารถให้บริการชื่อโดเมนหลายชื่อ (โฮสต์เสมือน) จาก ALB เดียวได้ ตัวอย่าง:
- โฮสต์เป็น
api.example.com→ กลุ่มเป้าหมาย api-service - โฮสต์เป็น
admin.example.com→ กลุ่มเป้าหมาย admin-app - โฮสต์เป็น
www.example.com→ กลุ่มเป้าหมาย frontend
ชื่อโดเมนแต่ละชื่อจะมีระเบียน CNAME หรือ ALIAS ที่ชี้ไปยังชื่อ DNS ของ ALB เดียวกัน แต่ ALB จะกำหนดเส้นทางของแต่ละชื่อไปยังแบ็กเอนด์ที่เหมาะสมโดยพิจารณาจากส่วนหัวโฮสต์ การกำหนดเส้นทางตามโฮสต์เหมาะอย่างยิ่งสำหรับซอฟต์แวร์แบบบริการหลายผู้เช่า หรือแอปพลิเคชันแบบรวมที่กำลังแยกออกเป็นไมโครเซอร์วิส
# Create a host-based routing rule
aws elbv2 create-rule \
--listener-arn arn:aws:elasticloadbalancing:us-east-1:123456789:listener/app/my-alb/abc123/lis456 \
--priority 5 \
--conditions '[{"Field":"host-header","HostHeaderConfig":{"Values":["api.example.com"]}}]' \
--actions '[{"Type":"forward","TargetGroupArn":"arn:aws:elasticloadbalancing:us-east-1:123456789:targetgroup/api-service/xyz789"}]'การกระทำของกฎ
เมื่อเงื่อนไขของกฎตรงกัน ALB จะดำเนินการอย่างใดอย่างหนึ่งต่อไปนี้:
- ส่งต่อ: ส่งต่อคำขอไปยังกลุ่มเป้าหมายหนึ่งกลุ่มหรือมากกว่า (พร้อมน้ำหนักที่กำหนดได้)
- เปลี่ยนเส้นทาง: ส่งคืนการเปลี่ยนเส้นทาง HTTP (301 หรือ 302) ไปยัง URL ใหม่ ซึ่งมีประโยชน์สำหรับการเปลี่ยนเส้นทางจาก HTTP ไปยัง HTTPS
- การตอบกลับแบบคงที่: ส่งคืนการตอบกลับ HTTP แบบคงที่พร้อมรหัสสถานะ ประเภทเนื้อหา และเนื้อหาที่ระบุ ซึ่งมีประโยชน์สำหรับหน้าบำรุงรักษาหรือการตอบกลับการตรวจสอบสถานะแบบง่าย
- ยืนยันตัวตนด้วย Cognito: ยืนยันตัวตนผู้ใช้ผ่านกลุ่มผู้ใช้ Cognito ก่อนส่งต่อ
- ยืนยันตัวตนด้วย OIDC: ยืนยันตัวตนผู้ใช้ผ่านผู้ให้บริการข้อมูลประจำตัวที่เข้ากันได้กับ OIDC รายใดก็ได้
# Create a redirect rule: HTTP to HTTPS
aws elbv2 create-rule \
--listener-arn arn:aws:elasticloadbalancing:us-east-1:123456789:listener/app/my-alb/abc123/http80 \
--priority 1 \
--conditions '[{"Field":"path-pattern","PathPatternConfig":{"Values":["/*"]}}]' \
--actions '[{"Type":"redirect","RedirectConfig":{"Protocol":"HTTPS","Port":"443","StatusCode":"HTTP_301"}}]'รูปแบบการเปลี่ยนเส้นทางจาก HTTP ไปยัง HTTPS
รูปแบบกฎตัวรับฟังที่พบได้บ่อยที่สุดคือการเปลี่ยนเส้นทางจาก HTTP ไปยัง HTTPS:
- สร้างตัวรับฟัง HTTP บนพอร์ต 80พร้อมกฎหนึ่งข้อ: เปลี่ยนเส้นทางทราฟฟิกทั้งหมด (
/*) ไปยัง HTTPS ด้วยรหัสสถานะ 301 - สร้างตัวรับฟัง HTTPS บนพอร์ต 443พร้อมกฎการกำหนดเส้นทางจริงของคุณ ซึ่งชี้ไปยังกลุ่มเป้าหมาย
วิธีนี้ทำให้ผู้ใช้ที่พิมพ์ http:// หรือเปิดลิงก์ HTTP เก่า ถูกเปลี่ยนเส้นทางไปยัง HTTPS โดยอัตโนมัติ โดยไม่ต้องแก้ไขระดับแอปพลิเคชัน การเปลี่ยนเส้นทางทั้งหมดจัดการที่ระดับตัวจัดสมดุลโหลด
การกระทำการตอบกลับแบบคงที่
การกระทำการตอบกลับแบบคงที่จะส่งคืนการตอบกลับ HTTP แบบคงที่จาก ALB โดยไม่ส่งต่อคำขอไปยังเป้าหมายใด ๆ ใช้การกระทำนี้สำหรับ:
- ส่งคืนหน้าบำรุงรักษาที่มีสถานะ 503 สำหรับเส้นทางที่ระบุระหว่างการบำรุงรักษา
- จัดเตรียมจุดปลายทางตรวจสอบสถานะแบบเบาโดยตรงจาก ALB (ส่งคืน 200 OK ทันทีโดยไม่ใช้ทรัพยากรของแบ็กเอนด์)
- บล็อกเส้นทางที่ระบุด้วยการตอบกลับ 403 Forbidden
การตอบกลับแบบคงที่มีประโยชน์สำหรับนำเส้นทางออกจากการให้บริการชั่วคราว โดยไม่ต้องแก้ไขโค้ดแอปพลิเคชันหรือปรับใช้ใหม่ เพียงปรับกฎตัวรับฟังแบบไดนามิก
# Return 503 maintenance page for a specific path
aws elbv2 create-rule \
--listener-arn arn:aws:elasticloadbalancing:us-east-1:123456789:listener/app/my-alb/abc123/lis456 \
--priority 20 \
--conditions '[{"Field":"path-pattern","PathPatternConfig":{"Values":["/checkout/*"]}}]' \
--actions '[{"Type":"fixed-response","FixedResponseConfig":{"StatusCode":"503","ContentType":"text/html","MessageBody":"<h1>Maintenance</h1>"}}]'การยืนยันตัวตนของ ALB ด้วย Cognito
การกระทำ authenticate-cognitoของ ALB ผสานรวมกับกลุ่มผู้ใช้ Amazon Cognito เพื่อจัดการการยืนยันตัวตนผู้ใช้ก่อนส่งต่อคำขอไปยังแอปพลิเคชันของคุณ เมื่อผู้ใช้ที่ยังไม่ได้ยืนยันตัวตนเข้าถึงกฎตัวรับฟังที่มีการป้องกัน ALB จะเปลี่ยนเส้นทางผู้ใช้ไปยังส่วนติดต่อผู้ใช้สำหรับเข้าสู่ระบบที่โฮสต์โดย Cognito หลังจากยืนยันตัวตนสำเร็จ ALB จะตั้งค่าคุกกี้ที่เข้ารหัส และส่งต่อคำขอพร้อมส่วนหัวข้อมูลประจำตัวผู้ใช้
วิธีนี้ช่วยย้ายตรรกะการยืนยันตัวตนทั้งหมดออกจากแอปพลิเคชันของคุณ แบ็กเอนด์จะได้รับส่วนหัว X-Amzn-Oidc-Identity, X-Amzn-Oidc-Data และ X-Amzn-Oidc-Access-Token ซึ่งมีข้อมูลสิทธิ์ของผู้ใช้ที่ยืนยันตัวตนแล้ว
การกำหนดเส้นทางตาม Query String และส่วนหัว
กฎของ ALB listener สามารถกำหนดเส้นทางตามพารามิเตอร์ query string และส่วนหัว HTTP ได้ ทำให้กำหนดเส้นทางคำขอได้อย่างละเอียด:
- กำหนดเส้นทางไคลเอ็นต์มือถือโดยตรวจจับส่วนหัว
User-Agent: *Mobile*เพื่อส่งไปยังแบ็กเอนด์ที่ปรับให้เหมาะกับอุปกรณ์มือถือ - กำหนดเส้นทางคำขอ API ระดับพรีเมียมโดยตรวจสอบส่วนหัวที่กำหนดเอง
X-API-Tier: premiumเพื่อส่งไปยังกลุ่มเป้าหมายที่ทำงานเร็วกว่า - กำหนดเส้นทางรูปแบบการทดสอบ A/B โดยอ่านพารามิเตอร์ query string
?variant=beta
การกำหนดเส้นทางตามส่วนหัวช่วยให้คุณใช้แฟล็กฟีเจอร์และแบ่งสัดส่วนทราฟฟิกที่ระดับโครงสร้างพื้นฐานได้ โดยไม่ต้องแก้ไขโค้ดของแอปพลิเคชัน
ลำดับความสำคัญและลำดับการประเมินกฎ
ระบบจะประเมินกฎตามลำดับความสำคัญจากน้อยไปมาก หมายเลขลำดับความสำคัญที่ต่ำกว่าจะถูกประเมินก่อน ระบบจะใช้การดำเนินการของกฎแรกที่ตรงเงื่อนไข และจะไม่ประเมินกฎถัดไปอีก กฎเริ่มต้นไม่มีหมายเลขลำดับความสำคัญ และจะถูกประเมินเป็นกฎสุดท้ายเสมอเพื่อรองรับคำขอที่ไม่ตรงกับกฎอื่น
แนวทางปฏิบัติที่ดีคือ กำหนดหมายเลขลำดับความสำคัญโดยเพิ่มทีละ 10 (10, 20, 30...) แทนการใช้จำนวนเต็มเรียงต่อกัน วิธีนี้จะเหลือช่วงว่างสำหรับแทรกกฎใหม่ระหว่างกฎที่มีอยู่ โดยไม่ต้องกำหนดหมายเลขใหม่ทั้งหมด กฎที่เฉพาะเจาะจงกว่า (เช่น เส้นทางร่วมกับส่วนหัวโฮสต์) ควรใช้หมายเลขที่ต่ำกว่า (มีลำดับความสำคัญสูงกว่า) กฎทั่วไป
# List rules for a listener (shows priorities)
aws elbv2 describe-rules \
--listener-arn arn:aws:elasticloadbalancing:us-east-1:123456789:listener/app/my-alb/abc123/lis456 \
--query 'Rules[*].{Priority:Priority,Conditions:Conditions[0].Field,Actions:Actions[0].Type}' \
--output tableกฎของ Listener สำหรับไมโครเซอร์วิส
ALB เพียงหนึ่งตัวสามารถทำหน้าที่อยู่ด้านหน้าของแพลตฟอร์มไมโครเซอร์วิสทั้งระบบได้ โดยใช้กฎของ listener ตัวอย่างจากการใช้งานจริงที่รวมเงื่อนไขทั้งสามประเภทเข้าด้วยกัน:
- ลำดับความสำคัญ 10: Host=
api.example.com+ Path=/v2/*→ กลุ่มเป้าหมาย api-v2 - ลำดับความสำคัญ 20: Host=
api.example.com+ Path=/v1/*→ กลุ่มเป้าหมาย api-v1 - ลำดับความสำคัญ 30: Host=
auth.example.com→ กลุ่มเป้าหมาย auth-service - ลำดับความสำคัญ 40: Host=
www.example.com+ Path=/static/*→ การเปลี่ยนเส้นทางของ CloudFront - ค่าเริ่มต้น: Host=
www.example.com→ กลุ่มเป้าหมายส่วนหน้า
การออกแบบนี้ช่วยลดค่าใช้จ่ายด้วยการไม่ต้องใช้ตัวจัดสรรภาระแยกสำหรับแต่ละบริการ
ตรวจสอบความเข้าใจอย่างรวดเร็ว
ทดสอบความเข้าใจแนวคิด AWS Solutions Architect (SAA-C03) จากบทเรียนนี้
สรุปบทเรียน
ในบทเรียนนี้ คุณได้เรียนรู้ว่า กฎของ listener ใช้กำหนดเส้นทางคำขอตามโฮสต์ เส้นทาง ส่วนหัว วิธีการ และ query string โดย ระบบจะประเมินกฎตามลำดับความสำคัญ และใช้กฎแรกที่ตรงเงื่อนไข อีกทั้ง การดำเนินการยังรวมถึงการส่งต่อ การเปลี่ยนเส้นทาง การตอบกลับแบบกำหนดตายตัว และการตรวจสอบสิทธิ์ด้วย Cognito การกำหนดเส้นทางตามเส้นทางและโฮสต์ช่วยให้ ALB เพียงหนึ่งตัวทำหน้าที่อยู่ด้านหน้าของไมโครเซอร์วิสหลายตัวได้ บทถัดไป เราจะศึกษาเรื่องการยุติการเข้ารหัส SSL และเซสชันแบบติดหนึบ
คำถามที่พบบ่อย
บทเรียน “กฎผู้รับฟังและการกำหนดเส้นทางตามเส้นทาง” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “กฎผู้รับฟังและการกำหนดเส้นทางตามเส้นทาง” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส AWS Solutions Architect ให้อัปเกรดเป็น CoddyKit PRO คอร์ส AWS Solutions Architect มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “กฎผู้รับฟังและการกำหนดเส้นทางตามเส้นทาง”
เขียนกฎผู้รับฟังบน ALB เพื่อส่งคำขอไปยังกลุ่มเป้าหมายต่างกันตามส่วนหัวโฮสต์ รูปแบบเส้นทาง หรือสตริงคำค้น คุณปฏิบัติ AWS Solutions Architect ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน AWS Solutions Architect หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน AWS Solutions Architect บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “กฎผู้รับฟังและการกำหนดเส้นทางตามเส้นทาง” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน AWS Solutions Architect นี้ได้ไหม
ได้ บทเรียน AWS Solutions Architect ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ALB เทียบกับ NLB เทียบกับ GLB: ควรใช้แบบใด
- กลุ่มเป้าหมายและการตรวจสอบสถานะ
- กฎผู้รับฟังและการกำหนดเส้นทางตามเส้นทาง
- การสิ้นสุด SSL และเซสชันแบบยึดติด