Quarkus - Azure Functions (Serverless) with RESTEasy, Undertow, or Vert.x Web
One azure function deployment can represent any number of JAX-RS, servlet, Vert.x Web, or Funqy HTTP endpoints.
To complete this guide, you need:
less than 15 minutes
JDK 1.8 (Azure requires JDK 1.8)
Apache Maven 3.6.2+
. Free accounts work.
Solution
This guide walks you through running a Maven Archetype to generate a sample project that contains three http endpoints written with JAX-RS APIs, Servlet APIs, Vert.x Web, or Funqy HTTP APIs. After building, you will then be able to deploy to Azure.
Running this command will run maven in interactive mode and it will ask you to fill in some build properties:
artifactId
- The maven artifactId of this generated project. Type inquarkus-demo
version
- Version of this generated project.package
- defaults togroupId
appName
- Use the default value. This is the application name in Azure. It must be a unique subdomain name under*.azurewebsites.net
. Otherwise deploying to Azure will fail.appRegion
- Defaults towestus
. Dependent on your azure region.- Use the default which is
quarkus
. Name of your azure function. Can be anything you want.
The values above are defined as properties in the generated pom.xml
file.
Login to Azure
If you don’t login to Azure you won’t be able to deploy.
If you haven’t already created your function up at azure, the will build an uber-jar, package it, create the function at Azure, and deploy it.
If deployment is a success, the azure plugin will tell you the base URL to access your function.
i.e.
The URL to access the service would be
https://{appName}.azurewebsites.net/api/hello https://{appName}.azurewebsites.net/api/vertx/hello
Extension maven dependencies
The sample project includes the RESTEasy, Undertow, Vert.x Web, extensions. If you are only using one of those APIs (i.e. jax-rs only), respectively remove the maven dependency quarkus-resteasy
, quarkus-undertow
, quarkus-funqy-http
, and/or quarkus-vertx-web
.
You must include the quarkus-azure-functions-http
extension as this is a generic bridge between the Azure Functions runtime and the HTTP framework you are writing your microservices in.
Templates for Azure Functions deployment descriptors (, function.json
) are within the azure-config
directory. Edit them as you need to. Rerun the build when you are ready.
NOTE: If you change the function.json
path
attribute or if you add a routePrefix
, your jax-rs endpoints won’t route correctly. See Configuring Root Paths for more information.
Configuring Root Paths
The default route prefix for an Azure Function is /api
. All of your JAX-RS, Servlet, Vert.x Web, and Funqy HTTP endpoints must explicitly take this into account. In the generated project this is handled by the quarkus.http.root-path
switch in application.properties
If you modify the path
or add a routePrefix
within the azure-config/function.json
deployment descriptor, your code or configuration must also reflect any prefixes you specify for your path.