Déployer une application Quarkus sur Azure Container Apps

Effectué

Dans cette unité, vous créez l’environnement Azure Container Apps en utilisant Azure CLI.

Configurer le Dockerfile pour l’application Quarkus

La plateforme Container Apps est utilisée pour déployer des applications conteneurisées. Vous devez donc conteneuriser d’abord l’application Quarkus dans une image Docker. Ce processus est facile à faire, car le plug-in Quarkus Maven a déjà généré des fichiers Dockerfile sous src/main/docker.

Utilisez cette commande pour renommer l’un de ces fichiers Dockerfile Dockerfile.jvm en Dockerfile, puis déplacez-le vers le dossier racine :

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

Remplacez le contenu après le long commentaire dans le Dockerfile par ce qui suit :

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" ]

Ce Dockerfile s’attend à ce que l’application Quarkus soit empaquetée en tant que fichier quarkus-run.jar. Il s’agit du nom par défaut de l’application Quarkus lorsqu’elle est empaquetée en tant que fichier JAR. Vous devez vérifier que l’application Quarkus est empaquetée en tant que fichier JAR. Pour ce faire exécutez la commande Maven suivante :

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

Cette commande met en package l’application Quarkus dans un fichier JAR et génère un fichier quarkus-run.jar dans le dossier target/quarkus-app.

Créer l’environnement Container Apps et déployer le conteneur

Maintenant que le Dockerfile se trouve dans le bon emplacement, vous pouvez créer l’environnement Container Apps et déployer le conteneur en utilisant une seule commande Azure CLI. Exécutez la commande suivante à la racine du projet :

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

Cette commande effectue plusieurs tâches :

  • Elle crée un environnement Container Apps s’il n’existe pas
  • Elle crée un registre Azure s’il n’existe pas
  • Elle crée un espace de travail Log Analytics s’il n’existe pas
  • Elle génère l’image Docker et l’envoie (push) au registre Azure
  • Elle déploie l’image Docker dans l’environnement Container Apps

L’exécution de la commande az containerapp up prend du temps. Vous devriez voir une sortie semblable à ce qui suit :

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! 

Valider le déploiement

Vous pouvez confirmer que le déploiement a réussi de plusieurs façons. Le moyen le plus simple consiste à rechercher votre groupe de ressources dans le Portail Azure. Vous devez voir des ressources similaires à celles-ci :

Screenshot that shows the deployed application.

Vous pouvez également vérifier le déploiement en exécutant la commande suivante. Elle répertorie toutes les ressources créées par la commande az containerapp up.

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

Vous devriez voir une sortie semblable à ce qui suit :

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

Exécuter l’application Quarkus déployée

Vous pouvez maintenant exécuter l’application Quarkus déployée. Tout d’abord, vous devez obtenir l’URL de l’application. Vous pouvez l’obtenir en exécutant la commande suivante :

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"

Votre application est prête à l’adresse https://<app-name>.azurecontainerapps.io/. Notez l’usage du protocole https. Ce protocole est utilisé, car l’application est déployée avec un certificat TLS. Pour tester l’application, vous pouvez utiliser 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

Récupérez les données en utilisant une nouvelle requête cURL :

curl https://$AZ_APP_URL/api/todos

Cette commande retourne la liste de toutes les tâches de la base de données :

[
   {
      "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
   }
]

Lorsque vous exécutez cette commande, vous pouvez diffuser en continu les journaux de votre conteneur quand vous créez des tâches :

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

Exécutez d’autres commandes cURL. Vous devriez voir les journaux défiler dans le terminal.

curl https://$AZ_APP_URL/api/todos

Remarque

Vous pouvez aussi ouvrir l’URL dans un navigateur web pour retourner la liste des éléments « todo » (tâche).