Материал Java Lambda немного сбивает с толку.Существует одна библиотека, в которой вам нужно написать Lambda, и необязательную библиотеку для обработки событий на основе Amazon.
Эти библиотеки несколько документированы на этой странице .
Для использованиябиблиотеку aws-lambda-java-core в maven, которую вы захотите использовать:
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-lambda-java-core</artifactId>
<version>1.2.0</version>
</dependency>
в качестве зависимости от Maven.
Для использования aws-lambda-java-events (библиотека событий Lambda) использует зависимость
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-lambda-java-events</artifactId>
<version>2.2.5</version>
</dependency>
в вашем pom.xml
.
В вашем примере приходят com.amazonaws.services.lambda.runtime.Context
и com.amazonaws.services.lambda.runtime.RequestHandler
из библиотеки aws-lambda-java-core
. Ваше сообщение выглядит так, как будто у вас проблема с копированием / вставкой при первом импорте .
Но com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent
и com.amazonaws.services.lambda.runtime.events.APIGatewayProxyResponseEvent
(опять же, ваше сообщение содержит опечатку) происходят из aws-lambda-java-events
.Эта библиотека упрощает работу с событиями AWS.Ваш код выглядит так, как будто он хочет обрабатывать события API Gateway Proxy .
Однако имейте в виду, что, потянув библиотеку aws-lambda-java-events
, вы получаете огромное количество библиотек AWS.Например, даже если ваша Lambda хочет только события API Gateway, вы все равно получите зависимость от библиотеки S3, поскольку библиотека событий также обрабатывает события S3.Таким образом, ваш пакет развертывания Lambda будет значительно больше, чем если бы вы его не включили.
В качестве альтернативы библиотеке событий вы можете использовать что-то вроде JsonPath , чтобы извлечь то, что вы хотитесобытия.Ваша лямбда будет выглядеть примерно так:
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestStreamHandler;
import com.jayway.jsonpath.JsonPath;
public class YourLambdaHandler implements RequestStreamHandler {
public void handleRequest(InputStream inputStream, OutputStream outputStream, Context context) {
String accountId = JsonPath.read(inputStream, "$.requestContext.accountId");
Что будет читать accountId
из события API Gateway.
Нет никаких сомнений в том, что этот способ немного сложнее, но если вы вытаскиваете из соревнования только несколько предметов, то это может быть более легкий способ.
РЕДАКТИРОВАТЬ
Похоже, у вас есть проблема сборки / IDE.Итак, наименьшее количество кода, которое я могу показать, это сначала работающий pom.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.yourpackage.handler</groupId>
<artifactId>apigateway</artifactId>
<version>1.0</version>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-lambda-java-core</artifactId>
<version>1.2.0</version>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-lambda-java-events</artifactId>
<version>2.2.5</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.1</version>
<configuration>
<createDependencyReducedPom>false</createDependencyReducedPom>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
и обработчик лямбды:
package com.yourpackage.handler;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyResponseEvent;
@SuppressWarnings("unused")
public class DemoHandler implements RequestHandler<APIGatewayProxyResponseEvent, String> {
public String handleRequest(APIGatewayProxyResponseEvent apiGatewayProxyResponseEvent, Context context) {
return "hello";
}
}
Можете ли вы начать с новой среды и попробоватьэто из?