AWS Lambda – Java 中的函数


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

在 Eclipse 中创建 JAR 文件

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

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

步骤1

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

选择向导

第2步

一旦您选择“下一步”,它将重定向您到如下所示的屏幕 -

Lambda Java 项目

步骤3

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

定制类型

步骤4

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

导出向导

步骤5

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

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

适用于 Java 的 AWS 控制台

步骤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 {
   @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 函数处理程序

Lambda 函数处理程序输出

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

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

记录Java

CloudWatch 中的输出如下所示 -

记录 Java 输出

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

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

Java 错误处理

错误处理输出