Tutoriel : créer une application web JBoss avec Azure App Service sur Linux et MySQL
Ce tutoriel montre comment générer, configurer et déployer une application JBoss sécurisée dans Azure App Service qui se connecte à une base de données MySQL (avec Azure Database pour MySQL). 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 JBoss s’exécutant sur Azure App Service sur Linux.
Dans ce tutoriel, vous allez apprendre à :
- Créer une architecture sécurisée par défaut pour Azure App Service et un serveur flexible Azure Database pour MySQL.
- Sécuriser la connectivité de base de données à l’aide d’une chaîne de connexion sans mot de passe.
- Vérifier les sources de données JBoss dans App Service à l’aide de l’interface CLI JBoss.
- Déployer un exemple d’application JBoss sur App Service à partir d’un référentiel 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 JBoss.
- (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 JBoss.
- (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-jboss-mysql-sample-app
cd msdocs-jboss-mysql-sample-app
azd init --template msdocs-jboss-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 :
- Connectez-vous à votre compte GitHub.
- Accédez à https://github.com/Azure-Samples/msdocs-jboss-mysql-sample-app/fork.
- Désélectionnez Copier la branche principale uniquement. Vous voulez toutes les branches.
- Sélectionnez Créer la duplication.
Étape 2 : dans la fourche GitHub :
- 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. Sélectionnez Code>Créer un codespace sur starter-no-infra. Il faut quelques minutes pour configurer le codespace.
Étape 3 : Dans le terminal codespace :
- Exécutez
mvn clean wildfly:run
. - Lorsque vous voyez la notification
Your application running on port 8080 is available.
, attendez quelques secondes de plus afin que le serveur WildFly termine le chargement de l’application. Ensuite, sélectionnez Ouvrir dans le navigateur. Vous devriez voir l’exemple d’application dans un nouvel onglet du navigateur. Pour arrêter le serveur WildFly, tapezCtrl
+C
.
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 :
- Dans la barre de recherche, tapez app service.
- Sélectionnez l’élément intitulé App Service sous l’en-tête Services .
- Sélectionnez Créer>Application web. Vous pouvez également accéder directement à l’Assistant de création.
Étape 2 : dans la page Créer une application web, renseignez le formulaire comme suit :
- Nom : msdocs-jboss-mysql. Un groupe de ressources nommé msdocs-jboss-mysql_group sera généré pour vous.
- Pile d’exécution : Java 17.
- Pile serveur web Java : sélectionnez Red Hat JBoss EAP 8. Si vous avez déjà configuré votre abonnement Red Hat avec Azure, sélectionnez Licence RED Hat JBoss EAP 8 BYO.
- Région : toute région Azure près de chez vous.
- Plan Linux : Créez nouveau et utilisez le nom msdocs-jboss-mysql.
- Plan tarifaire : Premium V3 P0V3. Une fois que vous êtes prêt, vous pouvez effectuer un scale-up vers un niveau tarifaire différent.
- Déployer avec votre application : sélectionnez Base de données. Azure Database pour MySQL est le serveur flexible sélectionné par défaut comme moteur de base de données. Azure Database pour MySQL est une base de données en tant que service MySQL complètement managée sur Azure et compatible avec les dernières éditions communautaires.
- Sélectionnez Revoir + créer.
- Une fois la validation terminée, sélectionnez Créer.
É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.
- Points de terminaison privés : des points de terminaison d’accès pour le serveur de base de données dans le réseau virtuel.
Vous rencontrez des problèmes ? Examinez la section Résolution des problèmes.
3. Créer une connexion sans mot de passe
Dans cette étape, vous générez une connexion de service basée sur une identité managée, que vous pourrez utiliser ultérieurement pour créer une source de données dans votre serveur JBoss. En utilisant une identité managée pour se connecter à la base de données MySQL, votre code est protégé contre les fuites accidentelles de secrets.
Étape 1 : créer une identité managée.
- Dans la barre de recherche supérieure, tapez identité managée.
- Sélectionnez l’élément intitulé Identités managées sous l’en-tête Services .
- Sélectionnez Créer.
- Dans Groupe de ressources, sélectionnez msdocs-jboss-mysql_group.
- Dans Région, sélectionnez la même région que celle utilisée pour votre application web.
- Dans Nom, tapez msdocs-jboss-mysql-server-identity.
- Sélectionnez Revoir + créer.
- Sélectionnez Créer.
Étape 2 : activer l’authentification Microsoft Entra sur le serveur MySQL.
- Dans la barre de recherche supérieure, tapez msdocs-jboss-mysql-server.
- Sélectionnez la ressource de serveur flexible Azure Database pour MySQL appelée msdocs-jboss-mysql-server.
- Dans le menu de gauche, sélectionnez Sécurité>Authentification.
- Dans Attribuer l’accès à, sélectionnez Authentification Microsoft Entra uniquement.
- Sous Identité managée attribuée par l’utilisateur, sélectionnez Sélectionner.
- Sélectionnez msdocs-jboss-mysql-server-identity, puis sélectionnez Ajouter. L’affectation de l’identité au serveur MySQL peut prendre quelques instants.
- Dans Nom Administrateur Microsoft Entra, sélectionnez Sélectionner.
- Recherchez et sélectionnez votre compte Azure, puis Sélectionner.
- Sélectionnez Enregistrer et attendez que l’opération soit terminée.
Étape 3 : ajouter un connecteur de service basé sur une identité managée.
- Dans la barre de recherche supérieure, tapez msdocs-jboss-mysql.
- Sélectionnez la ressource App Service appelée msdocs-jboss-mysql.
- Sur la page App Service, dans le menu de gauche, sélectionnez Paramètres > Connecteur de services.
- Sélectionnez Créer.
- Sous l’onglet Informations de base :
- Définissez le Type de service sur Base de données pour le serveur flexible MySQL.
- Définissez le serveur flexible MySQL sur msdocs-jboss-mysql-server.
- Définissez la Base de données MySQL sur msdocs-jboss-mysql-database.
- Définissez le Type de client sur Java.
- Sélectionnez l’onglet Authentification.
- Sélectionner Identité managée attribuée par le système.
- Sélectionnez l’onglet Vérifier + créer.
- Une fois la validation terminée, sélectionnez Créer sur Cloud Shell et attendez que l’opération se termine dans Cloud Shell.
- Lorsque vous voyez le format JSON de sortie, vous pouvez fermer Cloud Shell. Fermez également la boîte de dialogue Créer une connexion.
- Sélectionnez Actualiser pour afficher le nouveau connecteur de service.
Étape 4 : ajouter des plug-ins d’authentification à la chaîne de connexion.
- Dans le menu de gauche, sélectionnez Variables d’environnement.
- Sélectionnez AZURE_MYSQL_CONNECTIONSTRING. Le champ Valeur doit contenir une valeur
user
et nonpassword
. L’utilisateur est une identité managée. - Le serveur JBoss de votre application App Service dispose des plug-ins d’authentification pour l’identité managée, mais vous devez toujours l’ajouter à la chaîne de connexion. Faites défiler jusqu’à la fin de la valeur et ajoutez
&defaultAuthenticationPlugin=com.azure.identity.extensions.jdbc.mysql.AzureMysqlAuthenticationPlugin&authenticationPlugins=com.azure.identity.extensions.jdbc.mysql.AzureMysqlAuthenticationPlugin
. - Sélectionnez Appliquer.
- Sélectionnez Appliquer, puis Confirmer.
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) sur le serveur JBoss. Dans cette étape, vous utilisez la connexion SSH au conteneur d’applications pour vérifier la source de données JNDI. Dans le processus, vous allez apprendre à accéder à l’interpréteur de commandes SSH et à exécuter l’interface CLI JBoss.
Étape 1 : De retour dans la page App Service :
- Dans le menu de gauche, sélectionnez Outils de développement > SSH.
- Sélectionnez Go.
Étape 2 : Dans le terminal SSH :
- Exécutez
$JBOSS_HOME/bin/jboss-cli.sh --connect
. - Dans la connexion JBoss CLI, exécutez
ls subsystem=datasources/data-source
. Vous devriez voir la source de données générée automatiquement et intituléeAZURE_MYSQL_CONNECTIONSTRING_DS
. - Obtenez le nom JNDI de la source de données avec
/subsystem=datasources/data-source=AZURE_MYSQL_CONNECTIONSTRING_DS:read-attribute(name=jndi-name)
. Vous disposez maintenant d’un nom JNDIjava:jboss/env/jdbc/AZURE_MYSQL_CONNECTIONSTRING_DS
, que vous pourrez utiliser ultérieurement dans votre code d’application.
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 /opt/eap/standalone/configuration/standalone.xml
ou si vous changez la configuration du serveur dans JBoss CLI, les modifications ne seront pas conservées après le redémarrage de l’application. Pour conserver vos modifications, utilisez un script de démarrage, comme illustré dans Configurer des sources de données pour une application Tomcat, JBoss ou Java SE dans Azure App Service
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.
Selon la convention JBoss, si vous souhaitez déployer dans le contexte racine de JBoss, nommez l’artefact généré ROOT.war.
Étape 1 : retour à la page App Service. Dans le menu de gauche, sélectionnez Déploiement > Centre de déploiement.
Étape 2 : Dans la page Centre de déploiement :
- Dans Source, sélectionnez GitHub. Par défaut, GitHub Actions est sélectionné en tant que fournisseur de build.
- Connectez-vous à votre compte GitHub et suivez l’invite pour autoriser Azure.
- Dans Organisation, sélectionnez votre compte.
- Dans Référentiel, sélectionnez msdocs-jboss-mysql-sample-app.
- 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.
- Pour le Type d’authentification, sélectionnez Identité affectée par l’utilisateur.
- 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.
É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. Vous pouvez le modifier en fonction de vos besoins dans .github/workflows/starter-no-infra_msdocs-jboss-mysql.yml.
Étape 4 (Option 1 : avec GitHub Copilot) :
- Démarrez une nouvelle session de conversation en cliquant sur la vue Conversation, puis en cliquant sur +.
- 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
java:jboss/MySQLDS
et sa configuration. - Supposons que « La source de données de JBoss dans Azure utilise le nom JNDI java:jboss/env/jdbc/AZURE_MYSQL_CONNECTIONSTRING_DS. ». Copilot peut vous donner une suggestion de code similaire à celle des étapes ci-dessous option 2 : sans GitHub Copilot,et même vous indiquer d’apporter la modification dans la classe. 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 ?
Étape 4 (Option 2 : sans GitHub Copilot) :
- Ouvrez src/main/resources/META-INF/persistence.xml dans l’Explorateur. Au démarrage de l’application, la ressource charge les paramètres de la base de données dans ce fichier.
- Changez la valeur de
<jta-data-source>
dejava:jboss/MySQLDS
enjava:jboss/env/jdbc/AZURE_MYSQL_CONNECTIONSTRING_DS
, qui est la source de données que vous avez trouvée précédemment avec l’interface CLI JBoss dans le shell SSH.
Étape 5 :
- Sélectionnez l’extension Contrôle de code source.
- Dans la zone de texte, tapez un message de commit comme
Configure Azure JNDI name
. - Sélectionnez Valider, puis confirmez en choisissant Oui.
- Sélectionnez Synchroniser les modifications 1, puis confirmez en choisissant OK.
Étape 6 : de retour dans la page Centre de déploiement du Portail Azure :
- Sélectionnez Journaux d’activité. Une nouvelle exécution de déploiement a déjà démarré à partir de vos modifications commitées.
- 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.
É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.
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 :
- Dans le menu de gauche, sélectionnez Vue d’ensemble.
- Dans Domaine par défaut, sélectionnez l’URL de votre application.
É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.
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 :
private static final Logger logger = Logger.getLogger(MethodHandles.lookup().lookupClass().getName());
@PersistenceContext
private EntityManager entityManager;
public List<Task> getAllTasks() {
logger.log(Level.INFO, "Finding all tasks. ");
return this.entityManager.createNamedQuery("findAllTasks", Task.class).getResultList();
}
Dans la page App Service, dans le menu de gauche, sélectionnez Flux de journal. Les journaux de votre application (notamment les journaux de plateforme et ceux issus de l’intérieur du conteneur) apparaissent.
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 :
- Entrez le nom du groupe de ressources msdocs-jboss-mysql_group.
- Sélectionnez le groupe de ressources.
Étape 2 : Sur la page Groupe de ressources, sélectionnez Supprimer un groupe de ressources.
Étape 3 :
- Confirmez votre suppression en tapant le nom du groupe de ressources.
- Sélectionnez Supprimer.
- Confirmez à nouveau en choisissant Supprimer.
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).
Depuis la racine du référentiel, exécutez
azd init
.azd init --template jboss-app-service-mysql-infra
Lorsque vous y êtes invité, fournissez les réponses suivantes :
Question Réponse Poursuivre l’initialisation d’une application dans « <your-directory>
» ?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.Connectez-vous à Azure en exécutant la commande
azd auth login
et en suivant l’invite :azd auth login
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). Il 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 Service flexible : accessible uniquement à partir du réseau virtuel. 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.
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 app settings: - AZURE_KEYVAULT_RESOURCEENDPOINT - AZURE_KEYVAULT_SCOPE - AZURE_MYSQL_CONNECTIONSTRING - AZURE_REDIS_CONNECTIONSTRING
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.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 JNDI (Java Naming and Directory Interface) dans le fichier context.xml du serveur JBoss.
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’application pour vérifier la source de données JNDI dans le serveur JBoss. Au cours de ce processus, vous découvrez comment accéder au shell SSH pour le conteneur JBoss.
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
Dans le terminal SSH, exécutez
$JBOSS_HOME/bin/jboss-cli.sh --connect
.Dans la connexion JBoss CLI, exécutez
ls subsystem=datasources/data-source
. Vous devriez voir la source de données générée automatiquement et intituléeAZURE_MYSQL_CONNECTIONSTRING_DS
.Obtenez le nom JNDI de la source de données avec
/subsystem=datasources/data-source=AZURE_MYSQL_CONNECTIONSTRING_DS:read-attribute(name=jndi-name)
. Vous disposez maintenant d’un nom JNDIjava:jboss/env/jdbc/AZURE_MYSQL_CONNECTIONSTRING_DS
, que vous pourrez utiliser ultérieurement dans votre code d’application.
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 /opt/eap/standalone/configuration/standalone.xml
ou si vous changez la configuration du serveur dans JBoss CLI, les modifications ne seront pas conservées après le redémarrage de l’application. Pour conserver vos modifications, utilisez un script de démarrage, comme illustré dans Configurer des sources de données pour une application Tomcat, JBoss ou Java SE dans Azure App Service
Vous rencontrez des problèmes ? Examinez la section Résolution des problèmes.
5. Modifier l’exemple de code et effectuer au redéploiement
Dans le codespace GitHub, démarrez une nouvelle session de conversation en cliquant sur la vue Conversation, puis sur +.
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
java:jboss/MySQLDS
et sa configuration.Demandez : « @workspace Je veux remplacer la source de données définie dans persistence.xml par une source de données JNDI existante dans JBoss. ». Copilot peut vous donner une suggestion de code similaire à celle fournie dans les étapes de Option 2 : sans GitHub Copilot ci-dessous, et même vous indiquer de faire la modification dans le fichier persistence.xml.
Ouvrez src/main/resources/META-INF/persistence.xml dans l’Explorateur et faites la modification suggérée pour JNDI.
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 ?
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
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/
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.
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 :
private static final Logger logger = Logger.getLogger(MethodHandles.lookup().lookupClass().getName());
@PersistenceContext
private EntityManager entityManager;
public List<Task> getAllTasks() {
logger.log(Level.INFO, "Finding all tasks. ");
return this.entityManager.createNamedQuery("findAllTasks", Task.class).getResultList();
}
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 l’erreur suivante dans l’Assistant création : « n’est pas autorisée à utiliser la fonctionnalité BYOL (apportez votre propre licence) ».
- La vue de déploiement du portail pour le serveur flexible Azure Database pour MySQL indique un état de conflit.
- La boîte de dialogue Créer une connexion affiche un bouton Créer sur Cloud Shell, mais il n’est pas activé.
- Mon application n’a pas pu démarrer et je vois « Accès refusé pour l’utilisateur... (utilisation du mot de passe : NON) » dans les journaux.
- L’exemple d’application déployée n’affiche pas l’application de liste des tâches.
- Je vois une erreur « Table "Tâche" existe déjà » dans les journaux de diagnostic.
Je vois l’erreur suivante dans l’Assistant création : « n’est pas autorisée à utiliser la fonctionnalité BYOL (apportez votre propre licence) » .
Si vous voyez l’erreur suivante : The subscription '701ea799-fb46-4407-bb67-9cbcf289f1c7' is not entitled to use the Bring Your Own License feature when creating the application
, cela signifie que vous avez sélectionné la licence Red Hat JBoss EAP 7/8 BYO dans la pile de serveurs web Java, mais que vous n’avez pas configuré votre compte Azure dans Red Hat Cloud Access, ou bien que vous n’avez pas de licence JBoss EAP active dans Red Hat Cloud Access.
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.
La boîte de dialogue Créer une connexion affiche un bouton Créer sur Cloud Shell, mais il n’est pas activé.
Vous pouvez également voir le message d’erreur suivant dans la boîte de dialogue : The database server is in Virtual Network and Cloud Shell can't connect to it. Please copy the commands and execute on an environment which can connect to the database server in Virtual Network.
L’automatisation du connecteur de service a besoin d’un accès réseau au serveur MySQL. Examinez les paramètres de mise en réseau de votre ressource de serveur MySQL et vérifiez que l’autorisation d’accès public à cette ressource via Internet à l’aide d’une adresse IP publique est sélectionnée au minimum. Le connecteur de services peut accéder au réseau à partir de là.
Si vous ne voyez pas cette case à cocher, vous avez peut-être créé le déploiement à l’aide de l’Assistant Application web + Base de données à la place, et le déploiement verrouille tous les accès du réseau public au serveur MySQL. Il n’existe aucun moyen de modifier la configuration. Étant donné que le conteneur Linux de l’application peut accéder à MySQL via l’intégration de réseau virtuel, vous pouvez installer Azure CLI dans la session SSH de l’application et exécuter les commandes Cloud Shell fournies ici.
L’exemple d’application déployée n’affiche pas l’application de liste des tâches.
Si vous voyez une page de présentation JBoss 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.
Mon application n’a pas pu démarrer et je vois « Accès refusé pour l’utilisateur... (utilisation du mot de passe : NON) » dans les journaux.
Cette erreur est probablement due au fait que vous n’avez pas ajouté le plug-in d’authentification sans mot de passe à la chaîne de connexion (consultez l’exemple de code Java pour Intégrer Azure Database pour MySQL avec le connecteur de services). Modifiez la chaîne de connexion MySQL en suivant les instructions de la section 3. Créez une connexion sans mot de passe.
Je vois une erreur « Table "Tâche" existe déjà » dans les journaux de diagnostic.
Vous pouvez ignorer cette erreur de mise en veille prolongée, car elle indique que le code de l’application est connecté à la base de données MySQL. L’application est configurée pour créer les tables nécessaires au démarrage (consultez src/main/resources/META-INF/persistence.xml). Lorsque l’application démarre la première fois, elle doit créer les tables correctement. Mais lors des redémarrages suivants, vous verrez cette erreur car les tables existent déjà.
Forum aux questions
- Quel est le coût de cette configuration ?
- Comment me connecter au serveur MySQL derrière le réseau virtuel avec d’autres outils ?
- Comment obtenir un jeton d’accès valide pour la connexion MySQL en utilisant l’authentification Microsoft Entra ?
- Comment le développement d’applications locales fonctionne-t-il avec GitHub Actions ?
- Je n’ai pas les autorisations pour créer une identité affectée par l’utilisateur
- Que puis-je faire avec GitHub Copilot dans mon codespace ?
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 P0v3. 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 D2ds. Il peut faire l’objet d’un scale-up ou d’un scale-down. 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 ?
Dans ce tutoriel, l’application App Service a déjà une connectivité réseau au serveur MySQL et peut s’authentifier auprès de Microsoft Entra en utilisant son identité managée affectée par le système. Vous pouvez vous connecter directement à MySQL à partir du conteneur d’application en exécutant les commandes suivantes dans la session SSH (obtenez vos valeurs pour <server>
, <user>
et <database>
dans le paramètre d’application AZURE_MYSQL_CONNECTIONSTRING
) :
apt-get update
apt-get install curl less mysql-client jq -y
mysql -h <server> --user <user> --database <database> --enable-cleartext-plugin --password=`curl "${IDENTITY_ENDPOINT}?resource=https://ossrdbms-aad.database.windows.net&api-version=2019-08-01" -H "X-IDENTITY-HEADER: $IDENTITY_HEADER" -s | jq -r '.access_token'`
Tenez compte des points suivants :
- Les outils que vous installez dans la session SSH ne sont pas conservés lors d’un redémarrage de l’application.
- Si vous avez suivi les étapes du portail et que vous avez configuré MySQL avec votre utilisateur Microsoft Entra en tant qu’administrateur, vous pouvez vous connecter à MySQL en utilisant l’utilisateur Microsoft Entra.
- Pour vous connecter depuis un outil de bureau comme MySQL Workbench, votre machine doit se trouver dans le réseau virtuel, par exemple une machine virtuelle Azure déployée dans le même réseau virtuel. Vous devez également configurer l’authentification séparément, avec une identité managée ou avec un utilisateur Microsoft Entra.
- Pour vous connecter depuis une machine d’un réseau local disposant d’une connexion VPN de site à site avec le réseau virtuel Azure, vous ne pouvez pas configurer l’authentification avec une identité managée, mais vous pouvez configurer l’authentification avec un utilisateur Microsoft Entra.
- Vous pouvez aussi intégrer Azure Cloud Shell et vous connecter en utilisant Azure CLI ou l’interface CLI de MySQL. Pour vous authentifier, vous pouvez configurer un utilisateur Microsoft Entra.
Comment obtenir un jeton d’accès valide pour la connexion MySQL en utilisant l’authentification Microsoft Entra ?
Pour un utilisateur Microsoft Entra, une identité managée affectée par le système ou une identité managée affectée par l’utilisateur qui est autorisée à accéder à la base de données MySQL; Azure CLI peut vous aider à générer un jeton d’accès. Dans le cas d’une identité managée, l’identité doit être configurée sur l’application App Service ou sur la machine virtuelle où vous exécutez Azure CLI.
# Sign in as a Microsoft Entra user
az login
# Sign in as the system-assigned managed identity
az login --identity
# Sign in as a user-assigned managed identity
az login --identity --username <client-id-of-user-assigned-identity>
# Get an access token
az account get-access-token --resource-type oss-rdbms
Si vous le souhaitez, vous pouvez aussi utiliser la commande Azure CLI az mysql flexible-server connect pour vous connecter à MySQL. Quand vous y êtes invité, utilisez le jeton d’accès comme mot de passe.
az mysql flexible-server connect -n <server-name-only> -u <user> -d <database> --interactive
Pour plus d’informations, consultez l’article suivant :
- Guide pratique pour utiliser des identités managées avec App Service et Azure Functions
- S’authentifier auprès d’Azure en utilisant Azure CLI
- Se connecter à Azure Database pour MySQL – Serveur flexible en utilisant Microsoft Entra ID
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 starter-no-infra
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.