I am currently trying to get into coding against AWS and I ran into an issue when trying to subscribe a user to a SNS topic.
So what I have is a lambda expression that is supposed to take in an email and send that on to SNS. I can call the expression and that is working fine, but when it tries to create the AmazonSNSClient
I get a java.lang.NoClassDefFoundError: com/amazonaws/services/sns/AmazonSNSClient
The code is quite simple:
public String handleRequest(SubscriptionRequest request, Context context) {
LambdaLogger logger = context.getLogger();
logger.log("Subscribing to list with email:" + request.email);
logger.log("Creating SNS client");
AmazonSNSClient snsClient = new AmazonSNSClient(new AnonymousAWSCredentials());
snsClient.setRegion(Region.getRegion(Regions.EU_WEST_1));
//subscribe to an SNS topic
SubscribeRequest subRequest = new SubscribeRequest(TOPIC_ARN, "email", request.email);
logger.log("Sending request");
snsClient.subscribe(subRequest);
return "OK";
}
There are probably tons of other errors in it as well, but that is what I got so far, with the following dependencies
<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.1.0</version>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-sns</artifactId>
<version>1.11.328</version>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-core</artifactId>
<version>1.11.328</version>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk</artifactId>
<version>1.11.328</version>
</dependency>
</dependencies>
I think that I have added more dependencies than I really need, but since I don't know where the issue is, I just tried adding anything that made some sort of sense.
So question is:
What am I missing, and what is causing the NoClassDefFoundError
?
edit
Since the constructor for the AmazonSNSClient
is deprecated I changed the line to
logger.log("Creating SNS client");
AmazonSNS snsClient = AmazonSNSClientBuilder.defaultClient();
But I still get errors with with it not finding the AmazonSNSClientBuilder
.
It is almost as if it is not adding sns dependency to the jar file, which would be odd since the lambda dependency seems to be working fine