Partager via


Tutoriel : Créer une application web Tomcat avec Azure App Service sur Linux et MySQL

Ce tutoriel montre comment créer, configurer et déployer une application Tomcat sécurisée dans Azure App Service qui se connecte à une base de données MySQL (à l’aide d’Azure Database pour PostgreSQL). Azure App Service est un service d’hébergement web hautement évolutif, appliquant des mises à jour correctives automatiques, qui peut déployer facilement des applications sur Windows ou Linux. Quand vous aurez terminé, vous disposerez d’une application Tomcat s’exécutant sur Azure App Service sur Linux.

Capture d'écran d'une application Tomcat stockant des données dans MySQL.

Dans ce tutoriel, vous allez apprendre à :

  • Créez une architecture sécurisée par défaut pour Azure App Service et Azure Database pour MySQL.
  • Sécuriser les secrets de connexion à l’aide d’une identité managée et de références Key Vault.
  • Déployer un exemple d’application Tomcat sur App Service à partir d’un dépôt GitHub.
  • Accéder aux paramètres d’application App Service dans le code de l’application.
  • Effectuer des mises à jour, et redéployer le code de l’application.
  • Transmettre en continu des journaux de diagnostic à partir d’App Service.
  • Gérer l’application dans le portail Azure.
  • Approvisionner la même architecture et la déployer à l’aide d’Azure Developer CLI.
  • Optimiser votre workflow de développement avec GitHub Codespaces et GitHub Copilot.

Prérequis

  • Compte Azure avec un abonnement actif. Si vous ne possédez pas de compte Azure, vous pouvez créer un compte gratuit.
  • Un compte GitHub. Vous pouvez aussi en obtenir un gratuitement.
  • Connaissance de Java avec le développement Tomcat.
  • (Facultatif) Pour essayer GitHub Copilot, un compte GitHub Copilot. Un essai gratuit de 30 jours est disponible.
  • Compte Azure avec un abonnement actif. Si vous ne possédez pas de compte Azure, vous pouvez créer un compte gratuit.
  • Azure Developer CLI installé. Vous pouvez suivre les étapes avec Azure Cloud Shell, car Azure Developer CLI est déjà installé.
  • Connaissance de Java avec le développement Tomcat.
  • (Facultatif) Pour essayer GitHub Copilot, un compte GitHub Copilot. Un essai gratuit de 30 jours est disponible.

Passer à la fin

Vous pouvez déployer rapidement l’exemple d’application dans ce tutoriel et le voir s’exécuter dans Azure. Exécutez simplement les commandes suivantes dans le Azure Cloud Shell, puis suivez l’invite :

mkdir msdocs-tomcat-mysql-sample-app
cd msdocs-tomcat-mysql-sample-app
azd init --template msdocs-tomcat-mysql-sample-app
azd up

1. Exécution de l'exemple

Tout d’abord, vous configurez un exemple d’application pilotée par les données comme point de départ. Pour plus de commodité, l’exemple de référentiel inclut une configuration de conteneur de développement. Le conteneur de développement dispose de tout ce dont vous avez besoin pour développer une application, notamment la base de données, le cache et toutes les variables d’environnement nécessaires par l’exemple d’application. Le conteneur de développement peut s’exécuter dans un codespace GitHub, ce qui signifie que vous pouvez exécuter l’exemple sur n’importe quel ordinateur avec un navigateur web.

Étape 1 : Dans une nouvelle fenêtre de navigateur :

  1. Connectez-vous à votre compte GitHub.
  2. Accédez à https://github.com/Azure-Samples/msdocs-tomcat-mysql-sample-app/fork.
  3. Désélectionnez Copier la branche principale uniquement. Vous voulez toutes les branches.
  4. Sélectionnez Créer la duplication.

Capture d’écran montrant comment créer une duplication (fork) du même exemple de dépôt GitHub.

Étape 2 : dans la fourche GitHub :

  1. Sélectionnez principal>starter-no-infra pour la branche de démarrage. Cette branche contient uniquement l’exemple de projet et aucun fichier ou configuration lié à Azure.
  2. Sélectionnez Code>Créer un codespace sur starter-no-infra. Il faut quelques minutes pour configurer le codespace.

Capture d’écran montrant comment créer un codespace dans GitHub.

Étape 3 : Dans le terminal codespace :

  1. Exécutez mvn jetty:run.
  2. Lorsque la notification Your application running on port 80 is available. s’affiche, sélectionnez Ouvrir dans le navigateur. Vous devez voir l’exemple d’application dans un nouvel onglet du navigateur. Pour arrêter le serveur Jetty, tapez Ctrl+C.

Capture d’écran montrant comment exécuter l’exemple d’application à l’intérieur du codespace GitHub.

Conseil

Vous pouvez interroger GitHub Copilot à propos de ce référentiel. Par exemple :

  • @workspace Que fait ce projet ?
  • @workspace Que fait le dossier .devcontainer ?

Vous rencontrez des problèmes ? Examinez la section Résolution des problèmes.

2. Créer App Service et MySQL

Vous créez au préalable les ressources Azure. La procédure indiquée dans ce tutoriel permet de créer un ensemble de ressources sécurisées par défaut qui incluent App Service et Azure DB pour MySQL. Pour le processus de création, vous devez spécifier :

  • Le nom de l’application web. Il est utilisé dans le cadre du nom DNS de votre application sous la forme https://<app-name>-<hash>.<region>.azurewebsites.net.
  • La Région du monde où l’application sera physiquement exécutée. Il est également utilisé dans le cadre du nom DNS de votre application.
  • La Pile du runtime de l’application. C’est là que vous sélectionnez la version de Java à utiliser pour votre application.
  • Le Plan d’hébergement de l’application. Il s’agit du niveau tarifaire qui inclut l’ensemble des fonctionnalités et la scalabilité de l’application.
  • Le groupe de ressources pour l’application. Un groupe de ressources vous permet de regrouper (dans un conteneur logique) toutes les ressources Azure nécessaires à l’application.

Connectez-vous au portail Azure et procédez comme suit pour créer vos ressources Azure App Service.

Étape 1 : Dans le Portail Azure :

  1. Entrez « base de données d’application web » dans la barre de recherche située en haut du portail Azure.
  2. Sélectionnez l’élément intitulé Application web + Base de données sous le titre Place de marché. Vous pouvez également accéder directement à l’Assistant de création.

Capture d’écran montrant comment utiliser la zone de recherche dans la barre d’outils supérieure pour trouver l’Assistant de création Application web + Base de données.

Étape 2 : Dans la page Créer une application web + base de données, remplissez le formulaire comme suit.

  1. Groupe de ressources : Sélectionnez Créer nouveau et utilisez un nom de msdocs-tomcat-mysql-tutorial.
  2. Région : toute région Azure près de chez vous.
  3. Nom : msdocs-tomcat-mysql-XYZ, où XYZ correspond à trois caractères aléatoires.
  4. Pile d’exécution : Java 17.
  5. Pile de serveur web Java : Apache Tomcat 10.1.
  6. Moteur : MySQL – Serveur flexible est sélectionné par défaut comme moteur de base de données. Si ce n’est pas le cas, sélectionnez-la. Azure Database pour MySQL – Serveur flexible est une base de données en tant que service MySQL complètement managée sur Azure, compatible avec les dernières éditions communautaires.
  7. Nom du plan d’hébergement : Basic. Une fois que vous êtes prêt, vous pouvez effectuer un scale-up vers un niveau tarifaire de production.
  8. Sélectionnez Revoir + créer.
  9. Une fois la validation terminée, sélectionnez Créer.

Capture d’écran montrant comment configurer une nouvelle application et une nouvelle base de données dans l’Assistant Application web + Base de données.

Étape 3 : Le déploiement prend quelques minutes. Une fois le déploiement terminé, sélectionnez le bouton Accéder à la ressource. L’application App Service s’ouvre automatiquement, mais les ressources suivantes sont créées :

  • Groupe de ressources : conteneur pour toutes les ressources créées.
  • Plan App Service : définit les ressources de calcul pour App Service. Un plan Linux est créé sur le niveau De base.
  • App Service : représente votre application et s’exécute dans le plan App Service.
  • Réseau virtuel : intégré à l’application App Service, isole le trafic réseau principal.
  • Azure Database pour MySQL Service flexible : accessible uniquement à partir du réseau virtuel. Une base de données et un utilisateur sont créés pour vous sur le serveur.
  • Zones DNS privées : Activent la résolution DNS du serveur de base de données dans le réseau virtuel.

Capture d’écran montrant le processus de déploiement effectué.

Vous rencontrez des problèmes ? Examinez la section Résolution des problèmes.

3. Secrets de la connexion sécurisée

L’Assistant Création a déjà généré la chaîne de connectivité de base de données pour vous en tant que paramètre d’application. Toutefois, la meilleure pratique de sécurité consiste à éliminer complètement les secrets d’App Service. Vous déplacez vos secrets vers un coffre de clés, et remplacer votre paramètre d’application par une référence Key Vault à l’aide des connecteurs de service.

Étape 1 : Récupérer la chaîne de connexion existante

  1. Dans le menu de gauche de la page App Service, sélectionnez Paramètres > Variables d’environnement.
  2. Sélectionnez AZURE_MYSQL_CONNECTIONSTRING. Il contient une chaîne de connexion JDBC. Si vous ajoutez un paramètre d’application qui contient une chaîne de connexion Oracle, SQL Server, PostgreSQL ou MySQL valide, App Service l’injecte en tant que source de données JNDI (Java Naming and Directory Interface) dans le fichier context.xml du serveur Tomcat.
  3. Dans Ajouter/modifier le paramètre d’application, dans le champ Valeur, recherchez la partie Password= à la fin de la chaîne.
  4. Copiez la chaîne de mot de passe après Password= pour une utilisation ultérieure. Ce paramètre d’application vous permet de vous connecter à la base de données MySQL sécurisée derrière un point de terminaison privé. Toutefois, le secret est enregistré directement dans l’application App Service, ce qui n’est pas le meilleur. Vous allez changer ça.

Une capture d’écran montrant comment voir la valeur d’un paramètre de l’application.

Étape 2 : Créer un coffre de clés pour la gestion sécurisée des secrets

  1. Dans la barre de recherche supérieure, tapez « coffre de clés », puis sélectionnez Place de marché>Coffre de clés.
  2. Dans Groupe de ressources, sélectionnez msdocs-tomcat-mysql-tutorial.
  3. Dans nom du coffre de clés, tapez un nom composé uniquement de lettres et de chiffres.
  4. Dans Région, définissez-la sur le même emplacement en tant que groupe de ressources.

