Python Lambda 関数にレイヤーを使用する
Lambda レイヤーを使用して、複数の関数間で再利用するコードおよび依存関係をパッケージ化できます。レイヤーには通常、ライブラリの依存関係、カスタムランタイム、または設定ファイルが含まれています。レイヤーの作成には、次の 3 つの一般的な手順が含まれます。
- 
      レイヤーコンテンツのパッケージ化。これは、関数で使用する依存関係を含む .zip ファイルアーカイブを作成することを意味します。 
- 
      Lambda でレイヤーを作成します。 
- 
      レイヤーを関数に追加します。 
レイヤーコンテンツのパッケージ化
レイヤーを作成するには、次の要件を満たす .zip ファイルのアーカイブにパッケージをバンドルします。
- 
        Lambda 関数に使用するのと同じ Python バージョンを使用してレイヤーを構築すること。例えば、Python 3.13 を使用してレイヤーを構築する場合、関数にも Python 3.13 ランタイムを使用してください。 
- 
        .zip ファイルは、ルートレベルに pythonディレクトリを含む必要があります。
- 
        レイヤーのパッケージは Linux と互換性がある必要があります。Lambda 関数は Amazon Linux 上で動作します。 
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.pyimport 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_responseimport 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