Lambda 함수 코드에서 테넌트 식별자에 액세스 - AWS Lambda

Lambda 함수 코드에서 테넌트 식별자에 액세스

Lambda 함수에서 테넌트 격리가 활성화된 경우 함수를 간접 호출하는 데 사용되는 테넌트 식별자는 함수 핸들러에 전달된 컨텍스트 객체 내에 제공됩니다. 이 식별자를 사용하여 테넌트별 로직, 모니터링 및 디버깅 기능을 구현할 수 있습니다.

테넌트 식별자 액세스

테넌트 식별자는 컨텍스트 객체의 tenantId 속성을 통해 제공됩니다. 이 속성은 초기화 단계가 아닌 간접 호출 단계에서 사용할 수 있습니다.

Python
def lambda_handler(event, context): tenant_id = context.tenant_id print(f"Processing request for tenant: {tenant_id}") # Implement tenant-specific logic if tenant_id == "blue": return process_blue_tenant(event) elif tenant_id == "green": return process_green_tenant(event) else: return process_default_tenant(event)
Node.js
exports.handler = async (event, context) => { const tenantId = context.tenantId; console.log(`Processing request for tenant: ${tenantId}`); // Implement tenant-specific logic switch (tenantId) { case 'blue': return processBlueTenant(event); case 'green': return processGreenTenant(event); default: return processDefaultTenant(event); } };
Java
public class TenantHandler implements RequestHandler<Map<String, Object>, String> { @Override public String handleRequest(Map<String, Object> event, Context context) { String tenantId = context.getTenantId(); System.out.println("Processing request for tenant: " + tenantId); // Implement tenant-specific logic switch (tenantId) { case "blue": return processBlueTenant(event); case "green": return processGreenTenant(event); default: return processDefaultTenant(event); } } }

일반 사용 패턴

다음은 함수 코드에서 테넌트 식별자를 사용하는 일반적인 방법입니다.

테넌트별 구성

테넌트 ID를 사용하여 테넌트별 구성 또는 설정을 로드합니다.

def lambda_handler(event, context): tenant_id = context.tenant_id # Load tenant-specific configuration config = load_tenant_config(tenant_id) database_url = config['database_url'] api_key = config['api_key'] # Process with tenant-specific settings return process_request(event, database_url, api_key)

테넌트별 데이터 액세스

테넌트 ID를 사용하여 데이터 격리 및 액세스 제어를 보장합니다.

import boto3 def lambda_handler(event, context): tenant_id = context.tenant_id # Ensure data access is scoped to the tenant dynamodb = boto3.resource('dynamodb') table = dynamodb.Table('user_data') user_id = event.get('userId') response = table.get_item( Key={ 'tenant_id': tenant_id, 'user_id': user_id } ) return process_results(response.get('Item'), tenant_id)

모니터링 및 디버깅

JSON 로깅을 활성화하면 테넌트 식별자가 Lambda 로그에 자동으로 포함되므로 테넌트별 문제를 더욱 쉽게 모니터링 및 디버깅할 수 있습니다. 사용자 지정 지표 및 추적에 테넌트 ID를 사용할 수도 있습니다.

예테넌트 ID가 포함된 사용자 지정 지표

다음 예제에서는 테넌트 ID를 사용하여 테넌트별 CloudWatch 지표를 생성하고 테넌트별 사용 패턴 및 성능을 모니터링하는 방법을 보여줍니다.

import boto3 def lambda_handler(event, context): tenant_id = context.tenant_id cloudwatch = boto3.client('cloudwatch') # Record tenant-specific metrics cloudwatch.put_metric_data( Namespace='MyApp/TenantMetrics', MetricData=[ { 'MetricName': 'RequestCount', 'Dimensions': [ { 'Name': 'TenantId', 'Value': tenant_id } ], 'Value': 1, 'Unit': 'Count' } ] ) return process_request(event, tenant_id)