AWS Lambda – Java 中的函数
在本章中,让我们详细了解如何在 Java 中创建一个简单的 AWS Lambda 函数。
在 Eclipse 中创建 JAR 文件
在继续在 AWS 中创建 lambda 函数之前,我们需要 AWS 工具包对 Eclipse 的支持。有关安装的任何指导,您可以参考本教程中的环境设置章节。
完成安装后,请按照此处给出的步骤 −
步骤 1
打开 Eclipse IDE 并使用 AWS Lambda Java 项目 创建一个新项目。观察下面给出的屏幕截图以便更好地理解 −

步骤 2
选择 下一步 后,它会将您重定向到下面显示的屏幕 −

步骤 3
现在,为输入类型 自定义 创建了一个默认代码。单击完成按钮后,项目将创建,如下所示 −

步骤 4
现在,右键单击您的项目并将其导出。从导出向导中选择Java / JAR文件,然后单击下一步。

步骤 5
现在,如果您单击下一步,系统将提示您将文件保存在目标文件夹中,单击下一步时会询问该文件夹。
保存文件后,返回 AWS 控制台并为 Java 创建 AWS Lambda 函数。

步骤 6
现在,使用上传按钮上传我们创建的.jar文件,如给出的屏幕截图所示以下 −

Java 的处理程序详细信息
处理程序 是 包名称 和 类名称。查看以下示例以详细了解处理程序 −
示例
package com.amazonaws.lambda.demo; import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; public class LambdaFunctionHandler implements RequestHandler
从上面的代码可以看出,处理程序将是 com.amazonaws.lambda.demo.LambdaFunctionHandler
现在,让我们测试更改并查看输出 −


Java 中的上下文对象
使用上下文与 AWS Lambda 执行进行交互。它提供了以下在 Java 内部使用的方法 −
Sr.No | 上下文方法 &描述 |
---|---|
1 | getMemoryLimitInMB() 这将提供您在创建 lambda 函数时指定的内存限制。 |
2 | getFunctionName() 这将提供 lambda 函数的名称。 |
3 | getFunctionVersion() 这将提供正在运行的 lambda 函数的版本。 |
4 | getInvokedFunctionArn() 这将提供用于调用该函数的 ARN。 |
5 | getAwsRequestId() 这将提供 aws 请求 ID。此 ID 是为 lambda 函数创建的,并且是唯一的。如果您遇到任何问题,可以将此 ID 与 aws 支持一起使用。 |
6 | getLogGroupName() 这将提供与创建的 aws lambda 函数关联的 aws cloudwatch 组名称。如果 iam 用户没有权限进行 cloudwatch 日志记录,则它将为 null。 |
7 | getClientContext() 这将在与 aws mobile sdk 一起使用时提供有关应用程序和设备的详细信息。它将提供版本名称和代码、客户端 ID、标题、应用程序包名称等详细信息。它可以为 null。 |
8 | getIdentity() 这将在与 aws mobile sdk 一起使用时提供有关 amazon cognito 身份的详细信息。它可以为空。 |
9 | getRemainingTimeInMillis() 当函数在指定的超时后终止时,这将给出剩余的执行时间(以毫秒为单位)。 |
10 | getLogger() 这将给出与上下文对象链接的 lambda 记录器。 |
现在,让我们更新上面给出的代码,并观察上面列出的某些方法的输出。观察下面给出的示例代码以获得更好的理解 −
package com.amazonaws.lambda.demo; import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; public class LambdaFunctionHandler implements RequestHandler<Object, String> { @Override public String handleRequest(Object input, Context context) { context.getLogger().log("Input: " + input); System.out.println("AWS Lambda function name: " + context.getFunctionName()); System.out.println("Memory Allocated: " + context.getMemoryLimitInMB()); System.out.println("Time remaining in milliseconds: " + context.getRemainingTimeInMillis()); System.out.println("Cloudwatch group name " + context.getLogGroupName()); System.out.println("AWS Lambda Request Id " + context.getAwsRequestId()); // TODO: implement your handler return "Hello from Lambda!"; } }
运行上述代码后,您可以看到如下所示的输出 −

上下文日志
查看日志输出时,您可以看到以下输出 −

为 Lambda 函数分配的内存为 512MB。分配的时间为 25 秒。如上显示的剩余时间为 24961,以毫秒为单位。因此,25000 - 24961 等于 39 毫秒用于执行 Lambda 函数。请注意,Cloudwatch 组名称和请求 ID 也显示如上所示。
请注意,我们使用以下命令在 Java 中打印日志 −
System.out.println("日志消息")
CloudWatch 中也有同样的功能。为此,转到 AWS 服务,选择 CloudWatchservices 并单击 日志。
现在,如果您选择 Lambda 函数,它将按日期显示日志,如下所示 −

Java 中的日志记录
您还可以在 Java 中使用 Lambdalogger 来记录数据。观察以下显示相同 − 的示例
示例
package com.amazonaws.lambda.demo; import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; import com.amazonaws.services.lambda.runtime.LambdaLogger; public class LambdaFunctionHandler implements RequestHandler<Object, String> { @Override public String handleRequest(Object input, Context context) { LambdaLogger logger = context.getLogger(); logger.log("Input: " + input); logger.log("AWS Lambda function name: " + context.getFunctionName()+" "); logger.log("Memory Allocated: " + context.getMemoryLimitInMB()+" "); logger.log("Time remaining in milliseconds: " + context.getRemainingTimeInMillis()+" "); logger.log("Cloudwatch group name " + context.getLogGroupName()+" "); logger.log("AWS Lambda Request Id " + context.getAwsRequestId()+" "); // TODO: implement your handler return "Hello from Lambda!"; } }
上述代码将为您提供以下输出 −

CloudWatch 中的输出将如下所示 −

Java 中 Lambda 函数的错误处理
本节将解释如何在 Java 中处理 Lambda 函数的错误。观察以下代码,它显示了相同的 −
package com.amazonaws.lambda.errorhandling; import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; public class LambdaFunctionHandler implements RequestHandler<Object, String> { @Override public String handleRequest(Object input, Context context) { throw new RuntimeException("Error from aws lambda"); } }
请注意,错误详细信息以 json 格式显示,其中 errorMessage 为 Error from AWS Lambda。此外,ErrorType 和 stackTrace 提供了有关错误的更多详细信息。
上述代码的输出和相应的日志输出将如以下屏幕截图所示 −

