Invocation de fonctions Lambda avec isolation des locataires - AWS Lambda

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Invocation de fonctions Lambda avec isolation des locataires

Lorsque vous appelez une fonction pour laquelle l'isolation des locataires est activée, vous devez fournir un tenant-id paramètre. Ce paramètre garantit que l'appel de votre fonction est traité dans un environnement d'exécution dédié à ce locataire spécifique.

Invocation de fonctions avec isolation des locataires ()AWS CLI

Invocation synchrone

Pour les appels synchrones, ajoutez le --tenant-id paramètre à votre commande Invoke :

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

invocation asynchrone

Pour les appels asynchrones, incluez à la fois les paramètres et : --tenant-id --invocation-type Event

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

Invocation de fonctions avec isolation des locataires (API)

Lorsque vous utilisez directement l'action d'API Invoke, incluez l'identifiant du locataire à l'aide du X-Amzn-Tenant-Id paramètre dans votre demande.

Exemple de demande d'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" }

Invocation de fonctions avec isolation des locataires (API Gateway)

Lorsque vous utilisez API Gateway REST APIs pour déclencher des fonctions Lambda isolées par les locataires, vous devez configurer API Gateway pour mapper les propriétés des demandes du client à l'en-tête X-Amz-Tenant-Id attendu par Lambda. API Gateway utilise l'action d'API Invoke de Lambda, qui nécessite que l'ID du locataire soit transmis à l'aide de l'en-tête X-Amz-Tenant-Id HTTP. Vous pouvez configurer API Gateway pour injecter cet en-tête HTTP dans la demande d'appel Lambda avec une valeur obtenue à partir des propriétés de demande du client telles que les en-têtes HTTP, les paramètres de requête ou les paramètres de chemin. Vous devez d'abord mapper la propriété de la demande du client avant de pouvoir remplacer l'X-Amz-Tenant-Iden-tête.

Note

Vous ne pouvez pas utiliser le protocole HTTP APIs pour appeler des fonctions Lambda isolées par les locataires, car il n'est pas possible de remplacer l'en-tête. X-Amz-Tenant-Id

Utilisation des en-têtes de demande

Configurez votre intégration API Gateway pour mapper un en-tête personnalisé entre la demande du client et l'X-Amz-Tenant-Iden-tête. L'exemple suivant montre une demande client avec un x-tenant-id en-tête :

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" }

Dans la configuration de votre méthode API Gateway, vous devez :

  1. Activez le paramètre d'en-tête de demande du client (par exemple,method.request.header.x-tenant-id)

  2. Mappez l'en-tête du client à l'en-tête d'intégration Lambda en utilisant integration.request.header.X-Amz-Tenant-Id

Utilisation des paramètres de requête

De même, vous pouvez associer les paramètres de requête à l'X-Amz-Tenant-Iden-tête :

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

Configurez la méthode pour activer le paramètre de requête et mappez-le à l'en-tête d'intégration.

Invocation de fonctions avec isolation des locataires (SDK)

Lorsque vous l'utilisez AWS SDKs pour invoquer des fonctions isolées par le locataire, incluez l'identifiant du locataire dans votre demande d'invocation.

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); } }