テナント分離を使用した Lambda 関数の呼び出し - AWS Lambda

テナント分離を使用した Lambda 関数の呼び出し

テナント分離が有効になっている関数を呼び出す場合は、tenant-id パラメータを指定する必要があります。このパラメータにより、関数の呼び出しがその特定のテナント専用の実行環境で処理されます。

テナント分離を使用した関数の呼び出し (AWS CLI)

同期呼び出し

同期呼び出しの場合は、Invoke コマンドに --tenant-id パラメータを追加します。

aws lambda invoke \ --function-name image-analysis \ --tenant-id blue \ response.json

非同期呼び出し

非同期呼び出しの場合は、--tenant-id パラメータと --invocation-type Event パラメータの両方を含めます。

aws lambda invoke \ --function-name image-analysis \ --tenant-id blue \ --invocation-type Event \ response.json

テナント分離を使用した関数の呼び出し (API)

呼び出し API アクションを直接使用する場合は、X-Amzn-Tenant-Id パラメータを使用してリクエストにテナント識別子を含めます。

API リクエストの例:

POST /2015-03-31/functions/image-analysis/invocations HTTP/1.1 Host: lambda.us-east-1.amazonaws.com Content-Type: application/json Authorization: AWS4-HMAC-SHA256 Credential=... X-Amz-Tenant-Id: blue { "key1": "value1", "key2": "value2" }

テナント分離を使用した関数の呼び出し (API Gateway)

API Gateway REST API を使用してテナント分離 Lambda 関数をトリガーする場合は、クライアントリクエストプロパティを Lambda が想定する X-Amz-Tenant-Id ヘッダーにマッピングするように API Gateway を設定する必要があります。API Gateway は Lambda の呼び出し API アクションを使用します。このアクションでは、X-Amz-Tenant-Id HTTP ヘッダーを使用してテナント ID を渡す必要があります。HTTP ヘッダー、クエリパラメータ、パスパラメータなどのクライアントリクエストプロパティから取得した値を使用して、この HTTP ヘッダーを Lambda 呼び出しリクエストに挿入するように API Gateway を設定できます。X-Amz-Tenant-Id ヘッダーを上書きする前に、まずクライアントリクエストプロパティをマッピングする必要があります。

注記

X-Amz-Tenant-Id ヘッダーを上書きできないため、HTTP API を使用してテナント分離 Lambda 関数を呼び出すことはできません。

リクエストヘッダーの使用

クライアントリクエストから X-Amz-Tenant-Id ヘッダーにカスタムヘッダーをマッピングするように API Gateway 統合を設定します。以下に、x-tenant-id ヘッダーを持つクライアントリクエストの例を示します。

POST /api/process HTTP/1.1 Host: your-api-id.execute-api.us-east-1.amazonaws.com Content-Type: application/json x-tenant-id: blue { "data": "sample payload" }

API Gateway メソッド設定では、以下を行う必要があります。

  1. クライアントリクエストヘッダーパラメータを有効にする (例: method.request.header.x-tenant-id)

  2. integration.request.header.X-Amz-Tenant-Id を使用してクライアントヘッダーを Lambda 統合ヘッダーにマッピングする

クエリパラメータの使用

同様に、クエリパラメータを X-Amz-Tenant-Id ヘッダーにマッピングできます。

GET /api/process?tenant-id=blue&data=sample HTTP/1.1 Host: your-api-id.execute-api.us-east-1.amazonaws.com

クエリパラメータを有効にして統合ヘッダーにマッピングするようにメソッドを設定します。

テナント分離を使用した関数の呼び出し (SDK)

AWS SDK を使用してテナント分離関数を呼び出す場合は、呼び出しリクエストにテナント識別子を含めます。

Python
import boto3 import json lambda_client = boto3.client('lambda') response = lambda_client.invoke( FunctionName='image-analysis', TenantId='blue', Payload=json.dumps({ 'key1': 'value1', 'key2': 'value2' }) ) result = json.loads(response['Payload'].read())
Node.js
const AWS = require('aws-sdk'); const lambda = new AWS.Lambda(); const params = { FunctionName: 'image-analysis', TenantId: 'blue', Payload: JSON.stringify({ key1: 'value1', key2: 'value2' }) }; lambda.invoke(params, (err, data) => { if (err) { console.error(err); } else { const result = JSON.parse(data.Payload); console.log(result); } });
Java
import software.amazon.awssdk.services.lambda.LambdaClient; import software.amazon.awssdk.services.lambda.model.InvokeRequest; import software.amazon.awssdk.services.lambda.model.InvokeResponse; import software.amazon.awssdk.core.SdkBytes; public class TenantIsolationExample { public static void main(String[] args) { LambdaClient lambdaClient = LambdaClient.create(); String payload = "{\"key1\": \"value1\", \"key2\": \"value2\"}"; InvokeRequest request = InvokeRequest.builder() .functionName("image-analysis") .tenantId("blue") .payload(SdkBytes.fromUtf8String(payload)) .build(); InvokeResponse response = lambdaClient.invoke(request); } }