Usar o objeto de contexto do Lambda para recuperar informações das funções em C#
Quando o Lambda executa a função, ele transmite um objeto de contexto para o handler. Esse objeto fornece propriedades com informações sobre a invocação, a função e o ambiente de execução.
Propriedades de contexto
-
FunctionName
: o nome da função do Lambda. -
FunctionVersion
: a versão da função. -
InvokedFunctionArn
: o nome do recurso da Amazon (ARN) usado para invocar a função. Indica se o invocador especificou um alias ou número de versão. -
MemoryLimitInMB
: a quantidade de memória alocada para a função. -
AwsRequestId
: o identificador da solicitação de invocação. -
LogGroupName
: o grupo de logs da função. -
LogStreamName
: a transmissão de log para a instância da função. -
RemainingTime
(TimeSpan
): o número de milissegundos restantes antes do tempo limite da execução. -
Identity
: (aplicativos móveis) informações sobre a identidade do Amazon Cognito que autorizou a solicitação. -
ClientContext
: (aplicativos móveis) contexto do cliente fornecido ao Lambda pela aplicação cliente. -
Logger
O objeto logger para a função.
Você pode usar a informação no objeto do ILambdaContext
para gerar informações sobre a invocação da função para fins de monitoramento. O código a seguir fornece um exemplo de como adicionar informações de contexto a uma estrutura de log estruturada. Neste exemplo, a função adiciona AwsRequestId
às saídas do log. A função também usa a propriedade RemainingTime
para cancelar uma tarefa em execução se o tempo limite da função do Lambda estiver prestes a ser atingido.
[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) }; } } }