- AWS Lambda 教程
- AWS Lambda - 主页
- AWS Lambda - 概述
- AWS Lambda - 环境设置
- AWS Lambda - 简介
- 构建 Lambda 函数
- NODEJS 中的函数
- Java 中的函数
- Python 中的函数
- Go 中的函数
- C# 中的函数
- 配置 Lambda 函数
- 使用 AWS 控制台创建和部署
- 使用 AWS CLI 创建和部署
- 使用无服务器框架创建和部署
- AWS 执行和调用 Lambda 函数
- 删除 Lambda 函数
- 使用 Amazon API Gateway
- 使用 Amazon S3 的 Lambda 函数
- 使用 Amazon DynamoDB 的 Lambda 函数
- 具有预定事件的 Lambda 函数
- 带有 Amazon SNS 的 Lambda 函数
- 带有 CloudTrail 的 Lambda 函数
- 使用 Amazon Kinesis 的 Lambda 函数
- 具有自定义用户应用程序的 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 Project创建一个新项目。观察下面给出的屏幕截图以便更好地理解 -
第2步
一旦您选择“下一步”,它将重定向您到如下所示的屏幕 -
步骤3
现在,为输入类型自定义创建了默认代码。单击“完成”按钮后,项目将被创建,如下所示 -
步骤4
现在,右键单击您的项目并将其导出。从导出向导中选择Java/JAR文件,然后单击下一步。
步骤5
现在,如果您单击“下一步”,系统将提示您将文件保存到目标文件夹中,单击“下一步”时会询问该文件夹。
保存文件后,返回 AWS 控制台并创建适用于 Java 的 AWS Lambda 函数。
步骤6
现在,使用“上传”按钮上传我们创建的.jar文件,如下面的屏幕截图所示 -
Java 的处理程序详细信息
Handler是包名和类名。请参阅以下示例以详细了解处理程序 -
例子
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 中使用的方法 -
先生编号 | 上下文方法和描述 |
---|---|
1 | getMemoryLimitInMB() 这将给出您在创建 lambda 函数时指定的内存限制。 |
2 | 获取函数名() 这将给出 lambda 函数的名称。 |
3 | 获取函数版本() 这将给出 lambda 函数正在运行的版本。 |
4 | getInvokedFunctionArn() 这将给出用于调用该函数的 ARN。 |
5 | 获取AwsRequestId() 这将给出 aws 请求 ID。该 id 是为 lambda 函数创建的,并且是唯一的。如果您遇到任何问题,该 ID 可以与 aws support 一起使用。 |
6 | 获取日志组名称() 这将给出与创建的 aws lambda 函数链接的 aws cloudwatch 组名称。如果 iam 用户没有 cloudwatch 日志记录的权限,则该值将为 null。 |
7 | 获取客户端上下文() 这将提供与 aws mobile sdk 一起使用时有关应用程序和设备的详细信息。它将提供版本名称和代码、客户端 ID、标题、应用程序包名称等详细信息。它可以为空。 |
8 | 获取身份() 这将提供与 aws mobile sdk 一起使用时有关 amazon cognito 身份的详细信息。它可以为空。 |
9 | getRemainingTimeInMillis() 当函数在指定的超时后终止时,这将给出剩余的执行时间(以毫秒为单位)。 |
10 | 获取记录器() 这将给出与上下文对象链接的 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 (“log message”)
CloudWatch 中也提供了相同的功能。为此,请转到 AWS 服务,选择CloudWatchservices并单击Logs。
现在,如果您选择 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 中的输出如下所示 -
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提供了有关错误的更多详细信息。
上面给出的代码的输出和相应的日志输出将如下面给出的屏幕截图所示 -