java - AWS Lambda ClassNotFoundException
问题描述
在 dynamoDB 更新时调用 lambda 函数时遇到问题。我检查了 AWS Lambda: ClassNotFoundException 和 AWS Lambda NoClassDefFoundError 但没有成功。
我正在编写这个 lambda 函数,以便在 dynamo 有任何更新时调用。我按照本教程进行操作。 https://docs.aws.amazon.com/lambda/latest/dg/with-dynamodb-create-package.html
所有事情都已成功完成,但问题是当我更新 dynamodb 并检查 AWS Cloud watch 的日志时出现异常。
Error loading method handleRequest on class com.amazonaws.lambda.demo.LambdaFunctionHandler: java.lang.NoClassDefFoundError
java.lang.NoClassDefFoundError: com/amazonaws/services/lambda/runtime/events/DynamodbEvent
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
at java.lang.Class.privateGetPublicMethods(Class.java:2902)
at java.lang.Class.getMethods(Class.java:1615)
Caused by: java.lang.ClassNotFoundException: com.amazonaws.services.lambda.runtime.events.DynamodbEvent
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 4 more
我的java代码是。
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.events.DynamodbEvent;
import com.amazonaws.services.lambda.runtime.events.DynamodbEvent.DynamodbStreamRecord;
public class LambdaFunctionHandler implements RequestHandler<DynamodbEvent, String> {
@Override
public String handleRequest(DynamodbEvent ddbEvent, Context context) {
// TODO Auto-generated method stub
for (DynamodbStreamRecord record : ddbEvent.getRecords()){
System.out.println(record.getEventID());
System.out.println(record.getEventName());
System.out.println(record.getDynamodb().toString());
}
return "Successfully processed " + ddbEvent.getRecords().size() + " records.";
}
}
我的 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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.amazonaws.lambda</groupId>
<artifactId>demo</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
<forceJavacCompilerUse>true</forceJavacCompilerUse>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<createDependencyReducedPom>false</createDependencyReducedPom>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-bom</artifactId>
<version>1.11.321</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-lambda-java-events</artifactId>
<version>1.3.0</version>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-lambda-java-core</artifactId>
<version>1.1.0</version>
</dependency>
</dependencies>
</project>
我将我的处理程序命名为com.amazonaws.lambda.demo.LambdaFunctionHandler::handleRequest
我检查了所有的东西都很好,但它仍然给我com.amazonaws.services.lambda.runtime.events.DynamodbEvent
这个类的错误是在 aws sdk 中。
解决方案
推荐阅读
- python-3.x - 放大图像的上边距,保持背景颜色相同 python
- robolectric - UiDevice.getUiAutomation(instrumentation) 在 Robolectric 测试中返回导致 NPE 的 null
- javascript - 如何用另一个字符串数组过滤嵌套数组?
- python - PHP/HTML 中的 shell 脚本
- javascript - 在sql插入查询中转义字符串引号
- c# - 将测试项目添加到解决方案找不到测试,一旦我添加项目引用并编写基本测试方法就很困惑
- javascript - 轮询 API,直到响应对象中的路径成功 | 失败 - 打字稿
- python - 如何在熊猫中连接两个或多个具有不同列名的数据框
- angular - 如何重新加载角度构造函数
- ceph - ceph active+undersized warning