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

Azure Functions (Serverless) con RESTEasy Reactive, Undertow o Reactive Routes

La extensión quarkus-azure-functions-http permite escribir microservicios con RESTEasy Reactive (JAX-RS), Undertow (servlet), Reactive Routes o Funqy HTTP y hacer que estos microservicios se puedan desplegar en el tiempo de ejecución de Azure Functions.

Un despliegue de funciones azure puede representar cualquier número de endpoints JAX-RS, servlet, Reactive Routes o Funqy HTTP.

This technology is considered preview.

En la preview, la compatibilidad con versiones anteriores y la presencia en el ecosistema no están garantizadas. Las mejoras específicas podrían requerir cambios en la configuración o en las API, y los planes para convertirse en estables están en marcha. Los comentarios son bienvenidos en nuestra lista de correo o como problemas en nuestro GitHub issue tracker.

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

Por el momento, sólo se admiten los tipos de medios basados en texto, ya que Azure Functions HTTP Trigger para Java no admite un formato binario

Requisitos previos

To complete this guide, you need:

  • Roughly 15 minutes

  • An IDE

  • JDK 11+ installed with JAVA_HOME configured appropriately

  • Apache Maven 3.8.6

  • Optionally the Quarkus CLI if you want to use it

  • Optionally Mandrel or GraalVM installed and configured appropriately if you want to build a native executable (or Docker if you use a native container build)

  • Una cuenta de Azure. Las cuentas gratuitas funcionan.

  • Azure CLI instalado

Solución

Esta guía utiliza un arquetipo de Maven para generar un proyecto de ejemplo que contiene tres endpoints http escritos con APIs JAX-RS, APIs Servlet, Rutas Reactivas o APIs Funqy HTTP. Después de la construcción, usted será capaz de desplegar a Azure.

Creación del proyecto de implantación de Maven

Cree el proyecto Azure Maven para su aplicación Quarkus utilizando nuestro arquetipo Maven.

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

Ejecutando este comando se ejecutará maven en modo interactivo y le pedirá que rellene algunas propiedades de construcción:

  • groupId - El groupId de maven de este proyecto generado. Escriba en org.acme.

  • artifactId - El artifactId de maven de este proyecto generado. Escriba en quarkus-demo

  • version - Versión de este proyecto generado.

  • package - por defecto es 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 - Por defecto, westus. Depende de su región azure.

  • function - Utilice el valor por defecto que es quarkus. Nombre de su función azure. Puede ser cualquier cosa que desee.

  • resourceGroup - Utilice el valor por defecto. Sin embargo, cualquier valor es válido.

Los valores anteriores se definen como propiedades en el archivo pom.xml generado.

Iniciar sesión en Azure

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

az login

Construir y desplegar en Azure

El pom.xml que generó en el paso anterior usa el azure-functions-maven-plugin. Ejecutar maven install genera los archivos de configuración y un directorio de staging requeridos por el azure-functions-maven-plugin. Así es como se ejecuta.

./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.

Si el despliegue es un éxito, el plugin de azure le dirá la URL base para acceder a su función.

i.e.

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

La URL para acceder al servicio sería

Extensión de las dependencias de maven

El proyecto de ejemplo incluye las extensiones RESTEasy Reactive, Undertow, Reactive Routes y Funqy HTTP. Si sólo utiliza una de esas APIs (es decir, sólo jax-rs), elimine respectivamente la dependencia de maven quarkus-resteasy-reactive, quarkus-undertow, quarkus-funqy-http, y/o quarkus-reactive-routes.

Debes incluir la extensión quarkus-azure-functions-http ya que es un puente genérico entre el tiempo de ejecución de Azure Functions y el framework HTTP en el que estás escribiendo tus microservicios.

Descriptores de despliegue de Azure

Las plantillas para los descriptores de despliegue de Azure Functions ( host.json, function.json) están dentro del directorio azure-config. Edítelos según sea necesario. Vuelva a ejecutar la compilación cuando esté listo.

NOTA: Si cambia el atributo function.json path o si añade un routePrefix, sus endpoints jax-rs no se enrutarán correctamente. Consulte Configuración de las rutas de acceso a la raíz para obtener más información.

Configuración de las rutas de acceso a la raíz

El prefijo de ruta por defecto para una Azure Function es /api. Todos tus puntos finales JAX-RS, Servlet, Rutas Reactivas y Funqy HTTP deben tenerlo en cuenta explícitamente. En el proyecto generado esto es manejado por el interruptor quarkus.http.root-path en application.properties

Si modifica el path o añade un routePrefix dentro del descriptor de despliegue azure-config/function.json, su código o configuración debe reflejar también cualquier prefijo que especifique para su ruta.