- vừa được xem lúc

Tối ưu hàm AWS Lambda Python bằng cách sử dụng Layer

0 0 1

Người đăng: Phuc Dang Xuan

Theo Viblo Asia

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ục Layers
  • 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ộ!

Bình luận

Bài viết tương tự

- vừa được xem lúc

PDF Export, cẩn thận với những input có thể truyền vào

Giới thiệu. Dạo gần đây mình tình cờ gặp rất nhiều lỗi XSS, tuy nhiên trang đó lại có sử dụng dữ liệu người dùng input vào để export ra PDF.

0 0 74

- vừa được xem lúc

Giới thiệu về AWS Batch

Khi sử dụng hệ thống cloud service, điều chúng ta thường phải quan tâm đến không chỉ là hiệu suất hoạt động (performance) mà còn phải chú ý đến cả chi phí bỏ ra để duy trì hoạt động của hệ thống. Chắn hẳn là hệ thống lớn hay nhỏ nào cũng đã từng phải dùng đến những instance chuyên để chạy batch thực

0 0 147

- vừa được xem lúc

Tìm hiểu về AWS KMS

1. AWS KMS là gì. Ở KMS bạn có thể lựa chọn tạo symetric key (khóa đối xứng) hoặc asymetric key (khóa bất đối xứng) để làm CMK (Customer Master Key). Sau khi tạo key thì có thể thiết đặt key policy để control quyền access và sử dụng key.

0 0 69

- vừa được xem lúc

AWS VPC cho người mới bắt đầu

Tuần này, tôi trình bày lại những gì tôi đã học được về Virtual Private Cloud (VPC) của Amazon. Nếu bạn muốn xem những gì tôi đã học được về AWS, hãy xem Tổng quan về DynamoDB và Tổng quan về S3. VPC là gì. Những điều cần lưu ý:.

0 0 90

- vừa được xem lúc

AWS Essentials (Phần 6): Guildline SNS Basic trên AWS

Tiếp tục với chuỗi bài viết về Basic AWS Setting, chúng ta tiếp tục tìm hiểu tiếp tới SNS (Simple Notification Service). Đây là một service của AWS cho phép người dùng setting thực hiện gửi email, text message hay push notification tự động tới mobile device dựa trên event người dùng setting phía AWS

0 0 152

- vừa được xem lúc

Sử dụng Amazon CloudFront Content Delivery Network với Private S3 Bucket — Signing URLs

Trong nhiều trường hợp, thì việc sử dụng CDN là bắt buộc. Mình đã trải nghiệm với một số CDN nhưng cuối cùng mình lựa chọn sử dụng AWS CloudFront.

0 0 124