Une capture d’écran montrant comment créer un coffre de clés.

Étape 3 : Sécuriser le coffre de clés avec un point de terminaison privé

  1. Sélectionnez l’onglet Réseau.
  2. Désélectionnez Activer l’accès public.
  3. Séllectionnez Créer un point de terminaison privé.
  4. Dans Groupe de ressources, sélectionnez msdocs-tomcat-mysql-tutorial.
  5. Dans Nom, entrez un nom pour le point de terminaison privé composé uniquement de lettres et de chiffres.
  6. Dans Région, définissez-la sur le même emplacement en tant que groupe de ressources.
  7. Dans la boîte de dialogue, dans Emplacement,sélectionnez le même emplacement que votre application App Service.
  8. Dans Groupe de ressources, sélectionnez msdocs-tomcat-mysql-tutorial.
  9. Dans Nom, tapez msdocs-tomcat-mysql-XYZVaultEndpoint.
  10. Dans Réseau virtuel, sélectionnez msdocs-tomcat-mysql-XYZVnet.
  11. Dans Réseau, msdocs-tomcat-mysql-XYZSubnet.
  12. Cliquez sur OK.
  13. Sélectionnez Vérifier + créer, puis sélectionnez Créer. Attendez que le déploiement du coffre de clés se termine. Vous devez voir « Votre déploiement est terminé ».

Capture d’écran montrant comment sécuriser un coffre de clés avec un point de terminaison privé.

Étape 4 : Configurer le connecteur de services

  1. Dans la barre de recherche supérieure, tapez msdocs-tomcat-mysql, puis sélectionnez la ressource App Service appelée msdocs-tomcat-mysql-XYZ.
  2. Sur la page App Service, dans le menu de gauche, sélectionnez Paramètres > Connecteur de services. Il existe déjà un connecteur, que l’Assistant création d’application a créé pour vous.
  3. Cochez la case en regard du connecteur, puis sélectionnez Modifier.
  4. Sous l’onglet Informations de base, définissez Type de client sur Java.
  5. Sélectionnez l’onglet Authentification.
  6. Dans Mot de passe, collez le mot de passe que vous avez copié précédemment.
  7. Sélectionnez Stocker le secret dans Key Vault.
  8. Sous Connexion du coffre de clés, sélectionnez Créer. Une boîte de dialogue Créer une connexion est ouverte en haut de la boîte de dialogue d’édition.

Une capture d’écran montrant comment modifier un connecteur de service avec une connexion de coffre de clés.

Étape 5 : Établir la connexion Key Vault

  1. Dans la boîte de dialogue Créer une connexion pour la connexion Key Vault, dans Key Vault, sélectionnez le coffre de clés que vous avez créé précédemment.
  2. Sélectionnez Vérifier + créer. Vous devriez voir que l’identité managée attribuée au système est définie sur Sélectionnée.
  3. Lorsque la validation terminée, sélectionnez Créer.

Une capture d’écran montrant comment configurer un connecteur de service de coffre-fort.

Étape 6 : Finaliser la configuration du connecteur de services

  1. Vous revenez dans la boîte de dialogue d’édition pour defaultConnector. Sous l’onglet Authentification, attendez que le connecteur de coffre de clés soit créé. Une fois l’opération terminée, la liste déroulante Connexion Key Vault effectue automatiquement la sélection.
  2. Sélectionnez Suivant : Réseau.
  3. Cliquez sur Enregistrer. Attendez que la notification Mise à jour réussie s’affiche.

Une capture d’écran montrant la connexion du coffre de clés sélectionnée dans defaultConnector.

Étape 7 : Vérifier l’intégration de Key Vault

  1. Dans le menu de gauche, sélectionnez à nouveau Paramètres > Variables d’environnement.
  2. À côté d’AZURE_MYSQL_CONNECTIONSTRING, sélectionnez Afficher la valeur. La valeur doit être @Microsoft.KeyVault(...), ce qui signifie qu’il s’agit d’une référence coffre de clés, car le secret est maintenant managé dans le coffre de clés.

Capture d’écran montrant comment afficher la valeur de la variable d’environnement MySQL dans Azure.

Pour résumer, le processus impliquait la récupération de la chaîne de connexion MySQL à partir des variables d’environnement d’App Service, la création d’un coffre de clés Azure Key Vault pour sécuriser la gestion des secrets avec un accès privé et la mise à jour du connecteur de services pour stocker le mot de passe dans le coffre de clés. Une connexion sécurisée entre l’application App Service et le coffre de clés a été établie à l’aide d’une identité managée affectée par le système, et la configuration a été vérifiée en confirmant que la chaîne de connexion utilise une référence Key Vault.

Vous rencontrez des problèmes ? Examinez la section Résolution des problèmes.

4. Confirmer la source de données JNDI

Si vous ajoutez un paramètre d’application qui contient une chaîne de connexion JDBC valide pour Oracle, SQL Server, PostgreSQL ou MySQL, App Service lui ajoute une source de données JNDI (Java Naming and Directory Interface) dans le fichier context.xml du serveur Tomcat. Dans cette étape, vous utilisez la connexion SSH au conteneur d’applications pour vérifier la source de données JNDI. Au cours de ce processus, vous apprendrez à accéder à l’interpréteur de commandes SSH pour le conteneur Tomcat.

