Class not found: org.springframework.cloud.function.adapter.aws.FunctionInvoker

Viewed 59

I am using Spring cloud function version 3.2.6. I have uploaded the zip file of jar in S3 bucket and then tried to upload to AWS Lambda using S3 URI. After successfull update of jar I am getting below error.

{
  "errorMessage": "Class not found: 
  org.springframework.cloud.function.adapter.aws.FunctionInvoker",
  "errorType": "java.lang.ClassNotFoundException"
}

START RequestId: 7b189d8c-c597-4335-b598-76b9b3a1f639 Version: $LATEST
Class not found: org.springframework.cloud.function.adapter.aws.FunctionInvoker: 
java.lang.ClassNotFoundException
java.lang.ClassNotFoundException: 
org.springframework.cloud.function.adapter.aws.FunctionInvoker. Current classpath: 
file:/var/task/

Below is my 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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
 <modelVersion>4.0.0</modelVersion>
 <parent>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-parent</artifactId>
     <version>2.7.1</version>
     <relativePath/> <!-- lookup parent from repository -->
 </parent>
 <groupId>com.acko</groupId>
 <artifactId>phoenix</artifactId>
 <version>0.0.1-SNAPSHOT</version>
 <packaging>pom</packaging>
 <name>phoenix</name>
 <description>phoenix</description>
 <properties>
     <java.version>14</java.version>
     <wrapper.version>1.0.27.RELEASE</wrapper.version>
     <aws-lambda-events.version>3.11.0</aws-lambda-events.version>
     <spring-cloud-function.version>3.2.6</spring-cloud-function.version>
 </properties>
 <dependencies>
     <dependency>
         <groupId>org.springframework.cloud</groupId>
         <artifactId>spring-cloud-function-adapter-aws</artifactId>
         <version>3.2.6</version>
     </dependency>
     <dependency>
         <groupId>com.amazonaws</groupId>
         <artifactId>aws-lambda-java-events</artifactId>
         <version>${aws-lambda-events.version}</version>
         <scope>provided</scope>
     </dependency>

     <dependency>
         <groupId>com.amazonaws</groupId>
         <artifactId>aws-lambda-java-core</artifactId>
         <version>1.2.1</version>
         <scope>provided</scope>
     </dependency>
 </dependencies>

 <dependencyManagement>
     <dependencies>
         <dependency>
             <groupId>org.springframework.cloud</groupId>
             <artifactId>spring-cloud-function-dependencies</artifactId>
             <version>${spring-cloud-function.version}</version>
             <type>pom</type>
             <scope>import</scope>
         </dependency>
     </dependencies>
 </dependencyManagement>

 <build>
     <plugins>
         <plugin>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-maven-plugin</artifactId>
             <dependencies>
                 <dependency>
                     <groupId>org.springframework.boot.experimental</groupId>
                     <artifactId>spring-boot-thin-layout</artifactId>
                     <version>${wrapper.version}</version>
                 </dependency>
             </dependencies>
         </plugin>
         <plugin>
             <groupId>org.apache.maven.plugins</groupId>
             <artifactId>maven-deploy-plugin</artifactId>
             <configuration>
                 <skip>true</skip>
             </configuration>
         </plugin>
         <plugin>
             <groupId>org.apache.maven.plugins</groupId>
             <artifactId>maven-shade-plugin</artifactId>
             <dependencies>
                 <dependency>
                     <groupId>org.springframework.boot</groupId>
                     <artifactId>spring-boot-maven-plugin</artifactId>
                     <version>2.7.1</version>
                 </dependency>
             </dependencies>
             <configuration>
                 <createDependencyReducedPom>false</createDependencyReducedPom>
                 <shadedArtifactAttached>true</shadedArtifactAttached>
                 <shadedClassifierName>aws</shadedClassifierName>
                 <transformers>
                     <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                         <resource>META-INF/spring.handlers</resource>
                     </transformer>
                     <transformer
                             implementation="org.springframework.boot.maven.PropertiesMergingResourceTransformer">
                         <resource>META-INF/spring.factories</resource>
                     </transformer>
                     <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                         <resource>META-INF/spring.schemas</resource>
                     </transformer>
                 </transformers>
             </configuration>
         </plugin>
     </plugins>
 </build>
 <modules>
     <module>alpha</module>
 </modules>
 </project>

I am using latest version of spring cloud function and trying to run it in AWS lambda. Some how FunctionInvoker class is not present. Please do let me know what am I missing.

2 Answers

The issue is not related to packaging. It is a little weird as when zar are pushed to S3 and S3 reference is given to the lambda it does not invoke. But if you directly add the jar to lambda then it invokes and lambda runs like charm.

Related