Implementación de una aplicación de Quarkus en Azure Container Apps

Completado

En esta unidad, creará el entorno de Azure Container Apps mediante la CLI de Azure.

Configuración del Dockerfile para la aplicación Quarkus

Container Apps se usa para implementar aplicaciones en contenedor. Por lo tanto, primero debe incluir la aplicación Quarkus en una imagen de Docker. Este proceso es fácil porque el complemento Quarkus Maven ya ha generado algunos dockerfiles en src/main/docker.

Use este comando para cambiar el nombre de uno de estos Dockerfiles, Dockerfile.jvm, a Dockerfile y moverlo a la carpeta raíz:

mv src/main/docker/Dockerfile.jvm ./Dockerfile

Reemplace el contenido después del comentario largo en el Dockerfile por lo siguiente:

FROM registry.access.redhat.com/ubi8/openjdk-17:1.18

ENV LANGUAGE='en_US:en'


# We make four distinct layers so if there are application changes the library layers can be re-used
COPY --chown=185 target/quarkus-app/lib/ /deployments/lib/
COPY --chown=185 target/quarkus-app/*.jar /deployments/
COPY --chown=185 target/quarkus-app/app/ /deployments/app/
COPY --chown=185 target/quarkus-app/quarkus/ /deployments/quarkus/

EXPOSE 8080
USER 185
ENV JAVA_OPTS_APPEND="-Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager"
ENV JAVA_APP_JAR="/deployments/quarkus-run.jar"

ENTRYPOINT [ "/opt/jboss/container/java/run/run-java.sh" ]

Este Dockerfile espera que la aplicación Quarkus se empaquete como un archivo quarkus-run.jar. Este nombre es el nombre predeterminado de la aplicación Quarkus cuando se empaqueta como un archivo JAR. Debe asegurarse de que la aplicación Quarkus está empaquetada como un archivo JAR. Para ello, ejecute el siguiente comando de Maven:

./mvnw package    # On Mac or Linux
mvnw.cmd package  # On Windows

Este comando empaqueta la aplicación Quarkus en un archivo JAR y genera un archivo quarkus-run.jar en la carpeta target/quarkus-app.

Creación del entorno de Container Apps e implementación del contenedor

Ahora que Dockerfile está en la ubicación correcta, puede crear el entorno de Container Apps e implementar el contenedor mediante un único comando de la CLI de Azure. Ejecute el siguiente comando en la raíz del proyecto:

az containerapp up \
    --name "$AZ_CONTAINERAPP" \
    --environment "$AZ_CONTAINERAPP_ENV" \
    --location "$AZ_LOCATION" \
    --resource-group "$AZ_RESOURCE_GROUP" \
    --ingress external \
    --target-port 8080 \
    --source .

Este comando hace varias cosas:

  • Crea un entorno de Container Apps si no existe
  • Crea un registro de Azure si no existe
  • Crea un área de trabajo de Log Analytics si no existe
  • Compila la imagen de Docker e la inserta en el registro de Azure.
  • Implementa la imagen de Docker en el entorno de Container Apps

El comando az containerapp up tarda algún tiempo en ejecutarse. Debería ver la salida similar a la siguiente:

Using resource group 'rgazure-deploy-quarkus'
Creating ContainerAppEnvironment 'caeazure-deploy-quarkus' in resource group rgazure-deploy-quarkus
No Log Analytics workspace provided.
Generating a Log Analytics workspace with name "workspace-rgazuredeployquarkusEED7"
Creating Azure Container Registry ca001ad52ae7acr in resource group rgazure-deploy-quarkus

Run ID: ca3 was successful after 41s
Creating Containerapp caazure-deploy-quarkus in resource group rgazure-deploy-quarkus
Adding registry password as a secret with name "ca001ad52ae7acrazurecrio-ca001nxc57acr"

Your container app caazure-deploy-quarkus has been created and deployed! Congrats! 

Validación de la implementación

Puede validar que la implementación se ha realizado correctamente de varias maneras. La manera más fácil es buscar el grupo de recursos en Azure Portal. Debería ver recursos similares a los siguientes:

Captura de pantalla que muestra la aplicación implementada.

También puede comprobar la implementación ejecutando el siguiente comando. Enumera todos los recursos creados por el comando az containerapp up.

az resource list \
    --location "$AZ_LOCATION" \
    --resource-group "$AZ_RESOURCE_GROUP" \
    --output table

Debería ver la salida similar a esta:

Name                                ResourceGroup           Location    Type                                       Status
----------------------------------  ----------------------  ----------  -----------------------------------------  --------
caea3a6e0afeacr                     rgazure-deploy-quarkus  eastus      Microsoft.ContainerRegistry/registries
psqlazure-deploy-quarkus            rgazure-deploy-quarkus  eastus      Microsoft.DBforPostgreSQL/flexibleServers
caazure-deploy-quarkus              rgazure-deploy-quarkus  eastus      Microsoft.App/containerApps
caeazure-deploy-quarkus             rgazure-deploy-quarkus  eastus      Microsoft.App/managedEnvironments
workspace-rgazuredeployquarkuscDD3  rgazure-deploy-quarkus  eastus      Microsoft.OperationalInsights/workspaces

Comprobación de la aplicación implementada

Ahora puede comprobar la aplicación implementada. En primer lugar, debe obtener la dirección URL de la aplicación. Para obtenerlo, ejecute el siguiente comando:

export AZ_APP_URL=$(
    az containerapp show \
        --name "$AZ_CONTAINERAPP" \
        --resource-group "$AZ_RESOURCE_GROUP" \
        --query "properties.configuration.ingress.fqdn" \
        --output tsv \
)

echo "AZ_APP_URL=$AZ_APP_URL"

La aplicación está lista para https://<app-name>.azurecontainerapps.io/. Observe el protocolo https. Ese protocolo se usa porque la aplicación se implementa con un certificado TLS. Para probar la aplicación, puede usar cURL:

curl --header "Content-Type: application/json" \
    --request POST \
    --data '{"description":"Configuration","details":"Congratulations, you have set up your Quarkus application correctly!","done": "true"}' \
    https://$AZ_APP_URL/api/todos

Recupere los datos mediante una nueva solicitud cURL:

curl https://$AZ_APP_URL/api/todos

Este comando devuelve la lista de todos los elementos de to-do de la base de datos:

[
   {
      "description" : "Take Quarkus MS Learn",
      "details" : "Take the MS Learn on deploying Quarkus to Azure Container Apps",
      "done" : true,
      "id" : 1
   },
   {
      "description" : "Take Azure Container MS Learn",
      "details" : "Take the ACA Learn module",
      "done" : false,
      "id" : 2
   },
   {
      "description" : "Configuration",
      "details" : "Congratulations, you have set up your Quarkus application correctly!",
      "done" : true,
      "id" : 3
   }
]

Si ejecuta este comando, puede transmitir los registros del contenedor al crear nuevos to-dos:

az containerapp logs show \
    --name "$AZ_CONTAINERAPP" \
    --resource-group "$AZ_RESOURCE_GROUP" \
    --follow

Ejecute más comandos cURL. Debería ver los registros que se desplazan en el terminal.

curl https://$AZ_APP_URL/api/todos

Nota:

También puede abrir la dirección URL en un explorador web para devolver la lista de elementos pendientes.