Hybrid MicroProfile Deployments with Quarkus: Severless with AWS Lambda and Standalone Thin JARs 📎
Stateless MicroProfile (and slightly refactored Jakarta EE) applications can be deployed with Quarkus as AWS Lambdas using the quarkus-amazon-lambda-rest and quarkus-amazon-lambda-http extensions.
Both extensions are changing the build output from an executable JAR to target/function.zip
containining the Quarkus-specific AWS Lambda handler (io.quarkus.amazon.lambda.runtime.QuarkusStreamHandler::handleRequest
) with all dependencies.
The function.zip
archive is not executable as a standalone application.
For hybrid deployments (standalone and serverless), the AWS Lambda specific extensions can be extracted into a profile:
<profiles>
<profile>
<id>lambda</id>
<activation>
<property>
<name>lambda</name>
</property>
</activation>
<dependencies>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-amazon-lambda-http</artifactId>
</dependency>
</dependencies>
</profile>
<profile>
<id>native</id>
<activation>
<property>
<name>native</name>
<!-- ... -->
</profiles>
...and activated with: mvn package -Plambda
The ordinary mvn package
build creates the executable: target/quarkus-app/quarkus-run.jar
, with the activated profile mvn package -Plambda
the AWS Lambda specific archive: target/function.zip
is created.
The target/function.zip
archive deployable with CDK for Java, checkout e.g. github.com/AdamBien/aws-quarkus-lambda-cdk-plain