使用 Lambda 上下文对象检索 Java 函数信息
当 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.LambdaLogger; import com.amazonaws.services.lambda.runtime.RequestHandler; import java.util.Map; // Handler value: example.Handler public class Handler implements RequestHandler<Map<String,String>, Void>{ @Override public Void handleRequest(Map<String,String> event, Context context) {
LambdaLogger logger = context.getLogger();
logger.log("EVENT TYPE: " + event.getClass()); return null; } }
该函数在返回 null
之前记录传入事件的类类型。
例 日志输出
EVENT TYPE: class java.util.LinkedHashMap
上下文对象的接口在 aws-lambda-java-core
例 src/test/java/example/TestContext.java
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 String getLogStreamName(){ return new String("2020/02/26/[$LATEST]704f8dxmpla04097b9134246b8438f1a"); } public String getFunctionName(){ return new String("my-function"); } public String getFunctionVersion(){ return new String("$LATEST"); } public String getInvokedFunctionArn(){ return new String("arn:aws:lambda:us-east-2:123456789012:function:my-function"); } public CognitoIdentity getIdentity(){ return null; } public ClientContext getClientContext(){ return null; } public int getRemainingTimeInMillis(){ return 300000; } public int getMemoryLimitInMB(){ return 512; } public LambdaLogger getLogger(){ return new TestLogger(); } }
有关日志记录的更多信息,请参阅Java 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-events 库(3.0.0 及更新版本)。这些示例不需要 Amazon 开发工具包作为依赖项。 -
s3-java
– 此 Java 函数可处理来自 Amazon S3 的通知事件,并使用 Java 类库(JCL)从上传的图像文件创建缩略图。 -
自定义序列化
–如何使用 fastJson、Gson、Moshi 和 jackson-jr 等常用库实现自定义序列化的示例。 -
使用 API Gateway 调用 Lambda 函数 – Java 函数,用于扫描包含员工信息的 Amazon DynamoDB 表。然后,该函数使用 Amazon Simple Notification Service 向员工发送短信,祝贺他们工作周年纪念日快乐。此示例使用 API Gateway 调用函数。