gpt4 book ai didi

java - Java 中的 AWS Lambda 处理程序,程序包不可用

转载 作者:行者123 更新时间:2023-11-30 01:56:22 25 4
gpt4 key购买 nike

我正在尝试用 Java 实现 AWS Lambda 处理程序。我在 pom.xml 中使用此依赖项:

<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-lambda</artifactId>
<version>1.11.487</version>
</dependency>

在我的 Java 代码中:

import com.amazonaws.services.lambda.runtimeContext;
import com.amazonaws.services.lambda.runtime.RequestHandler;
import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent;
import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyResponseEven;

IDE 提示没有 com.amazonaws.services.lambda 包(和子包)。尝试重新导入项目 - 没有区别。

完整的类名取自此处的 AWS 文档: https://docs.aws.amazon.com/lambda/latest/dg/java-programming-model-handler-types.html

我怀疑我使用了一些错误的依赖项。这里实际需要什么 Maven 依赖项?

最佳答案

Java Lambda 的东西有点令人困惑。您需要编写一个 Lambda 库和一个可选库来处理基于 Amazon 的事件。

这些库在 this page 上有一些记录。 .

要在 Maven 中使用 aws-lambda-java-core 库,您需要使用:

<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.Contextcom.amazonaws.services.lambda.runtime.RequestHandler 来自aws -lambda-java-core 库。 您的帖子在首次导入时似乎存在复制/粘贴问题

但是com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEventcom.amazonaws.services.lambda.runtime.events.APIGatewayProxyResponseEvent(同样,您的帖子其中有一个拼写错误)来自 aws-lambda-java-events。该库简化了 AWS 事件的处理。您的代码看起来想要处理 API Gateway Proxy events .

但请注意,通过拉入 aws-lambda-java-events 库,您将拉入大量 AWS 库。例如,即使您的 Lambda 仅需要 API 网关事件,您仍然需要引入对 S3 库的依赖项,因为事件库也处理 S3 事件。因此,您的 Lambda 部署包将比不拉入时大得多。

作为事件库的替代方案,您可以使用类似 JsonPath 的东西从事件中获取你想要的东西。你的 Lambda 应该是这样的:

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");

将从 API Gateway 事件中读取 accountId

毫无疑问,这种方式需要更多工作,但如果您只从 Activity 中取出一些项目,那么这可能是一种更轻量级的方式。

编辑

您似乎遇到了构建/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>

还有一个 Lambda 处理程序:

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

你能从一个新环境开始尝试一下吗?

关于java - Java 中的 AWS Lambda 处理程序,程序包不可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54372687/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com