在 Lambda 函数代码中访问租户标识符 - Amazon Lambda
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

在 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)