AWS Lambda là một công cụ tuyệt vời để triển khai các đoạn code chạy theo sự kiện mà không cần quản lý server. Tuy nhiên, nếu bạn sử dụng nhiều thư viện third-party, kích thước file .zip
của Lambda có thể vượt giới hạn hoặc ảnh hưởng đến tốc độ cold start.
Trong bài viết này, mình sẽ hướng dẫn cách sử dụng Lambda Layer để quản lý thư viện Python riêng biệt, giúp hàm Lambda nhẹ hơn, dễ bảo trì và tái sử dụng hơn.
1. Lambda Layer là gì?
Lambda Layer là một cơ chế cho phép bạn tách các phần dùng chung (ví dụ: thư viện Python, cấu hình, mô-đun helper) khỏi mã chính của Lambda function. Khi triển khai, Lambda sẽ "gắn" layer này vào runtime như một thư mục /opt/
trong môi trường thực thi.
2. Khi nào nên dùng Layer?
- Bạn cần dùng nhiều package như
pandas
,requests
,numpy
, v.v. - Có nhiều Lambda cùng dùng chung thư viện → giúp tránh lặp code
- Muốn giảm kích thước bundle khi deploy function
3. Tạo Lambda Layer với thư viện Python
Tạo folder python
Đầu tiên chúng ta cần phải tạo thư mục python
, đây là nơi chứa các thư viện cần chia sẻ (AWS yêu cầu đúng tên này). Trên local các bạn hãy chạy lệnh sau:
mkdir -p python
pip install requests -t python/
Đóng gói thành file zip
zip -r requests-layer.zip python/
Deploy lên AWS
Sau khi đóng gói file requests-layer.zip
, bạn cần upload nó lên AWS Lambda dưới dạng một Layer mới:
aws lambda publish-layer-version \ --layer-name requests-layer \ --description "Layer with requests lib" \ --zip-file fileb://requests-layer.zip \ --compatible-runtimes python3.9
Sau khi chạy lệnh trên, AWS sẽ trả về thông tin bên dưới:
{ "LayerVersionArn": "arn:aws:lambda:ap-northeast-3:273163728450:layer:requests-layer:1", ...
}
LayerVersionArn
là ARN của Layer mà bạn vừa tạo, bao gồm tên, số version và region. ARN này sẽ dùng để gắn Layer vào Lambda function
4. Gắn Layer vào hàm Lambda
- AWS Console → Lambda
- Mở function Lambda mà bạn muốn thêm
- Trong tab
Code
, kéo xuống mụcLayers
- Chọn
Add a layer
- Chọn Custom layers → chọn Layer bạn đã tạo
- Nhấn Add để lưu lại
5. Sử dụng thư viện trong Lambda
Sau khi đã gắn Layer thành công vào hàm Lambda, thư viện Python sẽ được mount tự động vào thư mục /opt/python
trong môi trường thực thi của Lambda. Điều này có nghĩa là bạn không cần phải đưa thư viện đó vào file zip của function nữa.
import requests
import json def lambda_handler(event, context): try: city = event.get("city", "Tokyo") url = "https://api.weatherapi.com/v1/current.json?key=YOUR_API_KEY&q={city}" response = requests.get(url) data = response.json() return { "statusCode": 200, "body": json.dumps({ "location": data["location"]["name"], "temp_c": data["current"]["temp_c"], "condition": data["current"]["condition"]["text"] }) } except Exception as e: return { "statusCode": 500, "body": json.dumps({"error": str(e)}) }
Như vậy mình đã hướng dẫn một cách cơ bản về việc sử dụng Lambda Layer để tái sử dụng giữa nhiều Lambda Function. Bài viết có thể còn nhiều hạn chế, rất mong nhận được góp ý từ mọi người để mình cải thiện trong những bài sau. Cảm ơn các bạn đã theo dõi và ủng hộ!