- AWS Lambda 教程
- AWS Lambda - 首页
- AWS Lambda - 概述
- AWS Lambda - 环境设置
- AWS Lambda - 简介
- 构建 Lambda 函数
- NODEJS 函数
- Java 函数
- Python 函数
- Go 函数
- C# 函数
- 配置 Lambda 函数
- 使用 AWS 控制台创建和部署
- 使用 AWS CLI 创建和部署
- 使用 Serverless Framework 创建和部署
- AWS 执行和调用 Lambda 函数
- 删除 Lambda 函数
- 使用 Amazon API Gateway
- Lambda 函数与 Amazon S3
- Lambda 函数与 Amazon DynamoDB
- Lambda 函数与计划事件
- Lambda 函数与 Amazon SNS
- Lambda 函数与 CloudTrail
- Lambda 函数与 Amazon Kinesis
- Lambda 函数与自定义用户应用程序
- AWS Lambda@Edge 与 CloudFront
- 使用 Cloudwatch 监控和故障排除
- AWS Lambda - 其他示例
- AWS Lambda 有用资源
- AWS Lambda - 快速指南
- AWS Lambda - 有用资源
- AWS Lambda - 讨论
AWS Lambda – Java 函数
在本章中,让我们详细了解如何在 Java 中创建简单的 AWS Lambda 函数。
在 Eclipse 中创建 JAR 文件
在开始在 AWS 中创建 Lambda 函数之前,我们需要 Eclipse 的 AWS 工具包支持。有关安装的任何指导,您可以参考本教程中的**环境设置**章节。
完成安装后,请按照此处提供的步骤操作:
步骤 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 中的 Context 对象
使用 context 完成与 AWS Lambda 执行的交互。它提供了以下方法在 Java 中使用:
序号 | Context 方法和说明 |
---|---|
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 移动 sdk 一起使用时,这将提供有关应用程序和设备的详细信息。它将提供版本名称和代码、客户端 ID、标题、应用程序包名称等详细信息。它可能为 null。 |
8 | getIdentity() 当与 aws 移动 sdk 一起使用时,这将提供有关 amazon cognito 身份的详细信息。它可能为 null。 |
9 | getRemainingTimeInMillis() 在指定超时后函数终止时,这将提供剩余的执行时间(以毫秒为单位)。 |
10 | getLogger() 这将提供与 context 对象关联的 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!"; } }
运行上面给出的代码后,您可以找到如下所示的输出:
Context 日志
查看日志输出时,您可以观察到以下输出:
为 Lambda 函数分配的内存为 512MB。分配的时间为 25 秒。如上所示,剩余时间为 24961 毫秒。因此,25000 - 24961 等于 39 毫秒用于 Lambda 函数的执行。请注意,Cloudwatch 组名称和请求 ID 也如上所示。
请注意,我们使用了以下命令在 Java 中打印日志:
System.out.println (“log message”)
这在 CloudWatch 中可用。为此,请转到 AWS 服务,选择**CloudWatch 服务**,然后单击**日志**。
现在,如果您选择 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()+"\n"); logger.log("Memory Allocated: " + context.getMemoryLimitInMB()+"\n"); logger.log("Time remaining in milliseconds: " + context.getRemainingTimeInMillis()+"\n"); logger.log("Cloudwatch group name " + context.getLogGroupName()+"\n"); logger.log("AWS Lambda Request Id " + context.getAwsRequestId()+"\n"); // TODO: implement your handler return "Hello from Lambda!"; } }
上面显示的代码将为您提供以下输出:
CloudWatch 中的输出将如下所示:
Lambda 函数的 Java 错误处理
本节将解释如何在 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 为**来自 AWS Lambda 的错误**。此外,**ErrorType**和**stackTrace**提供了有关错误的更多详细信息。
上面给出的代码的输出和相应的日志输出将如下面的屏幕截图所示: