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

Serverless Applications with AWS Lambda

Claudio Canales

Senior DevOps Engineer

วงจรการทำงาน

  • รับ event เข้ามา
  • ประมวลผลใน handler
  • เรียกใช้ SDK

Event -> handler -> SDK loop

Serverless Applications with AWS Lambda

Trigger กับ SDK call

Trigger

  • กำหนดว่า Lambda จะทำงานเมื่อใด

SDK call (inside handler)

  • อ่านและเขียนข้อมูลกับบริการ เช่น DynamoDB และ S3

Trigger vs SDK call

Serverless Applications with AWS Lambda

ตัวอย่างที่เป็นรูปธรรม

  • ไฟล์ถูกอัปโหลดไปยัง S3
  • Lambda ทำงาน
  • บันทึกข้อมูลขนาดเล็กลง DynamoDB

S3 upload -> Lambda -> DynamoDB

Serverless Applications with AWS Lambda

Event payload: ค้นหาข้อมูลที่ต้องการ

{
  "Records": [{
    "s3": {
      "bucket": {"name": "…"},
      "object": {"key": "…"}
    }
  }]
}

S3 event payload callouts

Serverless Applications with AWS Lambda

AWS SDK อยู่ตรงไหนในระบบ

  • โค้ดเรียกใช้ SDK (boto3)
  • SDK เรียก AWS API
  • IAM ทำหน้าที่ควบคุมการเข้าถึง

Handler -> SDK -> AWS API

Serverless Applications with AWS Lambda

Execution role = credentials

  • credentials ชั่วคราวจาก execution role
  • ไม่ต้องฝัง access key ในโค้ด
  • หาก role ไม่มีสิทธิ์เรียก API การเรียก SDK จะล้มเหลว

Execution role provides credentials

Serverless Applications with AWS Lambda

Least privilege: จำกัด action และ resource

  • ลดขอบเขตความเสียหายที่อาจเกิดขึ้น
  • อนุญาตเฉพาะ action และ resource ที่จำเป็น
  • หลีกเลี่ยง wildcard ถ้าไม่จำเป็นจริง

Least privilege: actions and resources

Serverless Applications with AWS Lambda

DynamoDB: เลือก operation ให้เหมาะสม

  • PutItem ใช้เขียนข้อมูล
  • GetItem ใช้อ่านข้อมูลตาม key
  • Query ใช้ค้นหารายการที่เกี่ยวข้อง
  • ใช้ operation ที่เจาะจงแทนการ scan แบบกว้าง

DynamoDB operations

Serverless Applications with AWS Lambda

S3: ทำงานกับ bucket และ key

  • object อยู่ใน bucket + key
  • GetObject ดึงข้อมูลไฟล์
  • PutObject เขียนไฟล์ผลลัพธ์ใหม่

S3 bucket and key

Serverless Applications with AWS Lambda

เก็บ configuration ไว้ใน environment variable

  • การฝังชื่อ resource ไว้ในโค้ดตรง ๆ ทำให้เปราะบาง
  • ใช้ environment variable แทน
  • deploy โค้ดเดิมได้ทั้ง dev และ prod

Env var configuration

Serverless Applications with AWS Lambda

โค้ด SDK: เขียนให้กระชับและทดสอบได้

import boto3
ddb = boto3.client("dynamodb")
def handler(event, context):
    ddb.put_item(
        TableName="files",
        Item={"pk": {"S": "1"}},
    )
  • ตรวจสอบ input เรียก SDK แล้ว return
  • ทดสอบ logic ล้วน ๆ ด้วย unit test

Small handler with SDK call

Serverless Applications with AWS Lambda

จัดการข้อผิดพลาดของ SDK อย่างมีแบบแผน

  • ข้อผิดพลาดด้านสิทธิ์มักพบบ่อยในช่วงแรก
  • เมื่อการเรียกล้มเหลว ให้แสดงสาเหตุให้ชัดเจน
  • log ที่ดีช่วยให้ debug ได้ปลอดภัยขึ้น

Success and failure paths

Serverless Applications with AWS Lambda

เมื่อ IAM ผิดพลาด โค้ดดูเหมือนปกติ

AccessDeniedException
required action denied
  • แก้ IAM ก่อน แล้วค่อยแก้ handler logic

Access denied

Serverless Applications with AWS Lambda

Idempotency: รองรับการลองซ้ำอย่างปลอดภัย

  • event เดียวกันอาจถูกส่งมาซ้ำ
  • idempotency key ป้องกันการประมวลผลซ้ำ
  • conditional write ทำให้การลองซ้ำปลอดภัย

Idempotency key pattern

Serverless Applications with AWS Lambda

ภาพรวม end-to-end

  • S3 event นำส่ง bucket และ key
  • handler แยกข้อมูลออกมา
  • PutItem เขียน metadata ลง DynamoDB
  • CloudWatch Logs บันทึกสิ่งที่เกิดขึ้น

End-to-end integration summary

Serverless Applications with AWS Lambda

สรุปสิ่งสำคัญ

  • แยก trigger ออกจาก SDK call
  • จำกัดสิทธิ์ด้วย execution role
  • ทำให้ configuration ยืดหยุ่นด้วย env var

Integration takeaways

Serverless Applications with AWS Lambda

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

Serverless Applications with AWS Lambda

Preparing Video For Download...