Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Guide for AWS Lambda HTTP yields: io.quarkus.amazon.lambda.runtime.QuarkusStreamHandler ClassNotFoundException in SAM #6701

Closed
bluemonk3y opened this issue Jan 21, 2020 · 13 comments
Labels
area/amazon-lambda kind/bug Something isn't working
Milestone

Comments

@bluemonk3y
Copy link

Describe the bug
When following the guide:

  1. https://quarkus.io/guides/amazon-lambda-http I build the GreetingResource etc.
  2. Run > mvn clean install
  3. Start SAM using: sam local start-api --template sam.jvm.yaml
  4. Navigating the browsers to: http://127.0.0.1:3000/hello
  5. Shows class not found on the console:
Fetching lambci/lambda:java8 Docker container image......
Mounting /private/var/folders/2x/mp3q5n8d2136yqf5bl2r571m0000gn/T/tmpt84krkw6 as /var/task:ro,delegated inside runtime container
START RequestId: 2d7e86bb-fd7b-1012-35e5-a150c771aa47 Version: $LATEST
java.lang.ClassNotFoundException: io.quarkus.amazon.lambda.runtime.QuarkusStreamHandler
	at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)

Expected behavior
Should return the result of the get request to the browser (as shown in the guide)

Actual behavior
browser returns error message:
{"message":"Internal server error"}

To Reproduce
Steps to reproduce the behavior:

  1. Follow the guide
  2. run SAM
  3. point browser to http://127.0.0.1:3000/hello

Configuration

# Add your application.properties here, if applicable.

Screenshots
(If applicable, add screenshots to help explain your problem.)

Environment (please complete the following information):

  • Output of uname -a or ver:
  • Output of java -version:
  • GraalVM version (if different from Java):
  • Quarkus version or git rev:

Additional context

  • Running on OSX ElCapitan (10.11.6),

Java version "1.8.0_231"
Java(TM) SE Runtime Environment (build 1.8.0_231-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.231-b11, mixed mode)

  • Latest Docker-toolbox
@bluemonk3y bluemonk3y added the kind/bug Something isn't working label Jan 21, 2020
@bluemonk3y bluemonk3y changed the title Guide for AWS Lambda HTTP yields: io.quarkus.amazon.lambda.runtime.QuarkusStreamHandler class not found in SAM Guide for AWS Lambda HTTP yields: io.quarkus.amazon.lambda.runtime.QuarkusStreamHandler ClassNotFoundException in SAM Jan 21, 2020
@geoand
Copy link
Contributor

geoand commented Jan 21, 2020

cc @evanchooly @patriot1burke

@logscape
Copy link

this looks like an issue with SAM use of DockerMachine permission on sharing/copying files to the container for execution/mounting.

I reproduced it with the SAM HelloWorld app.
https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-getting-started-hello-world.html

You can see it mentioned here:
aws/aws-sam-cli#1092

Temporary workaround:
aws/aws-sam-cli#1254

Or perhaps test this on docker-desktop instead of docker-toolbox (I have no choice because I'm on OSX El Capitan)

@patriot1burke
Copy link
Contributor

I'll see if I can reproduce. I didn't have a problem on my setup on Fedora. Should we just link this in docs?

@jmkgreen
Copy link

Reproduced on Windows with stock archetype generated project, found this issue as result.

@kolorobot
Copy link

I have been following "QUARKUS - AMAZON LAMBDA" guide and I got the same error for the native package. I repeated all steps but manually creating the lambda in the AWS console. and I had exactly the same issue when running the code on AWS:

Class not found: io.quarkus.amazon.lambda.runtime.QuarkusStreamHandler: java.lang.ClassNotFoundException
java.lang.ClassNotFoundException: io.quarkus.amazon.lambda.runtime.QuarkusStreamHandler
	at java.base/java.net.URLClassLoader.findClass(Unknown Source)
	at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
	at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
	at java.base/java.lang.Class.forName0(Native Method)
	at java.base/java.lang.Class.forName(Unknown Source)

When I uploaded non-native code (JAR) the lambda worked just fine.

{
  "result": "hello Bill",
  "requestId": "17a1f308-00db-427e-bf1f-5ae38e5a063e"
}


START RequestId: 17a1f308-00db-427e-bf1f-5ae38e5a063e Version: $LATEST
END RequestId: 17a1f308-00db-427e-bf1f-5ae38e5a063e
REPORT RequestId: 17a1f308-00db-427e-bf1f-5ae38e5a063e	Duration: 1.37 ms	Billed Duration: 100 ms	Memory Size: 512 MB	Max Memory Used: 124 MB	

My development machine is macOS (Catalina).

java --version                                            
openjdk 11.0.6 2020-01-14
OpenJDK Runtime Environment GraalVM CE 19.3.1 (build 11.0.6+9-jvmci-19.3-b07)
OpenJDK 64-Bit Server VM GraalVM CE 19.3.1 (build 11.0.6+9-jvmci-19.3-b07, mixed mode, sharing)

mvn --version
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)

