

# Acceso al identificador de inquilino en el código de la función de Lambda
<a name="tenant-isolation-context"></a>

Cuando la función de Lambda tiene habilitado el aislamiento de inquilinos, el identificador de inquilino utilizado para invocar la función está disponible en el objeto de contexto que se pasa al controlador de funciones. Puede utilizar este identificador para implementar capacidades de lógica, supervisión y depuración específicas del inquilino.

**Topics**
+ [Acceso al identificador de inquilino](#tenant-isolation-context-access)
+ [Patrones de uso comunes](#tenant-isolation-context-patterns)
+ [Monitoreo y depuración](#tenant-isolation-context-monitoring)

## Acceso al identificador de inquilino
<a name="tenant-isolation-context-access"></a>

El identificador de inquilino está disponible a través de la propiedad de `tenantId` del objeto de contexto. Tenga en cuenta que esta propiedad está disponible durante la [fase de invocación](lambda-runtime-environment.md#runtimes-lifecycle-invoke), no durante la [fase de inicialización](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);
        }
    }
}
```

------

## Patrones de uso comunes
<a name="tenant-isolation-context-patterns"></a>

Estas son las formas más comunes de utilizar el identificador de inquilino en el código de función:

**Configuración específica del inquilino**

Utilice el identificador de inquilino para cargar la configuración o los ajustes específicos del inquilino:

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

**Acceso a datos específicos del inquilino**

Utilice el identificador de inquilino para garantizar el aislamiento de los datos y el control del acceso a estos:

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

## Monitoreo y depuración
<a name="tenant-isolation-context-monitoring"></a>

El identificador de inquilino se incluye automáticamente en los registros de Lambda cuando se [habilita el registro de JSON](monitoring-cloudwatchlogs-logformat.md), lo que facilita la supervisión y la depuración de problemas específicos del inquilino. También puede usar el identificador de inquilino para el seguimiento y las métricas personalizadas.

**Example Métricas personalizadas con el identificador de inquilino**  
En el siguiente ejemplo se muestra cómo utilizar el identificador de inquilino para crear métricas de CloudWatch específicas del inquilino con el fin de supervisar los patrones de uso y el rendimiento por inquilino:  

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