I'm strugling trying to make work my lambda.
I'm getting:
Caused by: java.lang.ClassNotFoundException: com.amazonaws.services.lambda.runtime.serialization.events.LambdaEventSerializers
I'm using spring-cloud-function-aws-adapter and other related dependencies:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-function-adapter-aws</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-function-web</artifactId>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-lambda-java-events</artifactId>
<version>${aws-lambda-events.version}</version>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-lambda-java-core</artifactId>
<version>${aws-lambda-java-core.version}</version>
</dependency>
My function is:
@Component
@RequiredArgsConstructor
@Slf4j
public class PushedDocumentLambdaConsumer implements Consumer<S3Event> {
@Override
public void accept(Message<SQSEvent> message) {
log.info(message.toString());
}
}
Here I've several questions. I've an S3 that is configured in order to send S3 object created events to and SQS queue.
I don't know if I need to write a Consumer<S3Event> or Consumer<S3EventNotification> or Consumer<Message<S3Event>>...
The other issue, is that when I'm trying to invoke my lambda using sls framework, I'm getting message above: LambdaEventSerializers is not found...
I write it down some logs:
2024-02-27T16:08:54.793+01:00 INFO 388005 --- [ main] o.s.c.f.adapter.aws.AWSLambdaUtils : Received: {"Records":[{"eventVersion":"2.0","eventSource":"aws:s3","awsRegion":"us-east-1","eventTime":"1970-01-01T00:00:00.123Z","eventName":"ObjectCreated:Put","userIdentity":{"principalId":"EXAMPLE"},"requestParameters":{"sourceIPAddress":"127.0.0.1"},"responseElements":{"x-amz-request-id":"C3D13FE58DE4C810","x-amz-id-2":"FMyUVURIY8/IgAtTv8xRjskZQpcIZ9KG4V5Wp6S7S/JRWeUWerMUE5JgHvANOjpD"},"s3":{"s3SchemaVersion":"1.0","configurationId":"testConfigRule","bucket":{"name":"sourcebucket","ownerIdentity":{"principalId":"EXAMPLE"},"arn":"arn:aws:s3:::mybucket"},"object":{"key":"Happy%20Face.jpg","size":1024,"versionId":"version","eTag":"d41d8cd98f00b204e9800998ecf8427e","sequencer":"Happy Sequencer"}}}]}
2024-02-27T16:08:54.963+01:00 DEBUG 388005 --- [ main] c.f.c.c.BeanFactoryAwareFunctionRegistry : Invoking function pushedDocumentLambdaConsumer<org.springframework.messaging.Message<com.amazonaws.services.lambda.runtime.events.SQSEvent>, null>
java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at com.serverless.InvokeBridge.invoke(InvokeBridge.java:86)
at com.serverless.InvokeBridge.<init>(InvokeBridge.java:38)
at com.serverless.InvokeBridge.main(InvokeBridge.java:137)
Caused by: java.lang.NoClassDefFoundError: com/amazonaws/services/lambda/runtime/serialization/events/LambdaEventSerializers
at org.springframework.cloud.function.adapter.aws.AWSTypesMessageConverter.convertFromInternal(AWSTypesMessageConverter.java:81)
at org.springframework.messaging.converter.AbstractMessageConverter.fromMessage(AbstractMessageConverter.java:183)
at org.springframework.cloud.function.context.config.SmartCompositeMessageConverter.fromMessage(SmartCompositeMessageConverter.java:115)
at org.springframework.cloud.function.context.catalog.SimpleFunctionRegistry$FunctionInvocationWrapper.convertInputMessageIfNecessary(SimpleFunctionRegistry.java:1356)
at org.springframework.cloud.function.context.catalog.SimpleFunctionRegistry$FunctionInvocationWrapper.convertInputIfNecessary(SimpleFunctionRegistry.java:1120)
at org.springframework.cloud.function.context.catalog.SimpleFunctionRegistry$FunctionInvocationWrapper.doApply(SimpleFunctionRegistry.java:728)
at org.springframework.cloud.function.context.catalog.SimpleFunctionRegistry$FunctionInvocationWrapper.apply(SimpleFunctionRegistry.java:580)
at org.springframework.cloud.function.adapter.aws.FunctionInvoker.handleRequest(FunctionInvoker.java:91)
... 7 more
Caused by: java.lang.ClassNotFoundException: com.amazonaws.services.lambda.runtime.serialization.events.LambdaEventSerializers
at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:445)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:592)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525)
... 15 more
Any ideas?