

# Uso del objeto de contexto de Lambda para recuperar información de funciones de C\$1
<a name="csharp-context"></a>

Cuando Lambda ejecuta su función, pasa un objeto context al [controlador](csharp-handler.md). Este objeto proporciona propiedades con información acerca de la invocación, la función y el entorno de ejecución.

**Propiedades de context**
+ `FunctionName`: el nombre de la función de Lambda.
+ `FunctionVersion`: la [versión](configuration-versions.md) de la función.
+ `InvokedFunctionArn`: el nombre de recurso de Amazon (ARN) que se utiliza para invocar esta función. Indica si el invocador especificó un número de versión o alias.
+ `MemoryLimitInMB`: cantidad de memoria asignada a la función.
+ `AwsRequestId`: el identificador de la solicitud de invocación.
+ `LogGroupName`: grupo de registros de para la función.
+ `LogStreamName`: el flujo de registro de la instancia de la función.
+ `RemainingTime`(`TimeSpan`): el número de milisegundos que quedan antes del tiempo de espera de la ejecución.
+ `Identity`: (aplicaciones móviles) Información acerca de la identidad de Amazon Cognito que autorizó la solicitud.
+ `ClientContext`: (aplicaciones móviles) Contexto de cliente proporcionado a Lambda por la aplicación cliente.
+ `Logger`: el [objeto logger](csharp-logging.md) para la función.

Puede utilizar información en el objeto `ILambdaContext` para generar información sobre la invocación de su función con fines de supervisión. El código siguiente proporciona un ejemplo de cómo agregar información de contexto a un marco de registro estructurado. En este ejemplo, la función agrega `AwsRequestId` a los resultados del registro. La función también utiliza la propiedad `RemainingTime` para cancelar una tarea en vuelo si está a punto de agotarse el tiempo de espera de la función de Lambda.

```
[assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.SystemTextJson.DefaultLambdaJsonSerializer))]

namespace GetProductHandler;

public class Function
{
    private readonly IDatabaseRepository _repo;
    
    public Function()
    {
        this._repo = new DatabaseRepository();
    }
    
    public async Task<APIGatewayProxyResponse> FunctionHandler(APIGatewayProxyRequest request, ILambdaContext context)
    {
        Logger.AppendKey("AwsRequestId", context.AwsRequestId);
        
        var id = request.PathParameters["id"];

        using var cts = new CancellationTokenSource();
        
        try
        {
            cts.CancelAfter(context.RemainingTime.Add(TimeSpan.FromSeconds(-1)));
            
            var databaseRecord = await this._repo.GetById(id, cts.Token);
            
            return new APIGatewayProxyResponse 
            {
                StatusCode = (int)HttpStatusCode.OK,
                Body = JsonSerializer.Serialize(databaseRecord)
            };
        }
        catch (Exception ex)
        {
            return new APIGatewayProxyResponse 
            {
                StatusCode = (int)HttpStatusCode.InternalServerError,
                Body = JsonSerializer.Serialize(new { error = ex.Message })
            };
        }
        finally
        {
            cts.Cancel();
        }
    }
}
```