Étape 1 : De retour dans la page App Service :

  1. Dans le menu gauche, sélectionnez SSH.
  2. Sélectionnez Go.

Capture d’écran montrant comment ouvrir l’interpréteur de commandes SSH de votre application à partir du portail Azure.

Étape 2 : Dans le terminal SSH, exécutez cat /usr/local/tomcat/conf/context.xml. Vous devez voir qu’une ressource JNDI appelée jdbc/AZURE_MYSQL_CONNECTIONSTRING_DS a été ajoutée. Vous utiliserez cette source de données ultérieurement.

Capture d’écran montrant les commandes à exécuter dans l’interpréteur de commandes SSH et ce qu’elles font.

Remarque

Seules les modifications apportées aux fichiers dans /home peuvent être conservées au-delà des redémarrages d’application. Par exemple, si vous modifiez /usr/local/tomcat/conf/server.xml, les modifications ne seront pas conservées au-delà d’un redémarrage de l’application.

Vous rencontrez des problèmes ? Examinez la section Résolution des problèmes.

5. Déployer l’exemple de code

Dans cette étape, vous configurez le déploiement GitHub avec GitHub Actions. Cette méthode fait partie des nombreuses façons de déployer sur App Service, mais elle permet également de bénéficier d’une intégration continue dans votre processus de déploiement. Par défaut, chaque git push vers votre référentiel GitHub lance l’action de build et de déploiement.

Comme la convention Tomcat, si vous souhaitez déployer dans le contexte racine de Tomcat, nommez votre artefact généré ROOT.war.

Étape 1 : Revenu à la page App Service, sélectionnez Centre de déploiement dans le menu de gauche.

Capture d’écran montrant comment ouvrir le centre de déploiement dans App Service.

Étape 2 : Dans la page Centre de déploiement :

  1. Dans Source, sélectionnez GitHub. Par défaut, GitHub Actions est sélectionné en tant que fournisseur de build.
  2. Connectez-vous à votre compte GitHub et suivez l’invite pour autoriser Azure.
  3. Dans Organisation, sélectionnez votre compte.
  4. Dans Référentiel, sélectionnez msdocs-tomcat-mysql-sample-app.
  5. Dans Branche, sélectionnez starter-no-infra. Il s’agit de la même branche que celle dans laquelle vous avez travaillé avec votre exemple d’application, sans fichiers ou configuration liés à Azure.
  6. Pour le Type d’authentification, sélectionnez Identité affectée par l’utilisateur.
  7. Dans le menu principal, sélectionnez Enregistrer. App Service valide un fichier de flux de travail dans le référentiel GitHub choisi, au sein du répertoire .github/workflows. Par défaut, le centre de déploiement crée une identité affectée par l’utilisateur pour que le flux de travail s’authentifie à l’aide de Microsoft Entra (authentification OIDC). Pour des options d’authentification alternatives, consultez Déployer sur App Service à l’aide de GitHub Actions.

Capture d’écran montrant comment configurer les pratiques CI/CD avec GitHub Actions.

Étape 3 : De retour dans le codespace GitHub de votre exemple de duplication, exécutez git pull origin starter-no-infra. Cela extrait le fichier de workflow nouvellement validé dans votre espace de code.

Capture d’écran montrant git pull à l’intérieur d’un codespace GitHub.

Étape 4 (Option 1 : avec GitHub Copilot) :

  1. Démarrez une nouvelle session de conversation en cliquant sur la vue Conversation, puis en cliquant sur +.
  2. Demandez : « @workspace Comment l’application se connecte-t-elle à la base de données ? ». Copilot peut vous donner des explications sur la source de données jdbc/MYSQLDS et sa configuration.
  3. Demandez « @workspace Je veux remplacer la source de données définie dans persistence.xml par une source de données JNDI existante dans Tomcat, mais je veux le faire dynamiquement. ». Copilot devrait vous donner une suggestion de code similaire à celle des étapes de l’Option 2 : sans GitHub Copilot ci-dessous et même vous indiquer d’apporter la modification dans la classe ContextListener.
  4. Ouvrez src/main/java/com/microsoft/azure/appservice/examples/tomcatmysql/ContextListener.java dans l’Explorateur et ajoutez la suggestion de code dans la méthode contextInitialized. GitHub Copilot ne vous donne pas la même réponse à chaque fois : il peut donc être nécessaire de poser d’autres questions pour affiner sa réponse. Pour obtenir des conseils, consultez Que puis-je faire avec GitHub Copilot dans mon codespace ?

Capture d’écran montrant comment poser une question dans une nouvelle session de conversation GitHub Copilot.

Étape 4 (Option 2 : sans GitHub Copilot) :

  1. Ouvrez src/main/java/com/microsoft/azure/appservice/examples/tomcatmysql/ContextListener.java dans l’Explorateur. Au démarrage de l’application, cette classe charge les paramètres de base de données dans src/main/resources/META-INF/persistence.xml.
  2. Dans la méthode contextIntialized(), recherchez le code commenté (lignes 29-33) et supprimez les marques de commentaire. Ce code vérifie si le paramètre d’application AZURE_MYSQL_CONNECTIONSTRING existe et modifie la source de données en java:comp/env/jdbc/AZURE_MYSQL_CONNECTIONSTRING_DS, qui est la source de données que vous avez trouvée précédemment dans context.xml dans l’interpréteur de commandes SSH.

