AWS Lambda
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

Go 中的 AWS Lambda 上下文对象

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

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

全局变量

  • FunctionName – Lambda 函数的名称。

  • FunctionVersion – 函数的版本

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

  • LogGroupName – 函数的日志组。

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

上下文方法

  • Deadline – 返回执行超时的日期(Unix 时间形式,以毫秒为单位)。

上下文属性

  • InvokedFunctionArn – 用于调用函数的 Amazon 资源名称 (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 是用于使用 context 对象捕获的信息的变量,log.Print(lc.Identity.CognitoIdentityPoolID) 将输出该信息 (在本例中为 CognitoIdentityPoolID)。

监控函数的执行时间

以下示例介绍了如何使用 context 对象来监控执行您的 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) }

本页内容: