ทำความเข้าใจโมเดลการทำงานของ Lambda

Serverless Applications with AWS Lambda

Claudio Canales

Senior DevOps Engineer

การทำงานอัตโนมัติ

Event-driven AWS

  • Lambda รันโค้ดเมื่อมี event เกิดขึ้น
  • ตัวอย่าง: อัปโหลดไฟล์ใน S3 -> ย่อขนาดภาพ
  • trigger ต่างกัน แต่รูปแบบเดียวกัน
Serverless Applications with AWS Lambda

รอจนกว่าจะถูก trigger

Idle -> event -> run -> stop

  • Idle: ไม่มีการทำงาน
  • Event: handler รัน แล้วหยุด

เปรียบ Lambda กับไฟเซ็นเซอร์จับการเคลื่อนไหว

  • เหมือนไฟเซ็นเซอร์: รอจนกว่าจะถูก trigger
  • trigger เปลี่ยนสถานะจาก "off" เป็น "on"
Serverless Applications with AWS Lambda

AWS Lambda คืออะไร?

AWS Lambda โดยสรุป

  • บริการประมวลผลแบบ event-driven
  • ปรับขนาดอัตโนมัติตามความต้องการ
  • จ่ายเฉพาะเวลาที่ใช้งานจริง
Serverless Applications with AWS Lambda

Lambda รันโค้ดอย่างไร

ขั้นตอนการทำงานของ Lambda

  • แหล่ง event เป็นตัวกระตุ้น Lambda
  • Lambda ส่ง event payload ไปยัง handler
  • handler ส่งผลลัพธ์กลับมา
Serverless Applications with AWS Lambda

การปรับขนาดตามความต้องการ

การ scaling สร้าง environment เพิ่มขึ้น

  • event มากขึ้น: การเรียกใช้แบบขนานมากขึ้น
  • Lambda สร้าง environment เพิ่มเติม
  • cold start อาจเกิดขึ้นในแต่ละ environment ใหม่
Serverless Applications with AWS Lambda

ฟังก์ชัน handler

def lambda_handler(event, context):
    # Your code here
    return {
        'statusCode': 200,
        'body': 'Hello from Lambda!'
    }
  • event: input payload (JSON)
  • context: metadata ของ runtime
  • return: ผลลัพธ์ (หรือสำเร็จ/ล้มเหลว)

handler รับ event และ context

Serverless Applications with AWS Lambda

ออบเจ็กต์ event

Object storage event payload

S3 event: bucket + object key

# event["Records"][0]["s3"]
{
  "bucket": {"name": "my-bucket"},
  "object": {"key": "data.csv"}
}
  • หน้าที่เดียวกัน: ดึงข้อมูลที่ต้องการ

HTTP request event payload

API event: method, path, body

# API request event
{
  "httpMethod": "POST",
  "path": "/users",
  "body": "{\"name\": \"John\"}"
}
  • trigger ต่างกัน JSON ก็ต่างกัน
Serverless Applications with AWS Lambda

ออบเจ็กต์ context

def lambda_handler(event, context):
    time_left = (
        context.get_remaining_time_in_millis()
    )
    request_id = context.aws_request_id
  • get_remaining_time_in_millis เวลาที่เหลือก่อน timeout
  • aws_request_id Request ID สำหรับติดตาม log
Serverless Applications with AWS Lambda

การทำงานแบบ stateless

Warm start reuse vs reset

  • แต่ละ invocation ทำงานอิสระจากกัน
  • อาจนำ environment เดิมมาใช้ซ้ำ แต่ไม่รับประกัน
  • เก็บ state ไว้ภายนอก Lambda
counter = 0

def lambda_handler(event, context):
    global counter
    counter += 1  # may reset
    return counter
Serverless Applications with AWS Lambda

Cold starts

ไทม์ไลน์ cold start

  • สร้าง execution environment ใหม่
  • โหลดโค้ดและ dependency
  • รัน initialization แล้วจึงรัน handler
Serverless Applications with AWS Lambda

Warm starts

ไทม์ไลน์ warm start

  • นำ environment เดิมมาใช้ซ้ำ
  • ข้ามขั้นตอน initialization ส่วนใหญ่
  • handler รันได้เร็วขึ้น
Serverless Applications with AWS Lambda

Init, invoke, freeze

วงจรชีวิตของ execution environment

  • Init รันครั้งเดียวต่อ environment
  • handler รันทุกครั้งที่มีการเรียกใช้
  • ระหว่างรอ environment อาจถูก freeze
Serverless Applications with AWS Lambda

การปรับแต่งเพื่อลด cold start

# init (once per env)
import boto3
s3 = boto3.client('s3')
# handler (every invocation)
def lambda_handler(event, context):
    return {"statusCode": 200}

Init ครั้งเดียว vs handler ทุก invocation

  • วาง import และ SDK client ไว้นอก handler
Serverless Applications with AWS Lambda

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

Serverless Applications with AWS Lambda

Preparing Video For Download...