Cấu hình hàm Lambda

Ứng dụng Serverless với AWS Lambda

Claudio Canales

Senior DevOps Engineer

Vì sao cấu hình quan trọng

  • Cùng mã nhưng hành vi khác nhau với thiết lập khác nhau.
  • Cấu hình chi phối hiệu năng, chi phí, và an toàn.
  • Mục tiêu: hành vi nhất quán ở dev và prod.

Cùng mã, cấu hình khác

Ứng dụng Serverless với AWS Lambda

Mã vs cấu hình

Gói mã

  • Gói mã
  • Logic handler + phụ thuộc.
  • Thay đổi cần triển khai.

Cấu hình hàm

  • Cấu hình hàm
  • Bộ nhớ, timeout, biến môi trường.
  • Execution role + layer.
Ứng dụng Serverless với AWS Lambda

Các tùy chỉnh bạn kiểm soát

  • Runtime + handler: mã Lambda chạy gì.
  • Bộ nhớ + timeout: hiệu năng, chi phí, an toàn.
  • Biến môi trường: cấu hình không hard-code.
  • Execution role: quyền gọi API AWS.
  • Layer: phụ thuộc dùng chung giữa các hàm.

Các núm cấu hình Lambda

Ứng dụng Serverless với AWS Lambda

Cơ bản về runtime và handler

  • Runtime = môi trường ngôn ngữ (ví dụ: Python).
  • Handler = điểm vào Lambda gọi.
  • Định dạng handler: file.function.
  • Ví dụ: lambda_function.lambda_handler.

Phân tách chuỗi handler

Ứng dụng Serverless với AWS Lambda

Chuỗi handler: các lỗi thường gặp

# lambda_function.py
def lambda_handler(event, context):
    return {"statusCode": 200}

Import rồi gọi handler

Ứng dụng Serverless với AWS Lambda

Execution role (IAM)

  • IAM = Identity and Access Management (phân quyền).
  • Execution role xác định hàm được phép làm gì.
  • Vai trò này kiểm soát API AWS mà mã có thể gọi.

Execution role như thẻ ra vào

Ứng dụng Serverless với AWS Lambda

Lambda layer là gì?

  • Layer là một tệp ZIP gắn vào hàm.
  • Lambda cung cấp tệp của layer tại runtime dưới /opt.
  • Dùng layer cho thư viện dùng chung và tiện ích.
  • Cập nhật một lần; nhiều hàm có thể dùng lại.

Layer được mount dưới /opt

Ứng dụng Serverless với AWS Lambda

Layer xuất hiện ở đâu khi chạy

  • Mã hàm được mount dưới /var/task.
  • Layer đính kèm được mount dưới /opt.
  • Lambda cấp thư mục tạm tại /tmp.

Thư mục runtime: /var/task, /opt, /tmp

Ứng dụng Serverless với AWS Lambda

Bộ nhớ cũng ảnh hưởng CPU

  • Thêm bộ nhớ -> thêm CPU.
  • Giảm thời gian chạy cho tác vụ nặng CPU.
  • Chi phí phụ thuộc cả thời lượng và bộ nhớ.

Bộ nhớ tăng thì CPU tăng

Ứng dụng Serverless với AWS Lambda

Tinh chỉnh bộ nhớ bằng đo lường

  • Bắt đầu với mặc định hợp lý (ví dụ: 256 MB).
  • Kiểm thử với sự kiện thực tế.
  • So sánh thời lượng và chi phí giữa các mức bộ nhớ.

Quét bộ nhớ: đo thời lượng và chi phí

Ứng dụng Serverless với AWS Lambda

Timeout và chạy an toàn

  • Timeout dừng các lần chạy vượt kiểm soát.
  • Kiểm tra thời gian còn lại trước tác vụ dài.
  • Fail fast và thử lại khi phù hợp.

Timeout như bộ hẹn giờ an toàn

Ứng dụng Serverless với AWS Lambda

Minh họa: kiểm tra thời gian còn lại

def lambda_handler(event, context):
    time_left = context.get_remaining_time_in_millis()
    if time_left < 500:
        raise TimeoutError("Not enough time left")
    return {"statusCode": 200}

Bảo vệ bằng đếm ngược context

Ứng dụng Serverless với AWS Lambda

Biến môi trường

  • Tách cấu hình khỏi mã.
  • Tách thiết lập dev/test/prod.
  • Dùng Secrets Manager cho giá trị nhạy cảm.

Biến môi trường cấu hình hành vi

Ứng dụng Serverless với AWS Lambda

Minh họa: đọc biến môi trường

import os

STAGE = os.getenv("STAGE", "dev")
LOG_LEVEL = os.getenv(
    "LOG_LEVEL", "INFO"
)

Mặc định giúp thử nghiệm cục bộ an toàn hơn

  • Import os để truy cập biến môi trường.
  • os.getenv trả về giá trị hoặc mặc định.
Ứng dụng Serverless với AWS Lambda

Cạm bẫy cấu hình thường gặp

  • Hard-code giá trị stage trong mã.
  • Timeout quá thấp hoặc thiếu quyền IAM.
  • Lưu secrets trong biến môi trường thuần.

Cạm bẫy và nguyên tắc

Ứng dụng Serverless với AWS Lambda

Vamos praticar!

Ứng dụng Serverless với AWS Lambda

Preparing Video For Download...