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

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

Java 中的 Amazon Lambda 上下文对象

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

上下文方法
  • getRemainingTimeInMillis() – 返回执行超时前剩余的毫秒数。

  • getFunctionName() – 返回 Lambda 函数的名称。

  • getFunctionVersion() – 返回函数的版本

  • getInvokedFunctionArn() – 返回用于调用函数的 Amazon 资源名称(ARN)。表明调用者是否指定了版本号或别名。

  • getMemoryLimitInMB() – 返回为函数分配的内存量。

  • getAwsRequestId() – 返回调用请求的标识符。

  • getLogGroupName() – 返回函数的日志组。

  • getLogStreamName() – 返回函数实例的日志流。

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

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

  • getLogger() – 返回函数的记录器对象。

以下示例显示一个使用上下文对象访问 Lambda 记录器的函数。

Handler.java
package example; import com.amazonaws.services.lambda.runtime.Context import com.amazonaws.services.lambda.runtime.RequestHandler import com.amazonaws.services.lambda.runtime.LambdaLogger ... // Handler value: example.Handler public class Handler implements RequestHandler<Map<String,String>, String>{ Gson gson = new GsonBuilder().setPrettyPrinting().create(); @Override public String handleRequest(Map<String,String> event, Context context) { LambdaLogger logger = context.getLogger(); String response = new String("200 OK"); // log execution details logger.log("ENVIRONMENT VARIABLES: " + gson.toJson(System.getenv())); logger.log("CONTEXT: " + gson.toJson(context)); // process event logger.log("EVENT: " + gson.toJson(event)); logger.log("EVENT TYPE: " + event.getClass().toString()); return response; } }

该函数将上下文对象序列化为 JSON 并将其记录在其日志流中。

例 日志输出
START RequestId: 6bc28136-xmpl-4365-b021-0ce6b2e64ab0 Version: $LATEST ... CONTEXT: { "memoryLimit": 512, "awsRequestId": "6bc28136-xmpl-4365-b021-0ce6b2e64ab0", "functionName": "java-console", ... } ... END RequestId: 6bc28136-xmpl-4365-b021-0ce6b2e64ab0 REPORT RequestId: 6bc28136-xmpl-4365-b021-0ce6b2e64ab0 Duration: 198.50 ms Billed Duration: 200 ms Memory Size: 512 MB Max Memory Used: 90 MB Init Duration: 524.75 ms

上下文对象的接口在 aws-lambda-java-core 库中可用。您可以实现此接口来创建用于测试的上下文类。以下示例显示一个上下文类,该类返回大多数属性的虚拟值和一个有效的测试记录器。

src/test/java/example/ .java TestContext
package example; import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.CognitoIdentity; import com.amazonaws.services.lambda.runtime.ClientContext; import com.amazonaws.services.lambda.runtime.LambdaLogger public class TestContext implements Context{ public TestContext() {} public String getAwsRequestId(){ return new String("495b12a8-xmpl-4eca-8168-160484189f99"); } public String getLogGroupName(){ return new String("/aws/lambda/my-function"); } ... public LambdaLogger getLogger(){ return new TestLogger(); } }

有关日志记录的更多信息,请参阅Java 中的 Amazon Lambda 函数日志记录

示例应用程序中的上下文

本指南的 GitHub 存储库包括演示上下文对象用法的示例应用程序。每个示例应用程序都包含用于轻松部署和清理的脚本、一个 Amazon Serverless Application Model (Amazon SAM) 模板和支持资源。

Java 中的 Lambda 应用程序示例
  • java17-examples:这是一种 Java 函数,演示如何使用 Java 记录来表示输入事件数据对象。

  • java-basic – 具有单元测试和变量日志记录配置的最小 Java 函数的集合。

  • java-events – Java 函数的集合,其中包含用于处理来自 Amazon API Gateway、Amazon SQS 和 Amazon Kinesis 等各种服务的事件的框架代码。这些函数使用最新版本的aws-lambda-java-events库(3.0.0 及更高版本)。这些示例不需要 Amazon 开发工具包作为依赖项。

  • s3-java – 此 Java 函数可处理来自 Amazon S3 的通知事件,并使用 Java 类库(JCL)从上传的图像文件创建缩略图。

  • 使用 API Gateway 调用 Lambda 函数 – Java 函数,用于扫描包含员工信息的 Amazon DynamoDB 表。然后,该函数使用 Amazon Simple Notification Service 向员工发送短信,祝贺他们工作周年纪念日快乐。此示例使用 API Gateway 调用函数。

所有示例应用程序都有一个用于单元测试的测试上下文类。java-basic 应用程序显示您如何使用上下文对象获取记录器。它使用 SLF4J 和 Log4J 2 提供适用于本地单元测试的记录器。