Invocação de funções do Lambda com isolamento de locatários - AWS Lambda

Invocação de funções do Lambda com isolamento de locatários

Ao invocar uma função que tenha o isolamento de locatários habilitado, você deve fornecer um parâmetro tenant-id. Esse parâmetro garante que a invocação da função seja processada em um ambiente de execução dedicado a esse locatário específico.

Invocação de funções com isolamento de locatários (AWS CLI)

Invocação síncrona

Para invocações síncronas, adicione o parâmetro --tenant-id ao seu comando Invoke:

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

Invocação assíncrona

Para invocações assíncronas, inclua os parâmetros --tenant-id e --invocation-type Event:

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

Invocação de funções com isolamento de locatários (API)

Ao usar a ação da API Invoke diretamente, inclua o identificador de locatário usando o parâmetro X-Amzn-Tenant-Id na sua solicitação.

Exemplo de solicitação de 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" }

Invocação de funções com isolamento de locatários (API Gateway)

Ao usar as APIs REST do API Gateway para acionar funções do Lambda isoladas de locatário, é necessário configurar o API Gateway para mapear as propriedades da solicitação do cliente para o cabeçalho X-Amz-Tenant-Id que o Lambda espera. O API Gateway usa a ação Invoke da API do Lambda, o que exige que o ID de locatário seja passado usando o cabeçalho de HTTP X-Amz-Tenant-Id. É possível configurar o API Gateway para injetar esse cabeçalho de HTTP na solicitação de invocação do Lambda com um valor obtido das propriedades da solicitação do cliente, como cabeçalhos de HTTP, parâmetros de consulta ou parâmetros de caminho. É necessário primeiro mapear a propriedade da solicitação do cliente antes de poder substituir o cabeçalho X-Amz-Tenant-Id.

nota

Não é possível usar APIs de HTTP para invocar funções do Lambda isoladas de locatário, pois não é possível substituir o cabeçalho X-Amz-Tenant-Id.

Uso de cabeçalhos de solicitação

Configure sua integração com o API Gateway para mapear um cabeçalho personalizado da solicitação do cliente para o cabeçalho X-Amz-Tenant-Id. O exemplo a seguir mostra uma solicitação do cliente com um cabeçalho 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" }

Na configuração do método do API Gateway, é necessário:

  1. Ativar o parâmetro do cabeçalho da solicitação do cliente (por exemplo, method.request.header.x-tenant-id)

  2. Mapear o cabeçalho do cliente para o cabeçalho de integração do Lambda usando integration.request.header.X-Amz-Tenant-Id

Usar parâmetros de consulta

Da mesma forma, é possível mapear os parâmetros de consulta para o cabeçalho 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

Configurar o método para habilitar o parâmetro de consulta e mapeá-lo para o cabeçalho de integração.

Invocação de funções com isolamento de locatários (SDK)

Ao usar SDKs da AWS para invocar funções isoladas de locatário, inclua o identificador do locatário na sua solicitação de invocação.

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