AWS Lambda – Java 函数



在本章中,让我们详细了解如何在 Java 中创建简单的 AWS Lambda 函数。

在 Eclipse 中创建 JAR 文件

在开始在 AWS 中创建 Lambda 函数之前,我们需要 Eclipse 的 AWS 工具包支持。有关安装的任何指导,您可以参考本教程中的**环境设置**章节。

完成安装后,请按照此处提供的步骤操作:

步骤 1

打开 Eclipse IDE 并使用**AWS Lambda Java 项目**创建一个新项目。请观察以下屏幕截图以更好地理解:

Select Wizard

步骤 2

选择**下一步**后,它会将您重定向到如下所示的屏幕:

Lambda Java Project

步骤 3

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

Custom Type

步骤 4

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

Export Wizard

步骤 5

现在,如果您单击**下一步**,系统会提示您将文件保存到目标文件夹中,当您单击下一步时会要求您保存。

保存文件后,返回 AWS 控制台并为 Java 创建 AWS Lambda 函数。

AWS Console For Java

步骤 6

现在,使用**上传**按钮上传我们使用创建的**.jar**文件,如下面的屏幕截图所示:

Upload Button

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 {
   @Override
   public String handleRequest(Object input, Context context) {
      context.getLogger().log("Input: " + input);

      // TODO: implement your handler
      return "Hello from Lambda!";
   }
}

观察到,从上面的代码中,处理程序将是**com.amazonaws.lambda.demo.LambdaFunctionHandler**

现在,让我们测试更改并查看输出:

Lambda Function Handler

Lambda Function Handler Output

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 Object

Context 日志

查看日志输出时,您可以观察到以下输出:

Logs for Context

为 Lambda 函数分配的内存为 512MB。分配的时间为 25 秒。如上所示,剩余时间为 24961 毫秒。因此,25000 - 24961 等于 39 毫秒用于 Lambda 函数的执行。请注意,Cloudwatch 组名称和请求 ID 也如上所示。

请注意,我们使用了以下命令在 Java 中打印日志:

System.out.println (“log message”)

这在 CloudWatch 中可用。为此,请转到 AWS 服务,选择**CloudWatch 服务**,然后单击**日志**。

现在,如果您选择 Lambda 函数,它将按日期显示日志,如下所示:

Logs Date Wise

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!";
   }
}

上面显示的代码将为您提供以下输出:

Logging Java

CloudWatch 中的输出将如下所示:

Logging Java Output

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**提供了有关错误的更多详细信息。

上面给出的代码的输出和相应的日志输出将如下面的屏幕截图所示:

Error handling Java

Error handling Output
广告