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

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

Go 中的 Amazon Lambda上下文对象

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

Lambda 上下文库提供以下全局变量、方法和属性。

全局变量
  • FunctionName – Lambda 函数的名称。

  • FunctionVersion – 函数的版本

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

  • LogGroupName – 函数的日志组。

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

上下文方法
  • Deadline – 返回执行超时的日期(Unix 时间格式,以毫秒为单位)。

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

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

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

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

访问调用上下文信息

Lambda 函数可以访问有关其环境和调用请求的元数据。这可以在程序包上下文出访问。如果您的处理程序将 context.Context 作为参数包含在内,则 Lambda 会将有关您的函数的信息插入上下文的 Value 属性。请注意,您需要导入 lambdacontext 库才能访问 context.Context 对象的内容。

package main import ( "context" "log" "github.com/aws/aws-lambda-go/lambda" "github.com/aws/aws-lambda-go/lambdacontext" ) func CognitoHandler(ctx context.Context) { lc, _ := lambdacontext.FromContext(ctx) log.Print(lc.Identity.CognitoIdentityPoolID) } func main() { lambda.Start(CognitoHandler) }

在上面的示例中,lc是用于使用上下文对象捕获的信息并log.Print(lc.Identity.CognitoIdentityPoolID)打印该信息的变量,在本例中为 CognitoIdentityPool ID。

以下示例介绍了如何使用上下文对象来监控您的 Lambda 函数完成任务所需的时间。这让您能够分析性能期望并相应地调整您的函数代码 (如果需要)。

package main import ( "context" "log" "time" "github.com/aws/aws-lambda-go/lambda" ) func LongRunningHandler(ctx context.Context) (string, error) { deadline, _ := ctx.Deadline() deadline = deadline.Add(-100 * time.Millisecond) timeoutChannel := time.After(time.Until(deadline)) for { select { case <- timeoutChannel: return "Finished before timing out.", nil default: log.Print("hello!") time.Sleep(50 * time.Millisecond) } } } func main() { lambda.Start(LongRunningHandler) }