Python Lambda 関数にレイヤーを使用する
Lambda レイヤーを使用して、複数の関数間で再利用するコードおよび依存関係をパッケージ化できます。レイヤーには通常、ライブラリの依存関係、カスタムランタイム、または設定ファイルが含まれています。レイヤーの作成には、次の 3 つの一般的な手順が含まれます。
-
レイヤーコンテンツのパッケージ化。これは、関数で使用する依存関係を含む .zip ファイルアーカイブを作成することを意味します。
-
Lambda でレイヤーを作成します。
-
レイヤーを関数に追加します。
レイヤーコンテンツのパッケージ化
レイヤーを作成するには、次の要件を満たす .zip ファイルのアーカイブにパッケージをバンドルします。
-
Lambda 関数に使用するのと同じ Python バージョンを使用してレイヤーを構築すること。例えば、Python 3.13 を使用してレイヤーを構築する場合、関数にも Python 3.13 ランタイムを使用してください。
-
.zip ファイルは、ルートレベルに
python
ディレクトリを含む必要があります。 -
レイヤーのパッケージは Linux と互換性がある必要があります。Lambda 関数は Amazon Linux 上で動作します。
-
レイヤーにネイティブバイナリまたは実行可能ファイルが含まれている場合は、関数と同じアーキテクチャ(x86_64 または arm64)をターゲットにする必要があります。
pip
がインストールされたサードパーティ Python ライブラリ (requests
や pandas
など) か、ユーザー独自の Python モジュールやパッケージのいずれかを含むレイヤーを作成できます。
pip パッケージを使用してレイヤーを作成する方法
-
次のいずれかの方法を選択し、必要な最上位ディレクトリ (
python/
) にpip
パッケージをインストールします。 -
python
ディレクトリの内容を圧縮します。.zip ファイルのディレクトリ構造は次のようになります。
python/
# Required top-level directory └── requests/ └── boto3/ └── numpy/ └── (dependencies of the other packages)注記
Python 仮想環境 (venv) を使用してパッケージをインストールする場合、ディレクトリ構造はこれとは異なります (
python/lib/python3.
など)。.zip ファイルにルートレベルのx
/site-packagespython
ディレクトリが含まれる限り、Lambda はパッケージを見つけてインポートすることができます。
ユーザー独自のコードを使用してレイヤーを作成する方法
-
レイヤーに必要な最上位ディレクトリを作成します。
mkdir python
-
python
ディレクトリに Python モジュールを作成します。次のモジュール例は、必要な情報が含まれていることを確認して注文をバリデーションします。例 カスタムモジュール: validator.py
import json def validate_order(order_data): """Validates an order and returns formatted data.""" required_fields = ['product_id', 'quantity'] # Check required fields missing_fields = [field for field in required_fields if field not in order_data] if missing_fields: raise ValueError(f"Missing required fields: {', '.join(missing_fields)}") # Validate quantity quantity = order_data['quantity'] if not isinstance(quantity, int) or quantity < 1: raise ValueError("Quantity must be a positive integer") # Format and return the validated data return { 'product_id': str(order_data['product_id']), 'quantity': quantity, 'shipping_priority': order_data.get('priority', 'standard') } def format_response(status_code, body): """Formats the API response.""" return { 'statusCode': status_code, 'body': json.dumps(body) }
-
python
ディレクトリの内容を圧縮します。.zip ファイルのディレクトリ構造は次のようになります。
python/
# Required top-level directory └── validator.py -
関数で、Python パッケージと同様にモジュールをインポートして使用します。例:
from validator import validate_order, format_response
import json def lambda_handler(event, context): try: # Parse the order data from the event body order_data = json.loads(event.get('body', '{}')) # Validate and format the order validated_order = validate_order(order_data) return format_response(200, { 'message': 'Order validated successfully', 'order': validated_order }) except ValueError as e: return format_response(400, { 'error': str(e) }) except Exception as e: return format_response(500, { 'error': 'Internal server error' })次のテストイベントを使用して関数を呼び出すことができます。
{ "body": "{\"product_id\": \"ABC123\", \"quantity\": 2, \"priority\": \"express\"}" }
予想されるレスポンス
{ "statusCode": 200, "body": "{\"message\": \"Order validated successfully\", \"order\": {\"product_id\": \"ABC123\", \"quantity\": 2, \"shipping_priority\": \"express\"}}" }
Lambda でレイヤーを作成する
AWS CLI または Lambda コンソールを使用して、レイヤーを発行できます。
レイヤーを関数に追加する
サンプルアプリ
Lambda レイヤーの使用方法のその他の例については、「AWS Lambda デベロッパーガイド」 GitHub リポジトリ内の Layer-python