Déployer une application Quarkus sur Azure Container Apps
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 :
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).