การตั้งค่า AWS Lambda สำหรับ production
การ Deploy แอปพลิเคชันบน AWS
Dunieski Otano
Amazon Web Services Solutions Architect
ทดสอบผ่านแล้ว
ฟังก์ชันผ่านทุกการทดสอบ
แต่ใน production กลับ timeout และ throttle
โค้ดไม่มีปัญหา แต่การตั้งค่าต่างหากที่ผิด
การตั้งค่า Lambda ที่สำคัญใน production
Memory
: ปรับ CPU และ network ตามสัดส่วนด้วย
Timeout
: จำนวนวินาทีสูงสุดก่อนที่ฟังก์ชันจะถูกหยุด
Ephemeral storage
: พื้นที่ชั่วคราวใน /tmp
Concurrency
: จำนวนที่รันพร้อมกันได้
การกำหนดขนาด memory และความสัมพันธ์กับ CPU
Memory มากขึ้น =
CPU มากขึ้นตามสัดส่วน
ฟังก์ชันที่ใช้ CPU สูงรันได้เร็วขึ้นเมื่อเพิ่ม memory
ระยะเวลาที่สั้นลงอาจหมายถึง
ค่าใช้จ่ายที่ลดลง
ปรับขนาดให้เหมาะสมด้วยการทดสอบ ไม่ใช่การเดา
Concurrency: reserved กับ provisioned
Reserved concurrency
จำกัดจำนวน execution พร้อมกันสูงสุด
ป้องกัน downstream system และฟังก์ชันอื่น
Provisioned concurrency
อุ่น instance ไว้ล่วงหน้า ไม่มี cold start
เหมาะสำหรับฟังก์ชันที่ผู้ใช้เรียกโดยตรงและต้องการ latency ต่ำ
การแพ็กเกจ configuration และโค้ดที่ใช้ร่วมกัน
Environment variables
: ตั้งค่าแยกตาม environment
Layers
: แชร์โค้ดและ dependency ระหว่างฟังก์ชัน
Extensions
: รันควบคู่ฟังก์ชันสำหรับเครื่องมือต่าง ๆ
เก็บ config ไว้นอก deployment package
การเชื่อมต่อ Lambda กับ VPC
เชื่อม Lambda กับ
private subnet
เพื่อเข้าถึง resource ภายใน
Lambda สร้าง
ENI
ใน VPC ของคุณ
Security group
ควบคุมว่าฟังก์ชันเข้าถึงอะไรได้บ้าง
ต้องใช้ NAT หรือ VPC endpoint เพื่อเข้าถึงภายนอก
การจัดการความล้มเหลวด้วย destinations และ DLQ
การเรียกแบบ async จะ
retry อัตโนมัติ
เมื่อเกิดข้อผิดพลาด
Lambda Destinations
: กำหนดเส้นทาง onSuccess และ onFailure
Dead-letter queue
: รับ event ที่ไม่สำเร็จทุกครั้ง
ห้ามปล่อยให้ event ที่ล้มเหลวหายไปอย่างเงียบ ๆ
มาฝึกกันเถอะ!
การ Deploy แอปพลิเคชันบน AWS
Preparing Video For Download...