Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Ce guide décrit ce que vous devez savoir quand vous souhaitez migrer une application Spring Boot existante vers Azure App Service.
Prémigration
Pour garantir la réussite de la migration, avant de commencer, effectuez les étapes d’évaluation et d’inventaire décrites dans les sections suivantes.
Basculer vers une plateforme prise en charge
App Service propose des versions spécifiques de Java SE. Pour garantir la compatibilité, migrez votre application vers l’une des versions prises en charge de son environnement actuel avant de poursuivre l’une des étapes restantes. Veillez à tester entièrement la configuration résultante. Utilisez la dernière version stable de votre distribution Linux dans de tels tests.
Remarque
Cette validation s’avère particulièrement importante si votre serveur actuel s’exécute sur un JDK non pris en charge (comme Oracle JDK ou IBM OpenJ9).
Pour obtenir votre version actuelle de Java, connectez-vous à votre serveur de production et exécutez la commande suivante :
java -version
Sur Azure App Service, les fichiers binaires pour Java 8 sont fournis à partir d’Eclipse Temurin. Pour Java 11, 17 et toutes les futures versions LTS de Java, App Service fournit la build Microsoft d’OpenJDK. Ces fichiers binaires sont disponibles gratuitement sur les sites suivants :
Inventorier les ressources externes
Identifiez les ressources externes, telles que les sources de données, les répartiteurs de messages JMS et les URL d’autres services. Dans les applications Spring Boot, vous pouvez généralement trouver la configuration de ces ressources dans le dossier src/main/directory , dans un fichier généralement appelé application.properties ou application.yml. En outre, vérifiez les variables d’environnement du déploiement de production pour connaître les paramètres de configuration pertinents.
Bases de données
Pour une application Spring Boot, les chaînes de connexion apparaissent généralement dans les fichiers de configuration lorsqu’elles dépendent d’une base de données externe. Voici un exemple à partir d’un fichier application.properties :
spring.datasource.url=jdbc:mysql://localhost:3306/mysql_db
spring.datasource.username=dbuser
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
Voici un exemple à partir d’un fichier application.yaml :
spring:
data:
mongodb:
uri: mongodb://mongouser:deepsecret@mongoserver.contoso.com:27017
Pour plus d’informations sur les scénarios de configuration possibles, consultez la documentation Spring Data :
Répartiteurs de messages JMS
Identifiez le répartiteur ou les répartiteurs en cours d’utilisation en recherchant les dépendances pertinentes dans le manifeste de build (généralement, un fichier pom.xml ou build.gradle ).
Par exemple, une application Spring Boot utilisant ActiveMQ contient généralement cette dépendance dans son fichier pom.xml :
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
Les applications Spring Boot utilisant des répartiteurs commerciaux contiennent généralement des dépendances directement sur les bibliothèques de pilotes JMS des répartiteurs. Voici un exemple à partir d’un fichier build.gradle :
dependencies {
...
compile("com.ibm.mq:com.ibm.mq.allclient:9.4.0.5")
...
}
Une fois que vous avez identifié le répartiteur ou les répartiteurs en cours d’utilisation, recherchez les paramètres correspondants. Dans les applications Spring Boot, vous pouvez généralement les trouver dans les fichiers application.properties et application.yml dans le répertoire de l’application.
Remarque
Microsoft recommande d’utiliser le flux d’authentification le plus sécurisé disponible. Le flux d’authentification décrit dans cette procédure, par exemple pour les bases de données, les caches, la messagerie ou les services IA, nécessite un niveau de confiance très élevé dans l’application et comporte des risques non présents dans d’autres flux. Utilisez ce flux uniquement lorsque des options plus sécurisées, telles que les identités managées pour les connexions sans mot de passe ou sans clé, ne sont pas viables. Pour les opérations d’ordinateur local, préférez les identités utilisateur pour les connexions sans mot de passe ou sans clé.
Voici un exemple ActiveMQ à partir d’un fichier application.properties :
spring.activemq.brokerurl=broker:(tcp://localhost:61616,network:static:tcp://remotehost:61616)?persistent=false&useJmx=true
spring.activemq.user=admin
spring.activemq.password=<password>
Pour plus d’informations sur la configuration d’ActiveMQ, consultez la documentation sur la messagerie Spring Boot.
Voici un exemple IBM MQ à partir d’un fichier application.yaml :
ibm:
mq:
queueManager: qm1
channel: dev.ORDERS
connName: localhost(14)
user: admin
password: <password>
Pour plus d’informations sur la configuration IBM MQ, consultez la documentation sur les composants IBM MQ Spring.
Identifier les caches externes
Identifiez les caches externes en cours d’utilisation. Fréquemment, Redis est utilisé via Spring Data Redis. Pour plus d’informations sur la configuration, consultez la documentation Spring Data Redis .
Déterminez si les données de session sont mises en cache via Spring Session en recherchant la configuration respective (en Java ou XML).
Fournisseurs d’identité
Identifiez les fournisseurs d’identité utilisés par votre application. Pour plus d’informations sur la configuration des fournisseurs d’identité, consultez les informations suivantes :
- Pour la configuration OAuth2, consultez la référence Spring Security.
- Pour obtenir la configuration d’Auth0 Spring Security, consultez la documentation Auth0 Spring Security.
- Pour la configuration de PingFederate Spring Security, consultez les instructions Auth0 PingFederate.
Toutes les autres ressources externes
Il n’est pas possible de décrire toutes les dépendances externes possibles dans ce guide. Il incombe à votre équipe de vérifier que chaque dépendance externe de votre application peut être satisfaite après une migration App Service.
Secrets d’inventaire
Mots de passe et chaînes sécurisées
Vérifiez toutes les propriétés et tous les fichiers de configuration et toutes les variables d’environnement sur le ou les déploiements de production pour les chaînes secrètes et les mots de passe. Dans une application Spring Boot, ces chaînes sont probablement trouvées dans application.properties ou application.yml.
Certificats d’inventaire
Documentez tous les certificats utilisés pour les points de terminaison SSL publics ou la communication avec les bases de données principales et d’autres systèmes. Vous pouvez voir tous les certificats présents sur les serveurs de production en exécutant la commande suivante :
keytool -list -v -keystore <path to keystore>
Déterminer si le système de fichiers est utilisé et de quelle manière
Toute utilisation du système de fichiers sur le serveur d’applications nécessite une reconfiguration ou, dans de rares cas, des modifications architecturales. Vous pouvez identifier une partie ou l’ensemble des scénarios suivants.
Contenu statique en lecture seule
Si votre application sert actuellement du contenu statique, vous avez besoin d’un autre emplacement pour celui-ci. Vous devez envisager de déplacer du contenu statique vers stockage Blob Azure et d’ajouter Azure Front Door pour des téléchargements rapides globalement. Pour plus d’informations, consultez Hébergement de sites web statiques dans Stockage Azure et Intégrer un compte Stockage Azure à Azure Front Door.
Cas spéciaux
Certains scénarios de production peuvent nécessiter des modifications supplémentaires ou imposer des limitations supplémentaires. Bien que ces scénarios soient peu fréquents, il est important de s’assurer qu’ils sont inapplicables à votre application ou correctement résolus.
Déterminer si l’application s’appuie sur des travaux planifiés
Les travaux planifiés, tels que les tâches du planificateur de quartz ou les travaux cron, ne peuvent pas être utilisés avec App Service. App Service ne vous empêche pas de déployer une application contenant des tâches planifiées en interne. Toutefois, si votre application a fait l’objet d’un scale-out, la même tâche planifiée peut s’exécuter plusieurs fois par période planifiée. Cette situation peut entraîner des conséquences inattendues.
Stockez tous les travaux planifiés, à l’intérieur ou en dehors du processus d’application.
Déterminer si votre application contient du code propre au système d’exploitation
Si votre application contient du code avec des dépendances vis-à-vis du système d’exploitation hôte, vous devez la refactoriser pour supprimer ces dépendances. Par exemple, vous devrez peut-être remplacer toute utilisation de / ou \ dans les chemins d'accès au système de fichiers par File.Separator ou Paths.get si votre application fonctionne sous Windows.
Identifier tous les processus/démons externes s’exécutant sur le ou les serveurs de production
Les processus exécutés en dehors du serveur d’applications, tels que les démons de surveillance, devront être migrés ailleurs ou éliminés.
Identifier la gestion des requêtes non HTTP ou de plusieurs ports
App Service ne prend en charge qu’un seul point de terminaison HTTP sur un seul port. Si votre application écoute plusieurs ports ou accepte des requêtes à l’aide de protocoles autres que HTTP, n’utilisez pas Azure App Service.
Migration
Paramétrer la configuration
Vérifiez que toutes les coordonnées de ressources externes (telles que les chaînes de connexion de base de données) et d’autres paramètres personnalisables peuvent être lues à partir de variables d’environnement. Si vous migrez une application Spring Boot, tous les paramètres de configuration doivent déjà être externalisables. Pour plus d’informations, consultez La configuration externalisée dans la documentation Spring Boot.
Voici un exemple qui référence une SERVICEBUS_CONNECTION_STRING variable d’environnement à partir d’un fichier application.properties :
spring.jms.servicebus.connection-string=${SERVICEBUS_CONNECTION_STRING}
spring.jms.servicebus.topic-client-id=contoso1
spring.jms.servicebus.idle-timeout=10000
Provisionner un plan App Service
Dans la liste des plans de service disponibles, sélectionnez le plan dont les spécifications répondent ou dépassent celles du matériel de production actuel.
Remarque
Si vous envisagez d’exécuter des déploiements de préproduction/contrôle de validité ou d’utiliser des emplacements de déploiement, le plan App Service doit inclure cette capacité supplémentaire. Nous vous recommandons d’utiliser des plans Premium ou plus élevés pour les applications Java.
Créer et déployer une ou plusieurs applications web
Vous devez créer une application web sur votre plan App Service (en choisissant « Java SE » comme pile d’exécution) pour chaque fichier JAR exécutable que vous envisagez d’exécuter.
Applications Maven
Si votre application est générée à partir d’un fichier POM Maven, utilisez le plug-in Webapp pour Maven pour créer l’application web et déployer votre application. Pour en savoir plus, consultez Démarrage rapide : créer une application Java sur Azure App Service.
Applications non-Maven
Si vous ne pouvez pas utiliser le plug-in Maven, vous devez provisionner l’application web par le biais d’autres mécanismes, comme :
Une fois l’application web créée, utilisez l’un des mécanismes de déploiement disponibles pour déployer votre application. Si possible, votre application doit être chargée sur /home/site/wwwroot/app.jar. Si vous ne souhaitez pas renommer votre fichier JAR en app.jar, vous pouvez charger un script shell avec la commande pour exécuter votre fichier JAR. Collez ensuite le chemin complet de ce script dans la zone de texte Fichier de démarrage dans la section Configuration du portail. Le script de démarrage ne s’exécute pas dans le répertoire dans lequel il est placé. Par conséquent, utilisez toujours des chemins d’accès absolus pour référencer les fichiers dans votre script de démarrage (par exemple : java -jar /home/myapp/myapp.jar).
Migrer des options de runtime JVM
Si votre application nécessite des options d’exécution spécifiques, utilisez le mécanisme le plus approprié pour les spécifier.
Configurer un domaine personnalisé et SSL
Si votre application web est visible sur un domaine personnalisé, elle devra être mappée à ce domaine. Pour plus d’informations, consultez Tutoriel : Mapper un nom DNS personnalisé existant à Azure App Service.
Ensuite, vous devez lier le certificat SSL pour ce domaine à votre application web App Service. Pour plus d’informations, consultez Sécuriser un nom DNS personnalisé avec une liaison SSL dans Azure App Service.
Importer des certificats d'arrière-plan
Tous les certificats permettant de communiquer avec les systèmes principaux, tels que les bases de données, doivent être mis à la disposition d’App Service. Pour plus d’informations, consultez Ajouter un certificat SSL dans App Service.
Migrer des coordonnées de ressources externes et d’autres paramètres
Procédez comme suit pour migrer des chaînes de connexion et d’autres paramètres.
Remarque
Pour tous les paramètres d’application Spring Boot paramétrés avec des variables dans la section Paramétrer la configuration , ces variables d’environnement doivent être définies dans la configuration de l’application. Tous les paramètres d’application Spring Boot qui ne sont pas explicitement paramétrés avec des variables d’environnement peuvent toujours être remplacés par le biais de la configuration de l’application. Par exemple:
spring.jms.servicebus.connection-string=${CUSTOMCONNSTR_SERVICE_BUS}
spring.jms.servicebus.topic-client-id=contoso1
spring.jms.servicebus.idle-timeout=1800000
Migrer des tâches planifiées
Pour exécuter des travaux planifiés sur Azure, envisagez d’utiliser un déclencheur minuteur pour Azure Functions. Vous n’avez pas besoin de migrer le code de la tâche lui-même dans une fonction. La fonction peut simplement appeler une URL dans votre application pour déclencher la tâche. Si ces exécutions de travaux doivent être appelées dynamiquement et/ou suivies de manière centralisée, envisagez d’utiliser Spring Batch.
Vous pouvez également créer une application de logique avec un déclencheur de récurrence pour appeler l’URL sans écrire de code en dehors de votre application. Pour plus d’informations, consultez Vue d’ensemble : Qu’est-ce qu’Azure Logic Apps ? et Créer, planifier et exécuter des tâches et des workflows récurrents avec le déclencheur Périodicité dans Azure Logic Apps.
Remarque
Pour empêcher toute utilisation malveillante, vous devrez probablement veiller à ce que le point de terminaison d’appel de tâche demande des informations d’identification. Ainsi, la fonction du déclencheur a besoin de fournir les informations d’identification.
Migrer et activer le fournisseur d’identité
Si votre application nécessite une authentification ou une autorisation, vérifiez qu’elle est configurée pour accéder au fournisseur d’identité à l’aide des instructions suivantes :
- Si le fournisseur d’identité est l’ID Microsoft Entra, aucune modification ne doit être nécessaire.
- Si le fournisseur d’identité est une forêt Active Directory locale, envisagez d’implémenter une solution d’identité hybride avec l’ID Microsoft Entra. Pour plus d’informations, consultez la documentation sur l’identité hybride.
- Si le fournisseur d’identité est une autre solution locale, telle que PingFederate, consultez la rubrique Installation personnalisée de Microsoft Entra Connect pour configurer la fédération avec l’ID Microsoft Entra. Vous pouvez également utiliser Spring Security pour utiliser votre fournisseur d’identité via OAuth2/OpenID Connect ou SAML.
Redémarrage et test de détection de fumée
Enfin, vous avez besoin de redémarrer votre application web pour appliquer tous les changements de configuration. Une fois le redémarrage terminé, vérifiez que votre application s’exécute correctement.
Après la migration
Maintenant que votre application a migré vers Azure App Service, vous devez vérifier qu’elle fonctionne comme prévu. Une fois que vous avez fait cela, nous avons des recommandations pour vous qui peuvent rendre votre application plus native dans le cloud.
Recommandations
Si vous avez choisi d’utiliser le répertoire /home pour le stockage de fichiers, envisagez de le remplacer par Stockage Azure.
Si vous avez une configuration dans le répertoire /home qui contient des chaînes de connexion, des clés SSL et d’autres informations secrètes, envisagez d’utiliser Azure Key Vault et/ou l’injection de paramètres avec les paramètres d’application le cas échéant.
Considérez l’utilisation de créneaux de déploiement pour des déploiements fiables sans interruption.
Concevez et implémentez une stratégie DevOps. Pour maintenir la fiabilité tout en augmentant votre vitesse de développement, envisagez d’automatiser les déploiements et les tests avec Azure Pipelines. Lorsque vous utilisez des emplacements de déploiement, vous pouvez automatiser le déploiement vers un emplacement suivi de l’échange d’emplacement.
Concevez et implémentez une stratégie de continuité de l’activité et de reprise d’activité. Pour les applications stratégiques, envisagez une architecture de déploiement multirégion.