Capture d’écran présentant un codespace GitHub et le fichier ContextListener.java ouvert.

Étape 5 :

  1. Sélectionnez l’extension Contrôle de code source.
  2. Dans la zone de texte, tapez un message de commit comme Configure Azure data source.
  3. Sélectionnez Valider, puis confirmez en choisissant Oui.
  4. Sélectionnez Synchroniser les modifications 1, puis confirmez en choisissant OK.

Capture d’écran montrant les modifications actuellement commitées et poussées vers GitHub.

Étape 6 : de retour dans la page Centre de déploiement du Portail Azure :

  1. Sélectionnez Journaux d’activité. Une nouvelle exécution de déploiement a déjà démarré à partir de vos modifications commitées.
  2. Dans l’élément de journal de l’exécution du déploiement, sélectionnez l’entrée Générer/déployer des journaux avec l’horodatage le plus récent.

Capture d’écran montrant comment ouvrir les journaux de déploiement dans le centre de déploiement.

Étape 7 : Vous êtes dirigé vers votre référentiel GitHub où vous voyez que l’action GitHub est en cours d’exécution. Le fichier de workflow définit deux étapes distinctes : la build et le déploiement. Attendez que l’exécution de GitHub affiche l’état Terminé. Cela prend environ 5 minutes.

Capture d’écran montrant une exécution GitHub en cours.

Vous rencontrez des problèmes ? Examinez la section Résolution des problèmes.

6. Accéder à l’application

Étape 1 : Dans la page App Service :

  1. Dans le menu de gauche, sélectionnez Vue d’ensemble.
  2. Sélectionnez l’URL de votre application.

Capture d’écran montrant comment lancer une application App Service à partir du portail Azure.

Étape 2 : Ajoutez quelques tâches à la liste. Félicitations, vous exécutez une application web Flask dans Azure App Service, avec une connectivité sécurisée vers Azure Database pour MySQL.

Capture d’écran de l’application web Tomcat avec MySQL s’exécutant dans Azure.

Vous rencontrez des problèmes ? Examinez la section Résolution des problèmes.

7. Diffuser les journaux de diagnostic

Azure App Service capture tous les messages qui s’affichent sur la console pour vous aider à diagnostiquer les problèmes liés à votre application. L’exemple d’application contient des instructions de journalisation Log4j standard pour montrer cette fonctionnalité, comme indiqué dans l’extrait suivant :

@WebServlet(urlPatterns = "/")
public class ViewServlet extends HttpServlet {
    private static Logger logger = LogManager.getLogger(ViewServlet.class.getName());
    
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        logger.info("GET /");

        EntityManagerFactory emf = (EntityManagerFactory) req.getServletContext().getAttribute("EMFactory");

Étape 1 : Dans la page App Service :

  1. Dans le menu de gauche, sélectionnez Journaux App Service.
  2. Sous Application Logging, sélectionnez Système de fichiers.
  3. Dans le menu principal, sélectionnez Enregistrer.

Capture d’écran montrant comment activer les journaux natifs dans App Service à partir du portail Azure.

Étape 2 : Dans le menu de gauche, sélectionnez Flux de journaux. Les journaux de votre application (notamment les journaux de plateforme et ceux issus de l’intérieur du conteneur) apparaissent.

Capture d’écran montrant comment afficher le flux de journal dans le portail Azure.

Découvrez-en davantage sur la journalisation dans des applications Java dans la série de vidées expliquant comment activer Azure Monitor OpenTelemetry pour les applications .NET, Node.js, Java et Python.

Vous rencontrez des problèmes ? Examinez la section Résolution des problèmes.

8. Nettoyer les ressources

Lorsque vous avez terminé, vous pouvez supprimer toutes les ressources de votre abonnement Azure en supprimant le groupe de ressources.

Étape 1 : Dans la barre de recherche située en haut du Portail Microsoft Azure :

  1. Entrez le nom du groupe de ressources.
  2. Sélectionnez le groupe de ressources.

Capture d’écran montrant comment rechercher un groupe de ressources dans le portail Azure et y accéder.

Étape 2 : Sur la page Groupe de ressources, sélectionnez Supprimer un groupe de ressources.

Capture d’écran montrant l’emplacement du bouton **Supprimer le groupe de ressources** dans le portail Azure.

Étape 3 :

  1. Confirmez votre suppression en tapant le nom du groupe de ressources.
  2. Sélectionnez Supprimer.
  3. Confirmez à nouveau en choisissant Supprimer.

Capture d’écran montrant la boîte de dialogue de confirmation de la suppression d’un groupe de ressources sur le Portail Azure.

2. Créer des ressources Azure et déployer un exemple d’application

Dans cette étape, vous allez créer les ressources Azure et déployer un exemple d’application dans App Service sur Linux. La procédure indiquée dans ce tutoriel permet de créer un ensemble de ressources sécurisées par défaut qui incluent App Service et Azure DB pour MySQL.

Le conteneur de développement dispose déjà d’Azure Developer CLI (AZD).

  1. Depuis la racine du référentiel, exécutez azd init.

    azd init --template tomcat-app-service-mysql-infra
    
  2. Lorsque vous y êtes invité, fournissez les réponses suivantes :

