AWS Lambda – Java 中的函数

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

在 Eclipse 中创建 JAR 文件

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

完成安装后,请按照此处给出的步骤 −

步骤 1

打开 Eclipse IDE 并使用 AWS Lambda Java 项目 创建一个新项目。观察下面给出的屏幕截图以便更好地理解 −

选择向导

步骤 2

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

Lambda Java 项目

步骤 3

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

自定义类型

步骤 4

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

导出向导

步骤 5

现在,如果您单击下一步,系统将提示您将文件保存在目标文件夹中,单击下一步时会询问该文件夹。

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

适用于 Java 的 AWS 控制台

步骤 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 {
   @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 中的上下文对象

使用上下文与 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!";
   }
}

运行上述代码后,您可以看到如下所示的输出 −

Context Object

上下文日志

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

上下文日志

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

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

System.out.println("日志消息")

CloudWatch 中也有同样的功能。为此,转到 AWS 服务,选择 CloudWatchservices 并单击 日志

现在,如果您选择 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()+"
");
      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!";
   }
}

上述代码将为您提供以下输出 −

Logging Java

CloudWatch 中的输出将如下所示 −

Logging Java Output

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

上述代码的输出和相应的日志输出将如以下屏幕截图所示 −

Error processing Java Error processing Output