spring cloud function aws: S3Event or S3EventNotification

16 Views Asked by At

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?

0

There are 0 best solutions below