Uso del objeto de contexto de Lambda para recuperar información de funciones de C# - AWS Lambda

Uso del objeto de contexto de Lambda para recuperar información de funciones de C#

Cuando Lambda ejecuta su función, pasa un objeto context al controlador. 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 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 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) }; } finally { cts.Cancel(); return new APIGatewayProxyResponse { StatusCode = (int)HttpStatusCode.InternalServerError, Body = JsonSerializer.Serialize(databaseRecord) }; } } }