Partager via


Déployer une application Java avec Container Apps sur Azure Container Apps

Cet article vous montre comment déployer rapidement Red Hat Quarkus sur Microsoft Azure Container Apps avec une simple application CRUD. L’application est une « liste de tâches » avec un front-end JavaScript et un point de terminaison REST. Azure Database pour PostgreSQL – Serveur flexible fournit la couche de persistance pour l’application. L’article vous montre comment tester votre application localement et la déployer sur Container Apps.

Prérequis

  • Un abonnement Azure. Si vous n’avez pas d’abonnement Azure, créez un compte gratuit avant de commencer.
  • Préparez une machine locale avec un système d’exploitation de type UNIX installé (par exemple Ubuntu, macOS ou Sous-système Windows pour Linux).
  • Installez une implémentation de Java SE version 17 ou ultérieure, par exemple la build Microsoft d’OpenJDK.
  • Installez Maven version 3.9.8 ou ultérieure.
  • Installez Docker ou Podman pour votre système d’exploitation.
  • Installez jq.
  • Installez cURL.
  • Installez l’interface CLI de Quarkus version 3.12.1 ou ultérieure.
  • Installez Azure CLI pour exécuter des commandes Azure CLI.
    • Connectez-vous à l’interface Azure CLI à l’aide de la commande az login. Pour finir le processus d’authentification, suivez les étapes affichées dans votre terminal. Pour connaître d’autres options de connexion, consultez Se connecter à Azure avec Azure CLI.
    • Lorsque vous y êtes invité, installez l’extension Azure CLI lors de la première utilisation. Pour plus d’informations sur les extensions, consultez Utiliser et gérer des extensions avec Azure CLI.
    • Exécutez az version pour rechercher la version et les bibliothèques dépendantes installées. Pour effectuer une mise à niveau vers la dernière version, exécutez az upgrade. Cet article nécessite au moins la version 2.61.0 d’Azure CLI.

Création du projet d’application

Utilisez la commande suivante pour cloner l’exemple de projet Java pour cet article. L’exemple se trouve sur GitHub.

git clone https://github.com/Azure-Samples/quarkus-azure
cd quarkus-azure
git checkout 2024-10-14
cd aca-quarkus

Si un message vous signale que vous allez passer à l’état detached HEAD, vous pouvez ignorer ce message sans risque. Étant donné que cet article ne nécessite aucune validation, l’état détaché HEAD est approprié.

Tester votre application Quarkus localement

Les étapes de cette section vous montrent comment exécuter l’application localement.

Quarkus prend en charge l’approvisionnement automatique de services non configurés en mode développement et test. Quarkus fait référence à cette fonctionnalité en tant que services de développement. Supposons que vous incluiez une fonctionnalité Quarkus, telle que la connexion à un service de base de données. Vous souhaitez tester l’application, mais vous n’avez pas encore entièrement configuré la connexion à une base de données réelle. Quarkus démarre automatiquement une version stub du service approprié et y connecte votre application. Pour plus d’informations, consultez Vue d’ensemble de Dev Services dans la documentation de Quarkus.

Vérifiez que votre environnement de conteneur, Docker ou Podman, est en cours d’exécution et utilisez la commande suivante pour passer en mode de développement Quarkus :

quarkus dev

Au lieu de quarkus dev, vous pouvez effectuer la même chose avec Maven à l’aide de mvn quarkus:dev.

Il est possible qu’on vous demande si vous souhaitez envoyer la télémétrie de votre utilisation du mode développeur de Quarkus. Si c’est le cas, répondez comme vous le souhaitez.

Le mode de développement Quarkus permet le rechargement en direct avec la compilation en arrière-plan. Si vous modifiez un aspect du code source de votre application et actualisez votre navigateur, vous pouvez voir les modifications. En cas de problèmes de compilation ou de déploiement, une page d’erreur vous en informera. Le mode de développement Quarkus écoute un débogueur sur le port 5005. Si vous souhaitez attendre que le débogueur s’attache avant de l’exécuter, entrez -Dsuspend dans la ligne de commande. Si vous ne souhaitez pas du tout le débogueur, vous pouvez utiliser -Ddebug=false.

La sortie doit ressembler à cet exemple :

__  ____  __  _____   ___  __ ____  ______
 --/ __ \/ / / / _ | / _ \/ //_/ / / / __/
 -/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\ \
--\___\_\____/_/ |_/_/|_/_/|_|\____/___/
INFO  [io.quarkus] (Quarkus Main Thread) quarkus-todo-demo-app-aca 1.0.0-SNAPSHOT on JVM (powered by Quarkus 3.2.0.Final) started in 14.826s. Listening on: http://localhost:8080
INFO  [io.quarkus] (Quarkus Main Thread) Profile dev activated. Live Coding activated.
INFO  [io.quarkus] (Quarkus Main Thread) Installed features: [agroal, cdi, hibernate-orm, hibernate-validator, jdbc-postgresql, narayana-jta, resteasy-reactive, resteasy-reactive-jackson, smallrye-context-propagation, vertx]

--
Tests paused
Press [e] to edit command line args (currently ''), [r] to resume testing, [o] Toggle test output, [:] for the terminal, [h] for more options>

Appuyez sur w sur le terminal où le mode de développement Quarkus est en cours d’exécution. La touche w ouvre votre navigateur web par défaut pour afficher l’application Todo. Vous pouvez également accéder directement à l’interface graphique utilisateur de l’application via http://localhost:8080.

Capture d’écran de l’exemple d’application Todo.

Essayez de sélectionner quelques éléments todo dans la liste des tâches. L’interface utilisateur indique la sélection avec un style de texte barré. Vous pouvez également ajouter un nouvel élément todo à la liste de tâches en tapant Vérifier les applications todo et en appuyant sur Entrée, comme illustré dans la capture d’écran suivante :

Capture d’écran de l’exemple d’application Todo avec de nouveaux objets ajoutés.

Accédez à l’API RESTful (/api) pour obtenir tous les éléments todo qui stockent dans la base de données PostgreSQL locale :

curl --verbose http://localhost:8080/api | jq .

La sortie doit ressembler à cet exemple :

