- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试用 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.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 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/
我目前正在将Java与Play框架一起使用。我已经进行了JUnit测试,并且尝试使用IntelliJ CoverageRunner测量覆盖率。 不幸的是,游戏会生成一些垃圾分类,而IntelliJ会将
有人告诉我,当您在 Oracle 中创建过程时,您应该创建一个包含过程的包。这是真的吗? MS 中的程序与 Oracle 中的程序相同吗? 最佳答案 您不必将过程和函数放在包中,但通常认为这是最佳做法
我有一个 Django 项目,我想使用 manage.py runserver 在端口 80 上运行。在我的项目中,我使用 Wand库,我已经使用 Homebrew 软件安装了 freetype 和
我正在阅读 OCA Java SE 7 学习指南和包。但是,我在 Eclipse 中输入了与书中相同的代码,但出现了此错误。错误是 Exception in thread "main" java.la
我在 Windows 10 的 Powershell 中安装 Az 模块时遇到错误消息。有什么想法吗? 使用的命令: Install-Module Az -AllowClobber 错误消息: Pac
有没有办法为 .net 核心应用程序获取 WinAPI(user32.dll 部分)绑定(bind)(例如包含方法/枚举/结构声明的 nuget 包)。 Or 是 PInvoke 我需要手动调用的每个
我正在使用 expo 构建一个 React Native 项目。我在 Windows 上,所以我启用了 WSL 并从微软商店安装了 ubuntu。接下来我运行 expo build:android。我
我的 C# 应用程序使用我编写的 C++ WinRT 组件来获取使用 Direct X 的系统字体列表。 这是基于这个例子: http://msdn.microsoft.com/en-us/libra
我是一名优秀的程序员,十分优秀!