| = Deploying a Camel Route in AWS Lambda : A Camel Quarkus example |
| :cq-example-description: An example that shows how to deploy a Camel Quarkus route as an AWS Lambda function |
| |
| {cq-description} |
| |
| TIP: Check the https://camel.apache.org/camel-quarkus/latest/first-steps.html[Camel Quarkus User guide] for prerequisites |
| and other general information. |
| |
| == Start in Development mode |
| |
| In development mode, Quarkus boots up a mock AWS Lambda event server. For further information about how to feed it |
| with mock events, refer to the https://quarkus.io/guides/amazon-lambda#live-coding-and-unitintegration-testing[Quarkus AWS Lambda] guide. |
| |
| [source,shell] |
| ---- |
| $ mvn clean compile quarkus:dev |
| ---- |
| |
| The above command compiles the project, starts the application and lets the Quarkus tooling watch for changes in your |
| workspace. Any modifications in your project will automatically take effect in the running application. |
| |
| TIP: Please refer to the Development mode section of |
| https://camel.apache.org/camel-quarkus/latest/first-steps.html#_development_mode[Camel Quarkus User guide] for more details. |
| |
| === Package and run the application |
| |
| Once you are done with developing you may want to package and run the application. |
| |
| TIP: Find more details about the JVM mode and Native mode in the Package and run section of |
| https://camel.apache.org/camel-quarkus/latest/first-steps.html#_package_and_run_the_application[Camel Quarkus User guide] |
| |
| ==== JVM mode |
| |
| [source,shell] |
| ---- |
| $ mvn clean package -DskipTests |
| $ java -jar target/quarkus-app/quarkus-run.jar |
| ---- |
| |
| ==== Native mode |
| |
| IMPORTANT: Native mode requires having GraalVM and other tools installed. Please check the Prerequisites section |
| of https://camel.apache.org/camel-quarkus/latest/first-steps.html#_prerequisites[Camel Quarkus User guide]. |
| |
| To prepare a native executable using GraalVM, run the following command: |
| |
| [source,shell] |
| ---- |
| $ mvn clean package -DskipTests -Pnative |
| $ ./target/*-runner |
| ---- |
| |
| === Extra Build Generated Files |
| |
| [NOTE] |
| ==== |
| After you run the build, there are a few extra files generated by the quarkus-amazon-lambda extension. These files are in the build directory: `target/` |
| ==== |
| |
| * function.zip - lambda deployment file |
| |
| * manage.sh - wrapper around aws lambda cli calls |
| |
| * bootstrap-example.sh - example bootstrap script for native deployments |
| |
| * sam.jvm.yaml - (optional) for use with sam cli and local testing |
| |
| * sam.native.yaml - (optional) for use with sam cli and native local testing |
| |
| [NOTE] |
| ==== |
| https://quarkus.io/guides/amazon-lambda#extra-build-generated-files[Please click here to know more on how to use these scripts for automated deployment] |
| ==== |
| |
| == Deploying the Quarkus JVM application to AWS Lambda via AWS Web Console |
| |
| 1. Go to AWS Web console and search for Lambda Service |
| |
| 2. Click Create Function and select Author From Scratch |
| |
| 3. Give the name for your function which should be unique |
| |
| 4. Select Java 11 (Corretto) as Runtime |
| |
| 5. Under Permission feel free to create / use existing role to give the required permission for your lambda function |
| |
| 6. Once the function is created click the function name to upload the generated function.zip file and configure it. |
| |
| 7. Scroll down and select the Code tab. Click the upload from dropdown on right-hand side of the screen and select .zip or .jar file |
| |
| 8. Click upload and browse to the path where the generated zip file `target/function.zip` was created and select the function.zip file and click save |
| |
| 9. Under the Code tab scroll down to the Runtime settings and click edit |
| |
| 10. For the Handler details please provide the Quarkus Handler |
| |
| [source,shell] |
| ---- |
| io.quarkus.amazon.lambda.runtime.QuarkusStreamHandler::handleRequest |
| ---- |
| |
| === Testing the AWS Lambda Function |
| |
| 1. Now select the Test tab for executing a quick test. Copy paste the below json payload and hit Test |
| |
| { |
| "name": "Ravishankar" |
| } |
| |
| 2. If everything goes fine you should get the below response along with the lambda execution logs & stats |
| |
| Hello Ravishankar ! How are you? from GreetService |
| |
| == Deploying the Quarkus Native executable to AWS Lambda via AWS Web Console |
| |
| [NOTE] |
| ==== |
| <<package_native_executable,Please ensure that you have built your Java code as Quarkus Native executable>> |
| ==== |
| |
| 1. Go to AWS Web console and search for Lambda Service |
| |
| 2. Click Create Function and select Author From Scratch |
| |
| 3. Give the name for your function which should be unique |
| |
| 4. For Runtime please scroll down and Select Provide your own bootstrap on Amazon Linux 2 under Custom Runtime |
| |
| 5. Under Permission feel free to create / use existing role to give the required permission for your lambda function |
| |
| 6. Once the function is created click the function name to upload the generated function.zip file and configure it. |
| |
| 7. Scroll down and select the Code tab. Click the upload from dropdown on right-hand side of the screen and select .zip or .jar file |
| |
| 8. Click upload and browse to the path where the generated zip file `target/function.zip` was created and select the function.zip file and click save |
| |
| 9. Under the Code tab scroll down to the Runtime settings and click edit |
| |
| 10. For the Handler details please provide the below Handler |
| |
| not.used.in.provided.runtime |
| |
| 11. Then Select the Configuration tab and click Environment Variables |
| |
| 12. For Key enter `DISABLE_SIGNAL_HANDLERS` & for Value enter `true` |
| |
| === Testing the AWS Lambda Function |
| |
| 1. Now select the Test tab for executing a quick test. Copy paste the below json payload and hit Test |
| |
| { |
| "name": "Ravishankar" |
| } |
| |
| 2. If everything goes fine you should get the below response along with the lambda execution logs & stats |
| |
| |
| Hello Ravishankar ! How are you? from GreetService |
| |
| |
| == JVM vs Native : Results based on lambda execution logs & stats |
| image::results.png[JVM vs Native Results] |