테넌트 격리를 사용하여 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)

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