Skip to main content

Lambda & Application Load Balancer

การรวม Lambda กับ ALB​

ในปัจจุบัน Lambda function สามารถเรียกใช้งานผ่าน CLI หรือ SDK ได้ แต่ถ้าคุณต้องการ เผยแพร่ Lambda ให้เข้าถึงจากอินเทอร์เน็ต จะต้องมี HTTP หรือ HTTPS endpoint สำหรับผู้ใช้งาน ซึ่งทำได้สองวิธี:

  1. ใช้ Application Load Balancer (ALB)
  2. ใช้ API Gateway

ในบทนี้เราจะเน้นที่ ALB

An image

การทำงานของ ALB กับ Lambda​

  1. ต้อง ลงทะเบียน Lambda function ใน target group ของ ALB
  2. เมื่อ client ส่ง HTTP/HTTPS request ไปยัง ALB
  3. ALB จะ เรียก Lambda function แบบ synchronous คือรอผลลัพธ์จาก Lambda ก่อนส่ง response กลับ client

ALB แปลง HTTP Request เป็น Lambda Invocation อย่างไร​

ALB จะเปลี่ยน HTTP request ที่เข้ามาเป็น JSON document เพื่อส่งให้ Lambda function

ตัวอย่าง JSON payload:

  • ส่วนบนของ JSON มีข้อมูล ELB เช่น ELB ไหนเรียก Lambda และ target group
  • มี HTTP method (เช่น GET, POST) และ path (เช่น /lambda)
  • Query string parameters ถูกส่งเป็น key-value pairs
  • Headers ถูกส่งเป็น key-value pairs
  • Body สำหรับ POST/PUT รวมถึง flag บอกว่า body เป็น Base64 หรือไม่

An image

สรุป: Query parameters, headers และ body ถูกแปลงเป็น JSON ทั้งหมด

รูปแบบ Response ของ Lambda​

Lambda function ต้องส่ง JSON document กลับ ALB

JSON response ต้องมี:

  • status code และคำอธิบาย
  • response headers เป็น key-value pairs
  • body ของ response
  • flag บอกว่า body เป็น Base64 หรือไม่

An image

ALB จะทำการแปลง JSON response กลับเป็น HTTP response ให้

ฟีเจอร์ Multi-Value Header ของ ALB​

ALB รองรับฟีเจอร์ multi-value headers ซึ่งสามารถเปิดใช้งานได้โดยตรง

  • ใช้เมื่อ client ส่ง headers หรือ query string parameter หลายค่าของ key เดียวกัน
  • ALB จะเก็บทุกค่าไว้และส่งไปให้ Lambda เป็น array

ตัวอย่าง:

?name=foo&name=bar
  • Key name มีสองค่า (foo, bar)
  • ถ้าเปิด multi-value header, Lambda จะได้รับเป็น array: ["foo", "bar"]
  • ใช้ได้ทั้ง HTTP headers และ query string parameters

An image

สรุปและข้อควรจำ​

  • Lambda function สามารถเรียกผ่าน CLI, SDK หรือเผยผ่าน HTTP/HTTPS endpoint ด้วย ALB หรือ API Gateway
  • การรวม Lambda กับ ALB ต้อง ลงทะเบียน Lambda ใน target group
  • ALB จะ เรียก Lambda แบบ synchronous และส่ง response กลับ client
  • ALB แปลง HTTP request เป็น JSON สำหรับ Lambda รวม ELB info, HTTP method, path, query parameters, headers และ body
  • Lambda ต้องส่ง JSON response กลับ ALB พร้อม status code, headers, body และ Base64 flag
  • ALB รองรับ multi-value headers สำหรับ query parameters หรือ headers ที่มีหลายค่า