ข้ามไปเนื้อหาหลัก
ประมวลผล· ~16 นาที· อัปเดตล่าสุด

AWS Lambda และ Serverless

รันโค้ดโดยไม่ต้องดูแลเซิร์ฟเวอร์ จ่ายตามที่ใช้จริง

จ้างฟรีแลนซ์ทำงานรายชิ้น

Lambda เหมือนการจ้างคนแบบฟรีแลนซ์ทำงานเป็นรายชิ้น — มีงานส่งเข้ามาก็เรียกเค้ามาทำชิ้นนั้นแล้วจ่ายเงินเป็นรอบๆ พอไม่มีงานฟรีแลนซ์ก็กลับบ้าน ไม่ต้องจ่ายเงินเลย! ซึ่งต่างจากการเช่า EC2 ที่เหมือนจ้างพนักงานรายเดือน มาถึงก็นั่งเปิดเครื่องรอทั้งวัน (ถึงไม่มีลูกค้าเข้าเราก็ต้องจ่ายเงินเดือน)

AWS Lambda คือบริการประมวลผลหลักของโลกไร้เซิร์ฟเวอร์ (Serverless Computing) คุณแค่นำ Source Code ของคุณ (เช่น Python, Node.js) ไปแปะไว้ แล้ว Lambda จะตื่นมารันโค้ดก็ต่อเมื่อมีเหตุการณ์ (Event) มากระตุ้นเท่านั้น โดย AWS จะเป็นคนจัดการเครื่องเซิร์ฟเวอร์ที่อยู่เบื้องหลังให้ทั้งหมด

  • จ่ายตามเวลาทำงานจริง (Pay-per-use): ไม่มี Event เข้ามา = ไม่เสียเงินสักบาท
  • เหมาะสำหรับสคริปต์สั้นๆ งานประเภท Event-driven (Lambda หนึ่งรอบรันได้นานสูงสุดจำกัดที่ 15 นาที เท่านั้น ถ้าโค้ดรันนานกว่านี้ต้องกลับไปใช้ EC2)
  • สเกล (ขยาย) ปริมาณการรันอัตโนมัติเพื่อรองรับคำขอพร้อมๆ กันได้เป็นพันตัวทันที
  • ระบบสถาปัตยกรรม Serverless นิยมใช้ Lambda เข้าคู่กับ API Gateway, S3 และ DynamoDB
import boto3
import json

def lambda_handler(event, context):
    # ดึงชื่อไฟล์ที่เพิ่งอัปโหลดเข้ามาจาก Event
    bucket = event['Records'][0]['s3']['bucket']['name']
    key = event['Records'][0]['s3']['object']['key']
    
    print(f"ได้รับไฟล์ {key} จากถัง {bucket} แล้ว!")
    # ส่งต่อให้โค้ดย่อขนาดรูปทำงาน...
    return {
        'statusCode': 200,
        'body': json.dumps('Success')
    }
💻 Hands-on: ตัวอย่างโค้ด Lambda (Python) ที่ทำงานเมื่อมีไฟล์เข้า S3

สรุป Key Takeaways

  • Lambda = รันโค้ดแบบ serverless ตาม event จ่ายตามใช้จริง
  • สเกลเอง ไม่มี event ไม่จ่าย เหมาะงานสั้น event-driven
  • หัวใจของสถาปัตยกรรม serverless ร่วมกับ API Gateway/S3/DynamoDB

คำถามที่พบบ่อย

Lambda เหมาะและไม่เหมาะกับงานแบบไหน

เหมาะ: งาน event-driven ชิ้นสั้น (ประมวลไฟล์ที่อัปโหลด, API backend, งานตามคิว) โหลดผันผวน — จ่ายตามที่รันจริง ส่วนไม่เหมาะ: งานรันยาวเกิน 15 นาที (limit ตายตัว), ต้องการ GPU/สเปกพิเศษ, หรือโหลดหนักนิ่งตลอด 24/7 ที่ container/EC2 ถูกกว่า — เลข 15 นาทีออกสอบบ่อยมาก

Cold start คืออะไร ลดยังไง

ครั้งแรกที่เรียก (หรือหลังว่างนาน) Lambda ต้องเตรียม environment ก่อนรัน ทำให้ request แรกช้ากว่าปกติ — ลดได้ด้วย provisioned concurrency (อุ่นเครื่องรอไว้ เสียเงินเพิ่ม), ลดขนาดแพ็กเกจ, เลี่ยง VPC ถ้าไม่จำเป็น — โจทย์ "latency-sensitive + serverless" ให้นึกถึง provisioned concurrency

Lambda ต่อกับ RDS ตรงๆ มีปัญหาอะไร

Lambda scale เป็นร้อย instance พร้อมกัน แต่ละตัวเปิด connection ใหม่จนฐานข้อมูล connection เต็ม — ทางแก้มาตรฐานคือ RDS Proxy ทำ connection pooling ตรงกลาง หรือใช้ฐานข้อมูลที่เกิดมาเพื่อ serverless อย่าง Aurora Serverless/DynamoDB

ลองทำ Quiz ท้ายบท

คำถามแนวข้อสอบของโมดูลนี้ 5 ข้อ · เฉลยทันที

อ่านจบแล้วอย่าลืมทำเครื่องหมาย