* Connected to localhost (127.0.0.1) port 8080 (#0)
> GET /api HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.88.1
> Accept: */*
>
< HTTP/1.1 200 OK
< content-length: 664
< Content-Type: application/json;charset=UTF-8
<
{ [664 bytes data]
100   664  100   664    0     0  13278      0 --:--:-- --:--:-- --:--:-- 15441
* Connection #0 to host localhost left intact
[
  {
    "id": 1,
    "title": "Introduction to Quarkus Todo App",
    "completed": false,
    "order": 0,
    "url": null
  },
  {
    "id": 2,
    "title": "Quarkus on Azure App Service",
    "completed": false,
    "order": 1,
    "url": "https://learn.microsoft.com/en-us/azure/developer/java/eclipse-microprofile/deploy-microprofile-quarkus-java-app-with-maven-plugin"
  },
  {
    "id": 3,
    "title": "Quarkus on Azure Container Apps",
    "completed": false,
    "order": 2,
    "url": "https://learn.microsoft.com/en-us/training/modules/deploy-java-quarkus-azure-container-app-postgres/"
  },
  {
    "id": 4,
    "title": "Quarkus on Azure Functions",
    "completed": false,
    "order": 3,
    "url": "https://learn.microsoft.com/en-us/azure/azure-functions/functions-create-first-quarkus"
  },
  {
    "id": 5,
    "title": "Verify Todo apps",
    "completed": false,
    "order": 5,
    "url": null
  }
]

Appuyez sur q pour quitter le mode dev Quarkus.

Créer les ressources Azure pour exécuter l’application Quarkus

Les étapes de cette section vous montrent comment créer les ressources Azure suivantes pour exécuter l’exemple d’application Quarkus :

  • Azure Database pour PostgreSQL – Serveur flexible
  • Azure Container Registry
  • Azure Container Apps

Certaines de ces ressources doivent avoir des noms uniques dans l’étendue de l’abonnement Azure. Pour garantir cette unicité, vous pouvez utiliser les modèles initiales, séquence, date et suffixe. Pour appliquer ce modèle, nommez vos ressources en répertoriant vos initiales, un numéro de séquence, la date du jour et un certain type de suffixe spécifique à la ressource, par exemple, rg pour « groupe de ressources ». Les variables d’environnement suivantes utilisent ce modèle. Remplacez les valeurs d’espace réservé dans UNIQUE_VALUE et LOCATION par vos propres valeurs et exécutez les commandes dans votre terminal.

export UNIQUE_VALUE=<your unique value, such as mjg101424>
export RESOURCE_GROUP_NAME=${UNIQUE_VALUE}rg-passwordless
export LOCATION=<your desired Azure region for deploying your resources - for example, eastus>
export REGISTRY_NAME=${UNIQUE_VALUE}regpasswordless
export DB_SERVER_NAME=${UNIQUE_VALUE}dbpasswordless
export DB_NAME=demodb
export ACA_ENV=${UNIQUE_VALUE}envpasswordless
export ACA_NAME=${UNIQUE_VALUE}acapasswordless

Ensuite, créez un groupe de ressources à l’aide de la commande suivante :

az group create \
    --name $RESOURCE_GROUP_NAME \
    --location $LOCATION

Créer un serveur flexible Azure Database pour PostgreSQL

Un serveur flexible Azure Database pour PostgreSQL est un service de base de données entièrement géré conçu pour offrir un contrôle et une flexibilité plus granulaires des fonctions de gestion de base de données et des paramètres de configuration. Cette section vous montre comment créer une instance Azure Database pour PostgreSQL – Serveur flexible en utilisant Azure CLI. Pour plus d’informations, consultez Démarrage rapide : Créer une instance Azure Database pour PostgreSQL – Serveur flexible en utilisant Azure CLI.

Créez une instance de serveur flexible Azure Database pour PostgreSQL à l’aide de la commande suivante :

az postgres flexible-server create \
    --name $DB_SERVER_NAME \
    --resource-group $RESOURCE_GROUP_NAME \
    --database-name $DB_NAME \
    --public-access None \
    --sku-name Standard_B1ms \
    --tier Burstable \
    --active-directory-auth Enabled

La création du serveur, de la base de données, de l’utilisateur administrateur et des règles de pare-feu prend quelques minutes. Si la commande réussit, la sortie ressemble à l’exemple suivant :

{
  "connectionString": "postgresql://REDACTED:REDACTED@<DB_SERVER_NAME>.postgres.database.azure.com/<DB_NAME>?sslmode=require",
  "databaseName": "<DB_NAME>",
  "host": "<DB_SERVER_NAME>.postgres.database.azure.com",
  "id": "/subscriptions/REDACTED/resourceGroups/<RESOURCE_GROUP_NAME>/providers/Microsoft.DBforPostgreSQL/flexibleServers/<DB_SERVER_NAME>",
  "location": "East US",
  "password": "REDACTED",
  "resourceGroup": "<RESOURCE_GROUP_NAME>",
  "skuname": "Standard_B1ms",
  "username": "REDACTED",
  "version": "13"
}

Ajoutez l’utilisateur connecté actuel en tant qu’administrateur Microsoft Entra à l’instance de serveur flexible Azure Database pour PostgreSQL à l’aide des commandes suivantes :

ENTRA_ADMIN_NAME=$(az ad signed-in-user show --query userPrincipalName -o tsv)
az postgres flexible-server ad-admin create \
    --resource-group $RESOURCE_GROUP_NAME \
    --server-name $DB_SERVER_NAME \
    --display-name $ENTRA_ADMIN_NAME \
    --object-id $(az ad signed-in-user show --query id -o tsv)

Une sortie réussie est un objet JSON incluant la propriété "type": "Microsoft.DBforPostgreSQL/flexibleServers/administrators".

Créer une instance Azure Container Registry Microsoft

Étant donné que Quarkus est une technologie native du cloud, il intègre un support pour la création de conteneurs qui s’exécutent dans Container Apps. Container Apps dépend entièrement d’un registre de conteneurs à partir duquel il trouve les images de conteneurs à exécuter. Container Apps prend en charge Azure Container Registry.

Utilisez la commande az acr create pour créer l’instance de Container Registry. L’exemple suivant crée une instance de Container Registry nommée avec la valeur de votre variable d’environnement ${REGISTRY_NAME} :

az acr create \
    --resource-group $RESOURCE_GROUP_NAME \
    --location ${LOCATION} \
    --name $REGISTRY_NAME \
    --sku Basic

Après un bref laps de temps, vous devriez voir la sortie JSON qui contient les lignes suivantes :

  "provisioningState": "Succeeded",
  "publicNetworkAccess": "Enabled",
  "resourceGroup": "<YOUR_RESOURCE_GROUP>",

Obtenez le serveur de connexion pour l’instance Container Registry à l’aide de la commande suivante :

export LOGIN_SERVER=$(az acr show \
    --name $REGISTRY_NAME \
    --query 'loginServer' \
    --output tsv)
echo $LOGIN_SERVER

Connectez votre docker à l’instance de Container Registry

Connectez-vous à l’instance de Container Registry. La connexion vous permet d’envoyer (push) une image. Utilisez la commande suivante pour vous connecter au Registre :

az acr login --name $REGISTRY_NAME

Si vous utilisez Podman au lieu de Docker, apportez les modifications nécessaires à la commande.

Si vous vous êtes connecté avec succès à l’instance de Container Registry, vous devriez voir Login Succeeded à la fin de la sortie de la commande.

Créer un environnement

Un environnement dans Azure Container Apps crée une limite sécurisée autour d’un groupe d’applications de conteneur. Les applications de conteneur déployées dans le même environnement sont déployées dans le même réseau virtuel et écrivent les journaux dans le même espace de travail Log Analytics. Utilisez la commande az containerapp env create pour créer un environnement, comme montré dans l’exemple suivant :

az containerapp env create \
    --resource-group $RESOURCE_GROUP_NAME \
    --location $LOCATION \
    --name $ACA_ENV

Si on vous demande d’installer une extension, répondez Y.

Personnaliser la configuration native cloud

En tant que technologie native du cloud, Quarkus offre la possibilité de générer automatiquement des images de conteneur. Pour plus d’informations, consultez Images de conteneurs. Les développeurs peuvent ensuite déployer l’image de l’application sur une plateforme conteneurisée cible - par exemple, Azure Container Apps.

Pour générer l’image du conteneur, utilisez la commande suivante pour ajouter l’extension container-image-jib dans votre terminal local :

quarkus ext add container-image-jib

Quarkus modifie le POM pour s’assurer que l’extension est incluse parmi les <dependencies>. Si on vous demande d’installer quelque chose appelé JBang, répondez oui et permettez son installation.

La sortie doit ressembler à cet exemple :

[SUCCESS] ✅  Extension io.quarkus:quarkus-container-image-jib has been installed

Ouvrez le fichier pom.xml et les dépendances suivantes doivent être ajoutées par l’extension container-image-jib :

<dependency>
  <groupId>io.quarkus</groupId>
  <artifactId>quarkus-container-image-jib</artifactId>
</dependency>

Ensuite, ajoutez les dépendances suivantes au fichier pom.xml pour prendre en charge l’authentification sans mot de passe avec Azure Database pour PostgreSQL serveur flexible :

<dependency>
    <groupId>com.azure</groupId>
    <artifactId>azure-identity-extensions</artifactId>
    <version>1.1.20</version>
</dependency>

En tant que technologie native cloud, Quarkus prend en charge la notion de profils de configuration. Quarkus dispose des trois profils intégrés suivants :

  • dev - Activé en mode développement.
  • test - Activé lors de l’exécution de tests.
  • prod - Le profil par défaut lorsque vous n’êtes pas en mode développement ou test.

Quarkus prend en charge n’importe quel nombre de profils nommés, selon les besoins.

Les étapes restantes de cette section vous dirigent vers la suppression des marques de commentaire et la personnalisation des valeurs dans le fichier src/main/resources/application.properties. Assurez-vous que toutes les lignes commençant par # %prod. ne sont pas commentées en supprimant le premier #.

Le préfixe %prod. indique que ces propriétés sont actives lors de l’exécution dans le profil prod. Pour plus d’informations sur les profils de configuration, consultez la documentation de Quarkus.

Examinez la configuration de la base de données

Après avoir décompressé les propriétés, la configuration de la base de données dans le fichier src/main/resources/application.properties doit ressembler à l’exemple suivant :

# Database configurations
%prod.quarkus.datasource.db-kind=postgresql
%prod.quarkus.datasource.jdbc.url=
%prod.quarkus.datasource.username=
%prod.quarkus.datasource.password=
%prod.quarkus.hibernate-orm.database.generation=create
%prod.quarkus.hibernate-orm.sql-load-script=no-file

Supprimez la propriété%prod.quarkus.datasource.password, car elle n’est pas requise lors de l’utilisation de l’authentification sans mot de passe avec Azure Database pour PostgreSQL serveur flexible. Mettez à jour les autres propriétés associées %prod.quarkus.datasource.jdbc.url à la connexion de base de données et %prod.quarkus.datasource.username avec les valeurs, comme indiqué dans l’exemple suivant. La configuration finale doit ressembler à l’exemple suivant :

# Database configurations
%prod.quarkus.datasource.db-kind=postgresql
%prod.quarkus.datasource.jdbc.url=jdbc:postgresql://${AZURE_POSTGRESQL_HOST}:${AZURE_POSTGRESQL_PORT}/${AZURE_POSTGRESQL_DATABASE}?\
authenticationPluginClassName=com.azure.identity.extensions.jdbc.postgresql.AzurePostgresqlAuthenticationPlugin\
&sslmode=require
%prod.quarkus.datasource.username=${AZURE_POSTGRESQL_USERNAME}
%prod.quarkus.hibernate-orm.database.generation=create
%prod.quarkus.hibernate-orm.sql-load-script=no-file

La valeur , ${AZURE_POSTGRESQL_PORT}, ${AZURE_POSTGRESQL_DATABASE}et ${AZURE_POSTGRESQL_USERNAME} sont fournies par l’environnement Azure Container Apps lors de l’exécution à l’aide de ${AZURE_POSTGRESQL_HOST}l’extension sans mot de passe service Connector plus loin dans cet article.

En général, vous ne vous attendez pas à ce que les données persistées dans la base de données soient supprimées et remplies de nouveau avec les données d’exemple dans un environnement de production. C’est pourquoi vous pouvez voir que le schéma pour quarkus.hibernate-orm.database.generation est spécifié comme create afin que l’application ne crée le schéma que lorsqu’il n’existe pas au démarrage initial. De plus, la base de données n’est pas pré-remplie avec des données d’exemple car hibernate-orm.sql-load-script est spécifié comme no-file. Cette configuration est différente de celle que vous avez utilisée lorsque vous avez exécuté l’application localement en mode développement précédemment. Les valeurs par défaut en mode développement pour quarkus.hibernate-orm.database.generation et hibernate-orm.sql-load-script sont drop-and-create et import.sql respectivement, ce qui signifie que l’application supprime et recrée toujours le schéma de la base de données et charge les données définies dans import.sql. Le fichier import.sql est une fonctionnalité pratique de Quarkus. Si le fichier src/main/resources/import.sql existe dans le jar de Quarkus, et que la valeur de la propriété hibernate-orm.sql-load-script est import.sql, les instructions SQL DML dans ce fichier sont exécutées au démarrage de l’application.

Tester votre application Quarkus localement avec Azure Database pour PostgreSQL serveur flexible

Avant de déployer l’application Dockerus sur Azure Container Apps, testez la connexion à l’instance de serveur flexible Azure Database pour PostgreSQL localement.

Tout d’abord, ajoutez l’adresse IP locale aux règles de pare-feu d’instance de serveur flexible Azure Database pour PostgreSQL à l’aide des commandes suivantes :

export AZ_LOCAL_IP_ADDRESS=$(curl -s https://whatismyip.akamai.com)

az postgres flexible-server firewall-rule create \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $DB_SERVER_NAME \
    --rule-name $DB_SERVER_NAME-database-allow-local-ip \
    --start-ip-address $AZ_LOCAL_IP_ADDRESS \
    --end-ip-address $AZ_LOCAL_IP_ADDRESS

Ensuite, définissez les variables d’environnement suivantes dans votre terminal précédent. Ces variables d’environnement sont utilisées pour se connecter à l’instance de serveur flexible Azure Database pour PostgreSQL à partir de l’application Topologieus s’exécutant localement :

export AZURE_POSTGRESQL_HOST=${DB_SERVER_NAME}.postgres.database.azure.com
export AZURE_POSTGRESQL_PORT=5432
export AZURE_POSTGRESQL_DATABASE=${DB_NAME}
export AZURE_POSTGRESQL_USERNAME=${ENTRA_ADMIN_NAME}

Exécutez l’application Quarkus localement pour tester la connexion à l’instance de serveur flexible Azure Database pour PostgreSQL. Utilisez la commande suivante pour démarrer l’application en mode de production :

mvn clean package -DskipTests
java -jar target/quarkus-app/quarkus-run.jar

Ouvrez un nouveau navigateur web pour accéder à http://localhost:8080 l’application Todo. Vous devez voir la même application Todo que celle que vous avez vue lorsque vous avez exécuté l’application localement en mode de développement, sans aucun élément Todo.

Appuyez sur Ctrl+C pour arrêter l’application.

Construisez l’image du conteneur et poussez-la vers Container Registry

Maintenant, exécutez la commande suivante pour générer l’application elle-même. Cette commande utilise l’extension Jib pour construire l’image du conteneur.

export TODO_QUARKUS_IMAGE_NAME=todo-quarkus-aca
export TODO_QUARKUS_IMAGE_TAG=${LOGIN_SERVER}/${TODO_QUARKUS_IMAGE_NAME}:1.0
quarkus build -Dquarkus.container-image.build=true -Dquarkus.container-image.image=${TODO_QUARKUS_IMAGE_TAG} --no-tests 

La sortie doit se terminer par BUILD SUCCESS.

Vous pouvez vérifier si l’image conteneur est également générée à l’aide de la docker podman ligne de commande (CLI), comme illustré dans l’exemple suivant :

docker images | grep ${TODO_QUARKUS_IMAGE_NAME}

La sortie doit ressembler à celle-ci :

<LOGIN_SERVER_VALUE>/todo-quarkus-aca   1.0       0804dfd834fd   2 minutes ago   407MB

Poussez les images de conteneur vers Container Registry en utilisant la commande suivante :

docker push ${TODO_QUARKUS_IMAGE_TAG}

La sortie doit être semblable à l’exemple suivant :

The push refers to repository [<LOGIN_SERVER_VALUE>/todo-quarkus-aca]
188a550fce3d: Pushed
4e3afea591e2: Pushed
1db0eba807a6: Pushed
c72d9ccda0b2: Pushed
d7819b8a2d18: Pushed
d0e5cba6b262: Pushed
e0bac91f0f10: Pushed
1.0: digest: sha256:f9ccb476e2388efa0dfdf817625a94f2247674148a69b7e4846793e63c8be994 size: 1789

Déployer l’application Dockerus sur Azure Container Apps

Maintenant que vous avez envoyé l’image de l’application à Container Registry, utilisez la commande suivante pour créer une instance Container Apps pour exécuter l’application après avoir extrait l’image à partir du Registre de conteneurs :

az containerapp create \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $ACA_NAME \
    --image $TODO_QUARKUS_IMAGE_TAG \
    --environment $ACA_ENV \
    --registry-server $LOGIN_SERVER \
    --registry-identity system \
    --target-port 8080 \
    --ingress 'external' \
    --min-replicas 1

Une sortie réussie est un objet JSON incluant la propriété "type": "Microsoft.App/containerApps".

Ensuite, connectez l’instance de serveur flexible Azure Database pour PostgreSQL à l’application conteneur à l’aide de Service Connector en procédant comme suit :

  1. Installez l’extension sans mot de passe service Connector pour Azure CLI à l’aide de la commande suivante :

    az extension add --name serviceconnector-passwordless --upgrade --allow-preview true
    
  2. Connectez la base de données à l’application conteneur avec une identité managée affectée par le système à l’aide de la commande suivante :

    az containerapp connection create postgres-flexible \
        --resource-group $RESOURCE_GROUP_NAME \
        --name $ACA_NAME \
        --target-resource-group $RESOURCE_GROUP_NAME \
        --server $DB_SERVER_NAME \
        --database $DB_NAME \
        --system-identity \
        --container $ACA_NAME
    

    Une sortie réussie est un objet JSON incluant la propriété "type": "microsoft.servicelinker/linkers".

Obtenez une URL entièrement qualifiée pour accéder à l’application Todo en utilisant la commande suivante :

export QUARKUS_URL=https://$(az containerapp show \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $ACA_NAME \
    --query properties.configuration.ingress.fqdn -o tsv)
echo $QUARKUS_URL

Ouvrez un nouveau navigateur web à la valeur de ${QUARKUS_URL}. Si la page web ne s’affiche pas correctement, attendez un certain temps et actualisez la page.

Ensuite, ajoutez un nouvel élément todo avec le texte Deployed the Todo app to Container Apps. Sélectionnez cet élément pour le marquer comme terminé.

Capture d’écran de l’application d’exemple Todo fonctionnant dans Container Apps.

Accédez à l’API RESTful (/api) pour obtenir tous les éléments à faire stockés dans Azure Database for PostgreSQL, comme illustré dans l’exemple suivant :

curl --verbose -k ${QUARKUS_URL}/api | jq .

La sortie doit ressembler à cet exemple :

* Connected to <aca-name>.<random-id>.eastus.azurecontainerapps.io (20.231.235.79) port 443 (#0)
> GET /api HTTP/2
> Host: <aca-name>.<random-id>.eastus.azurecontainerapps.io
> user-agent: curl/7.88.1
> accept: */*
>
< HTTP/2 200
< content-length: 88
< content-type: application/json;charset=UTF-8
<
[
  {
    "id": 1,
    "title": "Deployed the Todo app to Container Apps",
    "completed": true,
    "order": 1,
    "url": null
  }
]

Vérifier que la base de données a été mise à jour

Exécutez la commande suivante pour vérifier que la base de données a été mise à jour avec le nouvel élément todo :

export ACCESS_TOKEN=$(az account get-access-token --resource-type oss-rdbms --output tsv --query accessToken)
az postgres flexible-server execute \
    --admin-user $ENTRA_ADMIN_NAME \
    --admin-password $ACCESS_TOKEN \
    --name $DB_SERVER_NAME \
    --database-name $DB_NAME \
    --querytext "select * from todo;"

Si on vous demande d’installer une extension, répondez Y.

La sortie doit ressembler à l’exemple suivant et doit inclure le même élément dans l’interface utilisateur utilisateur de l’application Todo illustrée précédemment :

Successfully connected to <DB_SERVER_NAME>.
Ran Database Query: 'select * from todo;'
Retrieving first 30 rows of query output, if applicable.
Closed the connection to <DB_SERVER_NAME>
[
  {
    "completed": true,
    "id": 1,
    "ordering": 1,
    "title": "Deployed the Todo app to Container Apps",
    "url": null
  }
]

Lorsque vous avez terminé, supprimez la règle de pare-feu qui permet à votre adresse IP locale d’accéder à l’instance de serveur flexible Azure Database pour PostgreSQL à l’aide de la commande suivante :

az postgres flexible-server firewall-rule delete \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $DB_SERVER_NAME \
    --rule-name $DB_SERVER_NAME-database-allow-local-ip \
    --yes

Nettoyer les ressources

Pour éviter des frais Azure, vous devez nettoyer les ressources inutiles. Lorsque vous n’avez plus besoin du cluster, utilisez la commande az group delete pour supprimer le groupe de ressources, le service conteneur, le registre de conteneurs et toutes les ressources associées.

git reset --hard
docker rmi ${TODO_QUARKUS_IMAGE_TAG}
az group delete --name $RESOURCE_GROUP_NAME --yes --no-wait

Vous voudrez peut-être aussi utiliser docker rmi pour supprimer les postgres et testcontainers images de conteneur générées par le mode développeur de Quarkus.

Étapes suivantes