    Question Réponse
    Le répertoire actif n’est pas vide. Voulez-vous initialiser un projet ici dans «<votre-répertoire>» ? Y
    Que souhaitez-vous faire de ces fichiers ? Conserver mes fichiers existants inchangés
    Entrer un nom pour le nouvel environnement Tapez un nom unique. Le modèle AZD utilise ce nom dans le cadre du nom DNS de votre application web dans Azure (<app-name>-<hash>.azurewebsites.net). Les caractères alphanumériques et les traits d’union sont autorisés.
  3. Connectez-vous à Azure en exécutant la commande azd auth login et en suivant l’invite :

    azd auth login
    
  4. Créez les ressources Azure nécessaires et déployer le code de l’application avec la commande azd up. Suivez l’invite pour sélectionner l’abonnement et l’emplacement souhaités pour les ressources Azure.

    azd up
    

    La commande azd up prend environ 15 minutes (le cache Redis prend le plus de temps). Elle compile et déploie également le code de votre application, mais vous allez modifier votre code ultérieurement pour utiliser App Service. Pendant son exécution, la commande fournit des messages sur le processus d’approvisionnement et de déploiement, y compris un lien vers le déploiement dans Azure. Une fois l’opération terminée, la commande affiche également un lien vers l’application de déploiement.

    Ce modèle AZD contient des fichiers (azure.yaml et le répertoire infra) qui génèrent une architecture sécurisée par défaut avec les ressources Azure suivantes :

    • Groupe de ressources : conteneur pour toutes les ressources créées.
    • Plan App Service : définit les ressources de calcul pour App Service. Un plan Linux est créé sur le niveau B1.
    • App Service : représente votre application et s’exécute dans le plan App Service.
    • Réseau virtuel : intégré à l’application App Service, isole le trafic réseau principal.
    • Azure Database pour MySQL Serveur flexible : accessible uniquement à partir du réseau virtuel via l’intégration de zones DNS. Une base de données est créée pour vous sur le serveur.
    • Azure Cache pour Redis : Accessible uniquement à partir du réseau virtuel.
    • Points de terminaison privés : Points de terminaison d’accès pour le coffre de clés et le cache Redis dans le réseau virtuel.
    • Zones DNS privées : permettent la résolution DNS du coffre de clés, du serveur de base de données et du cache Redis dans le réseau virtuel.
    • L’espace de travail Log Analytics : agit comme le conteneur cible de votre application pour expédier ses journaux d’activité, dans lequel vous pouvez également interroger les journaux.
    • Coffre de clés: utilisé pour conserver votre mot de passe de base de données lorsque vous redéployez avec AZD.

    Une fois que la commande a fini de créer les ressources et de déployer le code de l’application pour la première fois, l’exemple d’application déployé ne fonctionne pas encore, car vous devez apporter de petits changements pour qu’il se connecte à la base de données dans Azure.

Vous rencontrez des problèmes ? Examinez la section Résolution des problèmes.

3. Vérifier les chaînes de connexion

Le modèle AZD utilisé a généré les variables de connectivité pour vous en tant que paramètres d’application et les restitue sur le terminal pour plus de facilité. Les paramètres d’application sont un moyen de préserver les secrets de connexion hors de votre référentiel de code.

  1. Dans la sortie AZD, retrouvez les paramètres de l’application AZURE_MYSQL_CONNECTIONSTRING. Seuls les noms des paramètres sont affichés. Ils ressemblent à ceci dans la sortie AZD :

     App Service app has the following connection strings:
             - AZURE_MYSQL_CONNECTIONSTRING
             - AZURE_REDIS_CONNECTIONSTRING
             - AZURE_KEYVAULT_RESOURCEENDPOINT
             - AZURE_KEYVAULT_SCOPE
     

    AZURE_MYSQL_CONNECTIONSTRING contient la chaîne de connexion à la base de données MySQL dans Azure. Vous devez l’utiliser ultérieurement dans votre code.

  2. Pour votre commodité, le modèle AZD affiche le lien direct vers la page des paramètres d’application de l’application. Recherchez le lien et ouvrez-le dans un nouvel onglet de navigateur.

    Si vous ajoutez un paramètre d’application qui contient une chaîne de connexion Oracle, SQL Server, PostgreSQL ou MySQL valide, App Service l’ajoute en tant que source de données Java Naming and Directory Interface (JNDI) dans le fichier context.xml du serveur Tomcat.

Vous rencontrez des problèmes ? Examinez la section Résolution des problèmes.

4. Confirmer la source de données JNDI

Dans cette étape, vous utilisez la connexion SSH au conteneur d’applications pour vérifier la source de données JNDI dans le serveur Tomcat. Au cours de ce processus, vous apprendrez à accéder à l’interpréteur de commandes SSH pour le conteneur Tomcat.

  1. Dans la sortie AZD, retrouvez l’URL de la session SSH et accédez-y dans le navigateur. Cela ressemble à ceci dans la sortie :

     Open SSH session to App Service container at: https://<app-name>-<hash>.scm.azurewebsites.net/webssh/host
     
  2. Dans le terminal SSH, exécutez cat /usr/local/tomcat/conf/context.xml. Vous devez voir qu’une ressource JNDI appelée jdbc/AZURE_MYSQL_CONNECTIONSTRING_DS a été ajoutée. Vous utiliserez cette source de données ultérieurement.

