

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 在 Lambda 函數程式碼中存取租戶識別符
<a name="tenant-isolation-context"></a>

當您的 Lambda 函數已啟用租用戶隔離時，用於調用函數的租用戶識別符會在傳遞給函數處理常式的內容物件中可用。您可以使用此識別符來實作租戶特定的邏輯、監控和偵錯功能。

**Topics**
+ [存取租戶識別符](#tenant-isolation-context-access)
+ [常用模式](#tenant-isolation-context-patterns)
+ [監控與除錯](#tenant-isolation-context-monitoring)

## 存取租戶識別符
<a name="tenant-isolation-context-access"></a>

租用戶識別符可透過內容物件的 `tenantId` 屬性使用。請注意，此屬性在[調用階段](lambda-runtime-environment.md#runtimes-lifecycle-invoke)期間可用，而不是[在初始化階段](lambda-runtime-environment.md#runtimes-lifecycle-ib)。

------
#### [ 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);
        }
    }
}
```

------

## 常用模式
<a name="tenant-isolation-context-patterns"></a>

以下是在函數程式碼中使用租戶識別符的常見方法：

**租用戶特定組態**

使用租戶 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)
```

## 監控與除錯
<a name="tenant-isolation-context-monitoring"></a>

當您[啟用 JSON 記錄](monitoring-cloudwatchlogs-logformat.md)時，租戶識別符會自動包含在 Lambda 日誌中，讓您更輕鬆地監控和偵錯租戶特定問題。您也可以使用租戶 ID 進行自訂指標和追蹤。

**Example 具有租戶 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)
```