การตั้งค่า AWS Lambda สำหรับ production

การ Deploy แอปพลิเคชันบน AWS

Dunieski Otano

Amazon Web Services Solutions Architect

ทดสอบผ่านแล้ว

  • ฟังก์ชันผ่านทุกการทดสอบ
  • แต่ใน production กลับ timeout และ throttle
  • โค้ดไม่มีปัญหา แต่การตั้งค่าต่างหากที่ผิด

ฟังก์ชัน serverless ที่ผ่านการทดสอบแต่มีปัญหาใน production โดยกำลังปรับค่า memory และ timeout

การ Deploy แอปพลิเคชันบน AWS

การตั้งค่า Lambda ที่สำคัญใน production

โลโก้ Lambda ตรงกลาง พร้อมกล่องการตั้งค่า production 4 ด้าน ได้แก่ Memory พร้อม CPU scaling, Timeout พร้อมนาฬิกา, Ephemeral Storage และ Concurrency แสดง function instance แบบขนาน

  • Memory: ปรับ CPU และ network ตามสัดส่วนด้วย
  • Timeout: จำนวนวินาทีสูงสุดก่อนที่ฟังก์ชันจะถูกหยุด
  • Ephemeral storage: พื้นที่ชั่วคราวใน /tmp
  • Concurrency: จำนวนที่รันพร้อมกันได้
การ Deploy แอปพลิเคชันบน AWS

การกำหนดขนาด memory และความสัมพันธ์กับ CPU

  • Memory มากขึ้น = CPU มากขึ้นตามสัดส่วน
  • ฟังก์ชันที่ใช้ CPU สูงรันได้เร็วขึ้นเมื่อเพิ่ม memory
  • ระยะเวลาที่สั้นลงอาจหมายถึงค่าใช้จ่ายที่ลดลง
  • ปรับขนาดให้เหมาะสมด้วยการทดสอบ ไม่ใช่การเดา

กราฟ memory กับค่าใช้จ่าย: ระยะเวลาลดลงชันเมื่อ memory เพิ่มแล้วแบนลง ค่าใช้จ่ายรวมเป็นรูปตัว U โดยมีจุดที่ประหยัดที่สุดอยู่ตรงกลาง

การ Deploy แอปพลิเคชันบน AWS

Concurrency: reserved กับ provisioned


Reserved concurrency

  • จำกัดจำนวน execution พร้อมกันสูงสุด
  • ป้องกัน downstream system และฟังก์ชันอื่น

Provisioned concurrency

  • อุ่น instance ไว้ล่วงหน้า ไม่มี cold start
  • เหมาะสำหรับฟังก์ชันที่ผู้ใช้เรียกโดยตรงและต้องการ latency ต่ำ
การ Deploy แอปพลิเคชันบน AWS

การแพ็กเกจ configuration และโค้ดที่ใช้ร่วมกัน

  • Environment variables: ตั้งค่าแยกตาม environment
  • Layers: แชร์โค้ดและ dependency ระหว่างฟังก์ชัน
  • Extensions: รันควบคู่ฟังก์ชันสำหรับเครื่องมือต่าง ๆ
  • เก็บ config ไว้นอก deployment package

ตัวเลือกการแพ็กเกจ Lambda: environment variables เก็บ config ภายนอก, layers แชร์ไลบรารีร่วมระหว่างฟังก์ชัน และ extensions รันควบคู่ handler สำหรับ monitoring หรือ secrets

การ Deploy แอปพลิเคชันบน AWS

การเชื่อมต่อ Lambda กับ VPC

Lambda เชื่อมต่อกับ VPC ส่วนตัวผ่าน ENI ใน private subnet, security group ควบคุม outbound และ NAT gateway ให้การเชื่อมต่ออินเทอร์เน็ต

  • เชื่อม Lambda กับ private subnet เพื่อเข้าถึง resource ภายใน
  • Lambda สร้าง ENI ใน VPC ของคุณ
  • Security group ควบคุมว่าฟังก์ชันเข้าถึงอะไรได้บ้าง
  • ต้องใช้ NAT หรือ VPC endpoint เพื่อเข้าถึงภายนอก
การ Deploy แอปพลิเคชันบน AWS

การจัดการความล้มเหลวด้วย destinations และ DLQ

  • การเรียกแบบ async จะretry อัตโนมัติเมื่อเกิดข้อผิดพลาด
  • Lambda Destinations: กำหนดเส้นทาง onSuccess และ onFailure
  • Dead-letter queue: รับ event ที่ไม่สำเร็จทุกครั้ง
  • ห้ามปล่อยให้ event ที่ล้มเหลวหายไปอย่างเงียบ ๆ

การจัดการความล้มเหลวแบบ async ของ Lambda: retry loop นำไปสู่ Lambda Destinations พร้อม onSuccess และ onFailure และ dead-letter queue รับ event ที่หมด retry แล้ว

การ Deploy แอปพลิเคชันบน AWS

มาฝึกกันเถอะ!

การ Deploy แอปพลิเคชันบน AWS

Preparing Video For Download...