Lambda 함수 코드에서 테넌트 식별자 접근하기
Lambda 함수 코드에서 테넌트 식별자 접근하기
Lambda 함수에 테넌트 격리(tenant isolation)가 활성화되면, 함수를 호출하는 데 사용된 테넌트 식별자가 함수 핸들러에 전달되는 컨텍스트 객체 내에서 제공돼요. 이 식별자를 사용해서 테넌트별 로직, 모니터링, 디버깅 기능을 구현할 수 있어요.
본문
주제(Topics)
테넌트 식별자 접근
테넌트 식별자는 컨텍스트 객체의 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)
더 알아보기 (Learn more)
Lambda 테넌트 격리에 대한 자세한 내용은 테넌트 격리 모델을 참고하세요.