到目前为止,我一直在为我的所有 AWS 项目编写 Python Lambda 函数。在 Python 中,这很简单,只需导入 boto3 模块并开始编码。当您在 Java 中编写 Lambda 处理程序时,情况会有所不同。让我们探索并了解如何在 Java 中编写简单的 HelloWorld Lambda 处理程序。我已经计划了几个操作方法项目,我将用 Java 编写这些项目。因此,我想在我们深入研究复杂的处理程序之前先做 HelloWorld 帖子。请随时在Twitter上关注我,以获取即将到来的更新。
为了实现处理程序,我们将使用 Maven、Eclipse 和 AWS SDK for Java。以下是版本:
Java:1.8。
Eclipse:版本:2020-06 (4.16.0)。
AWS 开发工具包:2.14.11。
Maven:3.6.3(包含在 eclipse 中)。
首先,在 eclipse 中创建一个新的空 maven 项目。转到 File-> New-> Maven 项目。在新建项目对话框中,选择“创建简单项目”并点击下一步。在下一个屏幕上。添加有关项目的适当信息并点击完成。例如:
现在,您的项目已创建。打开pom.xml并添加以下代码。
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>net.rajanpanchal</groupId>
<artifactId>lambda-java-demo</artifactId>
<version>1</version>
<name>Lambda-Java-Demo</name>
<description>HelloWorld Lambda handler in java</description>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<aws.java.sdk.version>2.14.11</aws.java.sdk.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>bom</artifactId>
<version>${aws.java.sdk.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-lambda-java-core</artifactId>
<version>1.2.0</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.6</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${maven.compiler.source}</source>
<target>${maven.compiler.target}</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.4</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
我们正在标签中设置一些属性,例如 AWS 开发工具包版本和 Java 版本。我们正在添加所需版本的 AWS 开发工具包依赖项和 Lambda 核心依赖项。添加了 Google JSON 依赖项以在 JSON 和 Java 对象之间进行转换,反之亦然。在插件中,我们定义了 maven 编译器插件来编译代码,另一个重要的插件称为 .这个插件有助于创建胖罐又名 Uber 罐子。此 jar 将包含成功运行 lambda 函数所需的所有依赖项。maven-shade-plugin
现在,让我们创建处理程序。
package net.rajanpanchal.handlers;
import java.util.Map;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.LambdaLogger;
import com.amazonaws.services.lambda.runtime.RequestHandler;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
public class HelloWorldHandler implements RequestHandler<Map<String,String>, String>{
Gson gson = new GsonBuilder().setPrettyPrinting().create();
@Override
public String handleRequest(Map<String,String> event, Context context)
{
String response = new String("200 OK");
// log execution details
logger.log("ENVIRONMENT VARIABLES: " + gson.toJson(System.getenv()));
logger.log("CONTEXT: " + gson.toJson(context));
// process event
logger.log("EVENT: " + gson.toJson(event));
logger.log("EVENT TYPE: " + event.getClass().toString());
return response;
}
}
在这里,我们正在实现将接受 of 并输出响应。处理程序没有做太多事情。只是记录一些东西,作为响应,它会发送字符串。在此之后,右键单击项目,转到“运行方式”,然后单击“Maven 构建”。将打开一个配置窗口。在“目标”中输入并点击“运行”。构建应该会成功,并且会在文件夹中创建一个胖罐。RequestHandlerMapStringStringcontextevent200 OKpackagetarget
现在,转到 AWS 控制台,创建一个使用 Java 8 作为运行时的新 Lambda 函数,然后从 Function Code (函数代码) 部分上传此 jar。在“基本设置”中,必须在处理程序文本框中指定。要测试此 Lambda,请创建测试事件并执行测试。package.class::methodName
输出可能如下所示:
START RequestId: c40b4095-27f5-4153-ac37-fd2c103f4476 Version: $LATEST ENVIRONMENT VARIABLES: { "PATH": "/usr/local/bin:/usr/bin/:/bin:/opt/bin", "_AWS_XRAY_DAEMON_ADDRESS": "169.254.79.2", "LAMBDA_TASK_ROOT": "/var/task", "AWS_LAMBDA_FUNCTION_MEMORY_SIZE": "128", "TZ": ":UTC", "AWS_SECRET_ACCESS_KEY": "<keyid>", "AWS_EXECUTION_ENV": "AWS_Lambda_java8", "AWS_DEFAULT_REGION": "us-east-1", "AWS_LAMBDA_LOG_GROUP_NAME": "/aws/lambda/helloworldjava", "_HANDLER": "net.rajanpanchal.handlers.HelloWorldHandler::handleRequest", "LANG": "en_US.UTF-8", "LAMBDA_RUNTIME_DIR": "/var/runtime", "AWS_SESSION_TOKEN": "<session token>", "LD_LIBRARY_PATH": "/lib64:/usr/lib64:/var/runtime:/var/runtime/lib:/var/task:/var/task/lib:/opt/lib", "_X_AMZN_TRACE_ID": "Root\u003d1-5f545c5d-22c8a803badd636859a0f387;Parent\u003d23df427f78bc46e4;Sampled\u003d0", "AWS_SECRET_KEY": "<secret key>", "AWS_REGION": "us-east-1", "AWS_LAMBDA_LOG_STREAM_NAME": "2020/09/06/[$LATEST]57c598b33b164acf8e8151660249e50e", "AWS_XRAY_DAEMON_ADDRESS": "169.254.79.2:2000", "_AWS_XRAY_DAEMON_PORT": "2000", "AWS_XRAY_CONTEXT_MISSING": "LOG_ERROR", "AWS_LAMBDA_FUNCTION_VERSION": "$LATEST", "AWS_ACCESS_KEY": "<access key>", "AWS_LAMBDA_FUNCTION_NAME": "helloworldjava" }CONTEXT: { "memoryLimit": 128, "awsRequestId": "c40b4095-27f5-4153-ac37-fd2c103f4476", "logGroupName": "/aws/lambda/helloworldjava", "logStreamName": "2020/09/06/[$LATEST]57c598b33b164acf8e8151660249e50e", "functionName": "helloworldjava", "functionVersion": "$LATEST", "invokedFunctionArn": "arn:aws:lambda:us-east-1:<AccountId>:function:helloworldjava", "cognitoIdentity": { "identityId": "", "poolId": "" }, "logger": {} }EVENT: { "key1": "value1", "key2": "value2", "key3": "value3" }EVENT TYPE: class java.util.LinkedHashMapEND RequestId: c40b4095-27f5-4153-ac37-fd2c103f4476 REPORT RequestId: c40b4095-27f5-4153-ac37-fd2c103f4476 Duration: 516.04 ms Billed Duration: 600 ms Memory Size: 128 MB Max Memory Used: 79 MB Init Duration: 393.54 ms
在这里,我们完成了第一个 Java 中的 Lambda 处理程序。在下一篇文章中,我们将了解如何使用 AWS 开发工具包实现 API。