Déployer une application Quarkus sur Azure Container Apps

Effectué

Dans cette unité, vous allez créer l’environnement Azure Container Apps à l’aide d’Azure CLI.

Configurer le fichier Dockerfile pour l’application Dockerus

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

Utilisez cette commande pour renommer l’un de ces fichiers Dockerfile, Dockerfile.jvm, pour Dockerfile et le déplacer vers le dossier racine :

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

Remplacez le contenu après le commentaire long dans le fichier Dockerfile par les éléments suivants :

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 fichier Dockerfile s’attend à ce que l’application Dockerus soit empaquetée en tant que fichier quarkus-run.jar . Ce nom est le nom par défaut de l’application Ssdus lorsqu’elle est empaquetée en tant que fichier JAR. Vous devez vous assurer que l’application Snapshotus 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 empaquette 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 fichier Dockerfile se trouve à l’emplacement approprié, vous pouvez créer l’environnement Container Apps et déployer le conteneur à l’aide d’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 opérations :

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

La commande az containerapp up prend du temps à s’exécuter. Vous devez voir la sortie similaire à 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 vérifier que le déploiement a réussi de plusieurs façons. Le moyen le plus simple consiste à rechercher votre groupe de ressources sur le portail Azure . Vous devez voir les ressources similaires à ce qui suit :

Capture d’écran montrant l’application déployée.

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 devez voir la sortie similaire à celle-ci :

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

Vérifier l’application déployée

Vous pouvez maintenant vérifier l’application 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 à https://<app-name>.azurecontainerapps.io/. Notez le 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 à l’aide d’une nouvelle requête cURL :

curl https://$AZ_APP_URL/api/todos

Cette commande retourne la liste de tous les éléments to-do 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
   }
]

Si vous exécutez cette commande, vous pouvez diffuser en continu les journaux de votre conteneur lorsque vous créez de nouvelles tâches :

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

Exécutez d’autres commandes cURL. Vous devez voir les journaux de défilement 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).