The English version of quarkus.io is the official project site. Translated sites are community supported on a best-effort basis.

Azure Functions (Serverless) with RESTEasy Reactive, Undertow, or Reactive Routes

The quarkus-azure-functions-http extension allows you to write microservices with RESTEasy Reactive (JAX-RS), Undertow (servlet), Reactive Routes, or Funqy HTTP and make these microservices deployable to the Azure Functions runtime.

One azure function deployment can represent any number of JAX-RS, servlet, Reactive Routes, or Funqy HTTP endpoints.

这项技术被认为是preview。

preview(预览) 中,不保证向后兼容和在生态系统中的存在。具体的改进可能需要改变配置或API,并且正在计划变得 稳定 。欢迎在我们的 邮件列表 中提供反馈,或在我们的 GitHub问题列表 中提出问题。

For a full list of possible statuses, check our FAQ entry.

Only text based media types are supported at the moment as Azure Functions HTTP Trigger for Java does not support a binary format

Prerequisites

完成这个指南,你需要:

  • 大概15分钟

  • 编辑器

  • 安装JDK 11以上版本并正确配置了 JAVA_HOME

  • Apache Maven 3.8.6

  • 如果你愿意的话,还可以选择使用Quarkus CLI

  • 如果你想构建原生可执行程序,可以选择安装Mandrel或者GraalVM,并正确配置(或者使用Docker在容器中进行构建)

  • An Azure Account. Free accounts work.

  • Azure CLI Installed

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, Reactive Routes, or Funqy HTTP APIs. After building, you will then be able to deploy to Azure.

Creating the Maven Deployment Project

Create the Azure Maven project for your Quarkus application using our Maven Archetype.

mvn archetype:generate \
    -DarchetypeGroupId=io.quarkus \
    -DarchetypeArtifactId=quarkus-azure-functions-http-archetype \
    -DarchetypeVersion=2.16.5.Final

Running this command will run maven in interactive mode and it will ask you to fill in some build properties:

  • groupId - The maven groupId of this generated project. Type in org.acme.

  • artifactId - The maven artifactId of this generated project. Type in quarkus-demo

  • version - Version of this generated project.

  • package - defaults to groupId

  • 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 to westus. Dependent on your azure region.

  • function - Use the default which is quarkus. Name of your azure function. Can be anything you want.

  • resourceGroup - Use the default value. Any value is fine though.

The values above are defined as properties in the generated pom.xml file.

Login to Azure

If you don’t log in to Azure you won’t be able to deploy.

az login

Build and Deploy to Azure

The pom.xml you generated in the previous step pulls in the azure-functions-maven-plugin. Running maven install generates config files and a staging directory required by the azure-functions-maven-plugin. Here’s how to execute it.

./mvnw clean install azure-functions:deploy

If you haven’t already created your function up at azure, then 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.

Successfully deployed the artifact to https://quarkus-demo-123451234.azurewebsites.net

The URL to access the service would be

Extension maven dependencies

The sample project includes the RESTEasy Reactive, Undertow, Reactive Routes, Funqy HTTP extensions. If you are only using one of those APIs (i.e. jax-rs only), respectively remove the maven dependency quarkus-resteasy-reactive, quarkus-undertow, quarkus-funqy-http, and/or quarkus-reactive-routes.

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.

Azure Deployment Descriptors

Templates for Azure Functions deployment descriptors (host.json, 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, Reactive Routes, 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.