@bluemonk3y
Copy link
Author

As per the pervious link I believe this is a sam docker issue wrt storage where the class path ends up being broken due to failed mounting or scp. aws/aws-sam-cli#1092

@evanchooly
Copy link
Member

I have been at a conference this week but I will try to take a look when I'm back in the office next week.

@oztimpower
Copy link
Contributor

I was experiencing this issue for the JVM version (native worked fine!), and I have now updated to the latest version of SAM 0.43, and the problem is resolved - JVM version working and no class not found exception.

@kolorobot
Copy link

Quarkus 1.2.1 Final - the native lambda worked - both: Java 8 and Java 11 native build.

I don't use local SAM, I only have GraalVM and I created Lambda manually, uploaded function.zip and it worked.

@bluemonk3y
Copy link
Author

bluemonk3y commented Mar 4, 2020

I should add, I presume 'native' will work due to a being a different runtime classloader mechanism. It was only on sam-local and seems like an issue with docker-toolkit and not docker desktop.

@oztimpower
Copy link
Contributor

Oops seems the answer on my side was as simple as by default Amazon Lambda only builds a thin jar, which is why it works for native image as it brings in all classes used.

The following property needs to be added (when using maven):
quarkus.package.uber-jar=true

It would be nice if the Amazon Lambda extension by default forced this.

@mszpiler
Copy link

mszpiler commented Mar 6, 2020

I have the same problem like @kolorobot

@oztimpower
Copy link
Contributor

Working fine for me now on 1.4.2

SAM CLI, version 0.52.0

__  ____  __  _____   ___  __ ____  ______ 
 --/ __ \/ / / / _ | / _ \/ //_/ / / / __/ 
 -/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\ \   
--\___\_\____/_/ |_/_/|_/_/|_|\____/___/   
2020-05-30 07:18:08,713 INFO  [io.quarkus] (main) lambda-http 1.0-SNAPSHOT (powered by Quarkus 1.4.2.Final) started in 7.446s. 
2020-05-30 07:18:08,721 INFO  [io.quarkus] (main) Profile prod activated. 
2020-05-30 07:18:08,722 INFO  [io.quarkus] (main) Installed features: [amazon-lambda, cdi, mutiny, resteasy, servlet, vertx, vertx-web]
START RequestId: 11d37409-4027-1ce4-3a0b-ba22d8ddef31 Version: $LATEST
END RequestId: 11d37409-4027-1ce4-3a0b-ba22d8ddef31
REPORT RequestId: 11d37409-4027-1ce4-3a0b-ba22d8ddef31	Init Duration: 7790.11 ms	Duration: 1224.32 ms	Billed Duration: 1300 ms	Memory Size: 512 MB	Max Memory Used: 99 MB	
2020-05-30 15:18:11 127.0.0.1 - - [30/May/2020 15:18:11] "GET /favicon.ico HTTP/1.1" 404 -

@gsmet gsmet added this to the 1.4.2.Final milestone Jun 10, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area/amazon-lambda kind/bug Something isn't working
Projects
None yet
Development

No branches or pull requests

10 participants