    Capture d’écran montrant les commandes à exécuter dans l’interpréteur de commandes SSH et ce qu’elles font.

Remarque

Seules les modifications apportées aux fichiers dans /home peuvent être conservées au-delà des redémarrages d’application. Par exemple, si vous modifiez /usr/local/tomcat/conf/server.xml, les modifications ne seront pas conservées au-delà d’un redémarrage de l’application.

Vous rencontrez des problèmes ? Examinez la section Résolution des problèmes.

5. Modifier l’exemple de code et effectuer au redéploiement

  1. Dans le codespace GitHub, démarrez une nouvelle session de conversation en cliquant sur la vue Conversation, puis sur +.

  2. Demandez : « @workspace Comment l’application se connecte-t-elle à la base de données ? ». Copilot peut vous donner des explications sur la source de données jdbc/MYSQLDS et sa configuration.

  3. Demandez : « @workspace Je veux remplacer la source de données définie dans persistence.xml par une source de données JNDI existante dans Tomcat, mais je veux le faire dynamiquement. » Copilot peut vous donner une suggestion de code similaire à celle fournie dans les étapes de la section Option 2 : sans GitHub Copilot ci-dessous, et même vous demander d’effectuer la modification dans la classe ContextListener.

  4. Ouvrez src/main/java/com/microsoft/azure/appservice/examples/tomcatmysql/ContextListener.java dans l’Explorateur et ajoutez la suggestion de code dans la méthode contextInitialized.

    GitHub Copilot ne vous donne pas la même réponse à chaque fois : il peut donc être nécessaire de poser d’autres questions pour affiner sa réponse. Pour obtenir des conseils, consultez Que puis-je faire avec GitHub Copilot dans mon codespace ?

  5. Dans le terminal du codespace, exécutez azd deploy.

    azd deploy
    

Conseil

Vous pouvez également simplement utiliser azd up tout le temps, ce qui fait à la fois azd package, azd provision et azd deploy.

Pour découvrir comment le fichier WAR est mis en package, vous pouvez exécuter azd package --debug seul.

Vous rencontrez des problèmes ? Examinez la section Résolution des problèmes.

6. Accéder à l’application

  1. Dans la sortie AZD, retrouvez l’URL de votre application et accédez-y dans le navigateur. L’URL ressemble à ceci dans la sortie AZD :

     Deploying services (azd deploy)
    
       (✓) Done: Deploying service web
       - Endpoint: https://<app-name>-<hash>.azurewebsites.net/
     
  2. Ajoutez quelques tâches à la liste.

    Capture d’écran de l’application web Tomcat avec MySQL s’exécutant dans Azure qui montre des tâches.

    Félicitations, vous exécutez une application web Flask dans Azure App Service, avec une connectivité sécurisée vers Azure Database pour MySQL.

Vous rencontrez des problèmes ? Examinez la section Résolution des problèmes.

7. Diffuser les journaux de diagnostic

Azure App Service peut capturer les journaux de la console pour vous aider à diagnostiquer les problèmes liés à votre application. Pour plus de facilité, le modèle AZD a déjà activé la journalisation sur le système de fichiers local et expédie les journaux vers un espace de travail Log Analytics.

L’exemple d’application contient des instructions de journalisation Log4j standard pour montrer cette fonctionnalité, comme indiqué dans l’extrait suivant :

@WebServlet(urlPatterns = "/")
public class ViewServlet extends HttpServlet {
    private static Logger logger = LogManager.getLogger(ViewServlet.class.getName());
    
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        logger.info("GET /");

        EntityManagerFactory emf = (EntityManagerFactory) req.getServletContext().getAttribute("EMFactory");

Dans la sortie AZD, retrouvez le lien pour diffuser en continu les journaux App Service et accédez-y dans le navigateur. Le lien ressemble à ceci dans la sortie AZD :

Stream App Service logs at: https://portal.azure.com/#@/resource/subscriptions/<subscription-guid>/resourceGroups/<group-name>/providers/Microsoft.Web/sites/<app-name>/logStream

Découvrez-en davantage sur la journalisation dans des applications Java dans la série de vidées expliquant comment activer Azure Monitor OpenTelemetry pour les applications .NET, Node.js, Java et Python.

Vous rencontrez des problèmes ? Examinez la section Résolution des problèmes.

8. Nettoyer les ressources

Pour supprimer toutes les ressources Azure dans le présent environnement de déploiement, exécutez azd down et suivez les invites.

azd down

Dépannage

Je vois de nombreuses <Classes> analysées à partir de plusieurs avertissements d’emplacement avec mvn jetty:run

Vous pouvez ignorer les avertissements. Le plug-in Maven Jetty affiche les avertissements, car le pom.xml de l’application contient la dépendance pour jakarta.servlet.jsp.jstl, que Jetty fournit déjà prête à l’emploi. Vous avez besoin de la dépendance pour Tomcat.

La vue de déploiement du portail pour le serveur flexible Azure Database pour MySQL indique un état de conflit

Selon votre abonnement et la région que vous sélectionnez, vous pouvez voir l’état de déploiement du serveur flexible Azure Database pour MySQL à Conflict, avec le message suivant dans les détails de l’opération :

InternalServerError: An unexpected error occured while processing the request.

Cette erreur est probablement due à une limite de votre abonnement pour la région que vous sélectionnez. Essayez de choisir une autre région pour votre déploiement.

L’exemple d’application déployée n’affiche pas l’application de liste des tâches

Si vous voyez une page Hey, Java developers! au lieu de l’application de liste des tâches, App Service charge probablement le conteneur mis à jour à partir de votre déploiement de code le plus récent. Attendez quelques minutes, puis actualisez la page.

Je vois une erreur 404 Page introuvable dans l’exemple d’application déployé

Assurez-vous que vous avez apporté les modifications de code pour utiliser la source de données java:comp/env/jdbc/AZURE_MYSQL_CONNECTIONSTRING_DS. Si vous avez apporté les modifications et redéployé votre code, App Service charge probablement le conteneur mis à jour. Attendez quelques minutes, puis actualisez la page.

Forum aux questions

Quel est le coût de cette configuration ?

Le prix des ressources créées est calculé comme suit :

