Tích hợp Lambda với các dịch vụ AWS

Ứng dụng Serverless với AWS Lambda

Claudio Canales

Senior DevOps Engineer

Vòng lặp tích hợp

  • Nhận sự kiện.
  • Xử lý trong handler.
  • Gọi SDK.

Sự kiện -> handler -> vòng lặp SDK

Ứng dụng Serverless với AWS Lambda

Trigger và lời gọi SDK

Trigger

  • Quyết định khi nào Lambda chạy.

Gọi SDK (trong handler)

  • Đọc/ghi các dịch vụ như DynamoDB và S3.

Trigger và gọi SDK

Ứng dụng Serverless với AWS Lambda

Ví dụ cụ thể

  • Có tệp được tải lên S3.
  • Lambda chạy.
  • Lưu một bản ghi nhỏ vào DynamoDB.

Tải S3 -> Lambda -> DynamoDB

Ứng dụng Serverless với AWS Lambda

Payload sự kiện: tìm đúng phần cần

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

Chú thích payload sự kiện S3

Ứng dụng Serverless với AWS Lambda

Vị trí của AWS SDK trong luồng

  • Mã của bạn gọi SDK (boto3).
  • SDK gọi các API của AWS.
  • IAM là bộ phận kiểm soát truy cập.

Handler -> SDK -> AWS API

Ứng dụng Serverless với AWS Lambda

Execution role = thông tin xác thực

  • Thông tin xác thực tạm thời từ execution role.
  • Không dùng access key trong mã.
  • Role không được phép gọi API thì SDK sẽ lỗi.

Execution role cung cấp thông tin xác thực

Ứng dụng Serverless với AWS Lambda

Ít đặc quyền: giới hạn hành động + tài nguyên

  • Giảm phạm vi ảnh hưởng khi có sự cố.
  • Chỉ cấp quyền hành động và tài nguyên cần thiết.
  • Tránh ký tự đại diện trừ khi thật sự cần.

Ít đặc quyền: hành động và tài nguyên

Ứng dụng Serverless với AWS Lambda

DynamoDB: chọn thao tác phù hợp

  • PutItem ghi dữ liệu.
  • GetItem đọc theo khóa.
  • Query tìm mục liên quan.
  • Ưu tiên thao tác có mục tiêu thay vì quét rộng.

Các thao tác DynamoDB

Ứng dụng Serverless với AWS Lambda

S3: làm việc với bucket + key

  • Đối tượng nằm tại bucket + key.
  • GetObject lấy nội dung.
  • PutObject ghi tệp dẫn xuất mới.

S3 bucket và key

Ứng dụng Serverless với AWS Lambda

Đặt cấu hình trong biến môi trường

  • Hardcode tên tài nguyên rất dễ vỡ.
  • Dùng biến môi trường.
  • Triển khai cùng mã cho dev và prod.

Cấu hình bằng biến môi trường

Ứng dụng Serverless với AWS Lambda

Mã SDK: giữ nhỏ gọn và dễ kiểm thử

import boto3
ddb = boto3.client("dynamodb")
def handler(event, context):
    ddb.put_item(
        TableName="files",
        Item={"pk": {"S": "1"}},
    )
  • Xác thực đầu vào, gọi SDK, trả kết quả.
  • Unit test phần logic thuần.

Handler nhỏ với lời gọi SDK

Ứng dụng Serverless với AWS Lambda

Xử lý lỗi SDK có chủ đích

  • Lỗi quyền truy cập thường gặp lúc đầu.
  • Khi gọi thất bại, phải nêu rõ lý do.
  • Log tốt giúp gỡ lỗi an toàn hơn.

Nhánh thành công và thất bại

Ứng dụng Serverless với AWS Lambda

Khi IAM sai, mã vẫn trông đúng

AccessDeniedException
required action denied
  • Sửa IAM trước, rồi mới sửa logic handler.

Từ chối truy cập

Ứng dụng Serverless với AWS Lambda

Idempotency: retry và trùng lặp an toàn

  • Có thể nhận cùng một sự kiện hai lần.
  • Khóa idempotency tránh xử lý trùng.
  • Ghi có điều kiện giúp an toàn khi lặp.

Mẫu khóa idempotency

Ứng dụng Serverless với AWS Lambda

Ghép lại (đầu-cuối)

  • Sự kiện S3 mang vào bucket và key.
  • Handler phân tích chúng.
  • PutItem ghi metadata vào DynamoDB.
  • CloudWatch Logs hiển thị diễn biến.

Tóm tắt tích hợp đầu-cuối

Ứng dụng Serverless với AWS Lambda

Điểm chính cần nhớ

  • Tách trigger khỏi lời gọi SDK.
  • Siết chặt quyền với execution role.
  • Dùng biến môi trường để cấu hình di động.

Điểm rút ra về tích hợp

Ứng dụng Serverless với AWS Lambda

Ayo berlatih!

Ứng dụng Serverless với AWS Lambda

Preparing Video For Download...