Amazon LambdaC# 中的 上下文对象 - Amazon Lambda
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Amazon LambdaC# 中的 上下文对象

Lambda 运行您的函数时,会将 context 对象传递到处理程序。此对象提供的属性包含有关调用、函数和执行环境的信息。

上下文属性
  • FunctionName – Lambda 函数的名称。

  • FunctionVersion – 函数的版本

  • InvokedFunctionArn – 用于调用函数的 Amazon Resource Name (ARN)。表明调用者是否指定了版本号或别名。

  • MemoryLimitInMB – 为函数分配的内存量。

  • AwsRequestId – 调用请求的标识符。

  • LogGroupName – 函数的日志组。

  • LogStreamName – 函数实例的日志流。

  • RemainingTime (TimeSpan) – 执行超时前剩余的毫秒数。

  • Identity – (移动应用程序)授权请求的 Amazon Cognito 身份的相关信息。

  • ClientContext – (移动应用程序)客户端应用程序提供给 Lambda 的客户端上下文。

  • Logger 函数的记录器对象

您可以使用 ILambdaContext 对象中的信息输出有关函数调用的信息,以便进行监控。以下代码提供了如何向结构化日志记录框架添加上下文信息的示例。在此示例中,该函数将 AwsRequestId 添加到日志输出中。如果即将到达 Lambda 函数超时,该函数还使用 RemainingTime 属性取消正在进行的任务。

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