  • Le plan App Service est créé au niveau De base. Il peut faire l’objet d’un scale-up ou d’un scale-down. Consultez la tarification App Service.
  • Le serveur flexible MySQL est créé au niveau B1ms et peut faire l’objet d’un scale-up ou d’un scale-down. Avec un compte gratuit Azure, le niveau B1ms est gratuit pendant 12 mois, sauf en cas de dépassement des limites mensuelles. Consultez Tarifs Azure Database pour MySQL.
  • L’Azure Cache pour Redis est créé au niveau De base avec la taille minimale du cache. Ce niveau a un faible coût. Vous pouvez le mettre à l’échelle vers des niveaux de performances plus élevés pour une disponibilité, un clustering et d’autres fonctionnalités plus avancés. Consultez Prix Azure Cache pour Redis.
  • Le réseau virtuel n’entraîne pas de frais, sauf si vous configurez des fonctionnalités supplémentaires, telles que le peering. Consultez Tarification du réseau virtuel Azure.
  • La zone DNS privée entraîne des frais minimes. Consultez la tarification d’Azure DNS.

Comment me connecter au serveur MySQL derrière le réseau virtuel avec d’autres outils ?

  • En outre, le conteneur Tomcat n’a actuellement pas le terminal mysql-client. Si vous le voulez, vous devez l’installer manuellement. Rappelez-vous que tout ce que vous installez ne persiste pas dans les redémarrages de l’application.
  • Pour vous connecter à partir d’un outil de bureau comme MySQL Workbench, votre ordinateur doit se trouver dans le réseau virtuel. Par exemple, il peut s’agir d’une machine virtuelle Azure dans l’un des sous-réseaux ou d’une machine dans un réseau local disposant d’une connexion VPN de site à site avec le réseau virtuel Azure.
  • Vous pouvez également intégrer Azure Cloud Shell au réseau virtuel.

Comment le développement d’applications locales fonctionne-t-il avec GitHub Actions ?

Grâce au fichier de flux de travail généré automatiquement à partir d’App Service comme exemple, chaque git push démarre une nouvelle exécution de build et de déploiement. À partir d’un clone local du référentiel GitHub, vous effectuez les mises à jour souhaitées et poussez vers GitHub. Par exemple :

git add .
git commit -m "<some-message>"
git push origin main

Je n’ai pas les autorisations pour créer une identité affectée par l’utilisateur

Consultez Configurer le déploiement de GitHub Actions à partir du Centre de déploiement.

Que puis-je faire avec GitHub Copilot dans mon codespace ?

Vous pouvez peut-être remarquer que la vue de conversation GitHub Copilot était déjà là pour vous quand vous avez créé le codespace. Pour plus de commodité, nous incluons l’extension de conversation GitHub Copilot dans la définition du conteneur (consultez .devcontainer/devcontainer.json). Cependant, vous avez besoin d’un compte GitHub Copilot (essai gratuit de 30 jours disponible).

Quelques conseils à appliquer quand vous parlez à GitHub Copilot :

  • Dans une session de conversation unique, les questions et réponses s’appuient les unes sur les autres et vous pouvez ajuster vos questions pour affiner la réponse que vous obtenez.
  • Par défaut, GitHub Copilot n’a accès à aucun fichier de votre référentiel. Pour poser des questions sur un fichier, vous devez d’abord l’ouvrir dans l’éditeur.
  • Pour permettre à GitHub Copilot d’accéder à tous les fichiers du référentiel lors de la préparation de ses réponses, commencez votre question par @workspace. Pour plus d’informations, consultez Use the @workspace agent.
  • Dans la session de conversation, GitHub Copilot peut suggérer des modifications et même (avec @workspace) où apporter les modifications, mais il n’est pas autorisé à apporter les modifications pour vous. C’est à vous d’ajouter les changements suggérés et de les tester.

Voici d’autres choses que vous pouvez dire pour affiner la réponse que vous obtenez :

  • Modifiez ce code pour utiliser la source de données jdbc/AZURE_MYSQL_CONNECTIONSTRING_DS.
  • Certaines importations dans votre code utilisent javax, mais j’ai une application Jakarta.
  • Je veux que ce code s’exécute seulement si la variable d’environnement AZURE_MYSQL_CONNECTIONSTRING est définie.
  • Je veux que ce code s’exécute seulement dans Azure App Service et non pas localement.

Étapes suivantes

En savoir plus sur l’exécution des applications Java sur App Service dans le guide du développeur.

Découvrez comment sécuriser votre application avec un domaine personnalisé et un certificat.