Partager via


Outil Azure Migrate d’évaluation des applications et du code pour Java

Ce guide explique comment utiliser l’outil Azure Migrate d’évaluation des applications et du code pour Java afin d’évaluer et de déplacer n’importe quel type d’application Java vers une autre plateforme. L’outil vous permet d’évaluer si l’application est prête à un changement de plateforme, et à une migration vers Azure. Cet outil est proposé en tant qu’interface CLI (interface de ligne de commande) et évalue les fichiers binaires d’applications Java et le code source pour identifier les opportunités de replatformation et de migration pour Azure. Il vous aide à moderniser et à déplacer vers une autre plateforme les applications Java, à grande échelle, en identifiant les cas d’usage et les modèles de code courants ainsi qu’en préconisant des changements.

L’outil découvre quelles sont les technologies utilisées par les applications via l’analyse du code statique, il fournit l’estimation du niveau d’effort nécessaire, et accélère le déplacement du code vers une autre plateforme pour vous aider à hiérarchiser et à migrer les applications Java vers Azure. À l’aide d’un ensemble de moteurs et de règles, il peut découvrir et évaluer différentes technologies telles que Java 11, Java 17, Jakarta EE, Spring, Hibernate, Java Message Service (JMS), etc. Il vous aide ensuite à changer la plateforme de l’application Java vers différentes cibles Azure (Azure App Service, Azure Kubernetes Service et Azure Container Apps) à l’aide de règles de changement de plateforme Azure spécifiques.

Cet outil est en open source et est basé sur WindUp, un projet créé par Red Hat et publié sous la licence Eclipse Public License.

Vue d’ensemble

L’outil est conçu pour aider les organisations à moderniser leurs applications Java de manière à réduire les coûts et à accélérer l’innovation. L’outil utilise des techniques d’analyse avancées pour comprendre la structure et les dépendances des applications Java. Il fournit des conseils d’aide sur la refactorisation et la migration des applications vers Azure.

L’avoir à vos côtés permet d’effectuer les tâches suivantes :

  • Découvrir les technologies utilisées : évaluez rapidement les technologies utilisées par une application. Cette découverte est utile si vous avez des applications héritées avec peu de documentation, et si vous souhaitez savoir quelles sont les technologies qu’elles utilisent.
  • Évaluer le code en fonction d’une cible spécifique : évaluez une application en fonction d’une cible Azure spécifique. Déterminez quels sont les efforts nécessaires et les modifications à effectuer pour déplacer vos applications vers une autre plateforme, notamment Azure.

Cibles prises en charge

L’outil contient des règles qui vous aident à changer la plateforme de vos applications pour pouvoir déployer et utiliser différents services Azure.

Les règles utilisées par l’application Azure Migrate et l’évaluation du code sont regroupées en fonction d’une cible. Une cible est l’endroit ou la façon dont l’application s’exécute, ainsi que les besoins généraux et les attentes. Lors de l’évaluation d’une application, vous pouvez choisir plusieurs cibles. Le tableau suivant décrit les cibles disponibles :

Cible Description Identifiant
Azure App Service Meilleures pratiques de déploiement d’une application sur Azure App Service. azure-appservice
Azure Kubernetes Service Meilleures pratiques de déploiement d’une application sur Azure Kubernetes Service. azure-aks
Azure Container Apps Meilleures pratiques de déploiement d’une application sur Azure Container Apps. azure-container-apps
État de préparation au cloud Bonnes pratiques générales pour préparer un cloud d’application (Azure). cloud-readiness
Découverte Identifie l’utilisation de la technologie, comme les bibliothèques et les frameworks. discovery
Linux Bonnes pratiques générales pour préparer une application à Linux. linux
OpenJDK 11 Bonnes pratiques générales pour l’exécution d’une application Java 8 avec Java 11. openjdk11
OpenJDK 17 Bonnes pratiques générales pour l’exécution d’une application Java 11 avec Java 17. openjdk17
OpenJDK 21 Bonnes pratiques générales pour l’exécution d’une application Java 17 avec Java 21. openjdk21

Lorsque l’outil évalue l’état de préparation au cloud et les services Azure associés, il peut également signaler des informations utiles sur l’utilisation potentielle de différents services Azure. La liste suivante présente quelques-uns des services couverts :

  • Bases de données Azure
  • Azure Service Bus
  • Stockage Azure
  • Azure Content Delivery Network
  • Azure Event Hubs
  • Azure Key Vault
  • Azure Front Door

Télécharger

Pour utiliser l’interface CLI appcat, vous devez télécharger le fichier ZIP décrit dans la section suivante et disposer d’une installation de JDK 11 ou JDK 17 compatible sur votre ordinateur. L’interface CLI appcat s’exécute sur n’importe quel environnement compatible avec Java tel que Windows, Linux ou Mac, à la fois pour le matériel Intel, Arm et Apple Silicon. Nous vous recommandons d’utiliser la build Microsoft d’OpenJDK.

Pour plus d’informations, consultez la section Notes de publication.

Problèmes connus

Certaines règles peuvent ne pas être déclenchées lors de l’analyse d’expressions lambda spécifiques. Pour plus d’informations, consultez le problème GitHub.

L’exécution de appcat dans un environnement non Unicode avec des caractères double octets complexes entraîne une altération. Pour obtenir des solutions de contournement, consultez le problème GitHub.

Versions précédentes

Les versions précédentes suivantes sont également disponibles en téléchargement :

Démarrage

Pour exécuter appcat, vérifiez que vous disposez d’un JDK pris en charge. L’outil prend en charge les JDK suivants :

  • Build Microsoft d’OpenJDK 11
  • Build Microsoft d’OpenJDK 17
  • Eclipse Temurin™ JDK 11
  • Eclipse Temurin™ JDK 17

Une fois que vous avez installé un JDK valide, vérifiez que son répertoire d’installation est correctement configuré dans la variable d’environnement JAVA_HOME.

Pour continuer, téléchargez et décompressez le package dans un dossier de votre choix. Vous obtenez ensuite la structure de répertoires suivante :

appcat-cli-<version>    # APPCAT_HOME
  ├── README.md
  ├── bin
  │   ├── appcat
  │   └── appcat.bat
  ├── docs
  │   └── appcat-guide.html
  └── samples
      ├── airsonic.war
      ├── run-assessment
      ├── run-assessment-custom-rules
      ├── run-assessment-exclude-packages
      ├── run-assessment-no-code-report
      ├── run-assessment-openjdk21
      ├── run-assessment-zip-report
      └── run-discovery
  • docs : ce répertoire contient la documentation de appcat.
  • bin : ce répertoire contient les exécutables CLI d’appcat (pour Windows/Linux/Mac).
  • samples : ce répertoire contient un exemple d’application ainsi que plusieurs scripts permettant d’exécuter appcat sur l’exemple d’application.

Pour exécuter l’outil, ouvrez une session de terminal, puis tapez la commande suivante à partir du répertoire $APPCAT_HOME/bin :

./appcat --help

Pour exécuter l’outil depuis n’importe quel emplacement de votre ordinateur, configurez le répertoire $APPCAT_HOME/bin dans votre variable d’environnement PATH, puis redémarrez votre session de terminal.

Documentation

Les guides suivants fournissent la documentation principale de appcat pour Java :

Découvrir l’utilisation de la technologie et la préparation du cloud sans service Azure à l’esprit

La découverte des technologies et des cibles de préparation du cloud fournit un aperçu de la mise en forme et de la modernisation des applications vers le cloud. L’outil analyse l’application et ses composants pour acquérir une compréhension complète de sa structure, de son architecture et de ses dépendances. Il trouve également des problèmes potentiels qui peuvent être difficiles dans un environnement cloud. La cible discovery est particulièrement utilisée pour créer un inventaire détaillé de l’application et de ses composants. Cet inventaire sert de base pour une analyse et une planification plus approfondies. Pour plus d’informations, consultez la section du Rapport de découverte.

Utilisez la commande suivante pour lancer la découverte et l’état de préparation au cloud :

./appcat \
    --input ./<my-application-source-path or my-application-jar-war-ear-file> \
    --target discovery cloud-readiness

Ce type de rapport est utile lorsque vous n’avez pas de service Azure spécifique en tête pour le déploiement de votre application.

L’outil effectue toujours discovery, que vous incluiez ou non cette valeur dans le paramètre --target.

Évaluer une application Java

La phase d’évaluation est celle où l’interface CLI appcat analyse l’application et ses composants pour déterminer si un changement de plateforme est approprié ainsi que pour identifier les éventuels problèmes ou limitations. Cette phase implique l’analyse du code de l’application et la vérification de sa conformité avec les cibles sélectionnées.

Vous pouvez sélectionner plusieurs cibles à l’aide d’une liste de valeurs délimitées par un espace avec l’argument --target.

Pour vérifier quelles sont les cibles disponibles, exécutez la commande suivante :

./appcat --listTargetTechnologies

Cette commande produit une sortie semblable à celle de l’exemple suivant :

Available target technologies:
    azure-aks
    azure-appservice
    azure-container-apps
    cloud-readiness
    discovery
    linux
    openjdk11
    openjdk17
    openjdk21

Vous pouvez ensuite exécuter appcat ou une combinaison de cibles disponibles, comme le montre l’exemple suivant :

./appcat \
    --input ./<my-application-source-path or my-application-jar-war-ear-file> \
    --target cloud-readiness linux azure-appservice

Vous pouvez exécuter appcat en utilisant l’une des cibles OpenJDK disponibles, comme le montre l’exemple suivant :

./appcat \
    --input ./<my-application-source-path or my-application-jar-war-ear-file> \
    --target openjdk11

Pour les cibles OpenJDK (Java), nous vous recommandons de choisir une seule cible à la fois.

Recommandation de cibles pour l’évaluation Azure

Chaque fois que vous évaluez une application pour le déploiement Azure, nous vous recommandons de commencer par les cibles suivantes :

  • discovery
  • cloud-readiness

Spécifiez également un service Azure pour le déploiement, tel que azure-appservice ou azure-container-apps.

Si vous envisagez de déplacer une application d’un environnement Windows vers une machine virtuelle ou un conteneur Linux, nous vous recommandons également d’ajouter la cible linux.

Si vous envisagez de déplacer une application d’une version antérieure du JDK vers une version plus récente, nous vous recommandons de choisir la prochaine version majeure de la version précédente utilisée par l’application. Par exemple, utilisez openjdk11 lorsque votre application est actuellement déployée avec Java 8.

Obtenir des résultats à partir d’appcat

Le résultat des phases de découverte et d’évaluation est un rapport détaillé qui fournit une feuille de route sur le changement de plateforme et la modernisation de l’application Java ainsi que des recommandations relatives au service Azure et à l’approche du changement de plateforme. Le rapport sert de base aux phases suivantes du processus de changement de plateforme. Il permet aux organisations d’en savoir plus sur les efforts nécessaires à fournir pour une telle transformation, et de prendre des décisions sur la façon de moderniser leurs applications afin d’en tirer le maximum d’avantages.

Le rapport généré par appcat fournit une vue d’ensemble complète de l’application et de ses composants. Vous pouvez utiliser ce rapport afin d’obtenir des insights sur la structure et les dépendances de l’application ainsi que pour déterminer la pertinence d’un changement de plateforme et d’une modernisation de celle-ci.

Les sections suivantes fournissent plus d’informations sur le rapport.

Résumé de l’analyse

La page d’arrivée du rapport liste toutes les technologies utilisées dans l’application. Le tableau de bord fournit un résumé de l’analyse notamment des informations sur le nombre d’incidents de transformation, les catégories d’incidents ou les story points.

Capture d’écran du rapport sous forme de résumé appcat.

Quand vous effectuez un zoom avant sur le graphique en secteurs Incidents par catégorie, vous pouvez voir le nombre d’incidents par catégorie : Obligatoire, Facultatif, Potentiel et Informations.

Le tableau de bord montre également les story points. Les story points sont une métrique abstraite couramment utilisée en Agile software development afin d’estimer le niveau d’effort nécessaire pour implémenter une fonctionnalité ou un changement. appcat utilise des story points pour indiquer le niveau d’effort nécessaire à la migration d’une application particulière. Les story points ne se traduisent pas nécessairement en heures de travail, mais la valeur doit être cohérente d’une tâche à l’autre.

Capture d’écran du rapport d’incident dans le résumé AppCAT.

Rapport de découverte

Le rapport de découverte est un rapport généré durant la phase de découverte. Il montre la liste des technologies utilisées par l’application dans la catégorie Informations. Ce rapport vous informe simplement sur l’utilisation des technologies découvertes par appcat.

Capture d’écran du rapport de découverte appcat.

Rapport d’évaluation

Le rapport d’évaluation fournit une vue d’ensemble des problèmes de transformation à résoudre pour migrer l’application vers Azure.

Ces problèmes, également appelés incidents, sont associés à un niveau de gravité (Obligatoire, Facultatif, Potentiel ou Information), un niveau d’effort et un nombre de story points. Les story points sont déterminés par le calcul du nombre d’incidents multiplié par le niveau d’effort nécessaire à la résolution du problème.

Capture d’écran du rapport d’évaluation AppCAT.

Informations détaillées sur un problème spécifique

Pour chaque incident, vous pouvez obtenir plus d’informations (détails du problème, contenu de la règle, etc.) en le sélectionnant simplement. Vous obtenez également la liste de tous les fichiers affectés par cet incident.

Capture d’écran du rapport des détails d’un problème AppCAT.

Puis, pour chaque fichier ou classe affectée par l’incident, vous pouvez accéder directement au code source afin de mettre en évidence la ligne de code à l’origine du problème.

Capture d’écran du rapport des problèmes de code AppCAT.

Règles personnalisées

Vous pouvez considérer appcat comme un moteur de règles. Il utilise des règles pour extraire des fichiers à partir d’archives Java, décompile les classes Java, analyse et classifie les types de fichiers, analyse ces fichiers, et génère les rapports. Dans appcat, les règles sont définies sous la forme d’un ensemble de règles. Un ensemble de règles est une collection de règles individuelles qui définissent des problèmes ou des modèles spécifiques que appcat peut détecter au cours de l’analyse.

Ces règles sont définies en XML, et utilisent le modèle de règle suivant :

when (condition)
    perform (action)
    otherwise (action)

appcat fournit un ensemble complet de règles de migration standard. Dans la mesure où les applications peuvent contenir des bibliothèques ou des composants personnalisés, appcat vous permet d’écrire vos propres règles pour identifier l’utilisation des composants ou des logiciels couverts par l’ensemble de règles existant.

Pour écrire une règle personnalisée, vous utilisez un langage dédié au format XML. Par exemple, vous souhaitez obtenir une règle qui identifie l’utilisation du pilote JDBC PostgreSQL dans une application Java, et qui suggère l’utilisation d’Azure PostgreSQL - Serveur flexible à la place. Vous avez besoin d’une règle pour rechercher le pilote JDBC PostgreSQL défini dans un fichier pom.xml Maven ou un fichier Gradle, par exemple la dépendance affichée dans l’exemple suivant :

<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <scope>runtime</scope>
</dependency>

Pour détecter l’utilisation de cette dépendance, la règle utilise les balises XML suivantes :

  • ruleset : identificateur unique de l’ensemble de règles. Un ensemble de règles est une collection de règles liées à une technologie spécifique.
  • targetTechnology : technologie ciblée par la règle. Dans ce cas, la règle cible les services Azure App, AKS (Azure Kubernetes Service) et Azure Container Apps.
  • rule : élément racine d’une seule règle.
  • when : condition à remplir pour permettre le déclenchement de la règle.
  • perform : action à effectuer quand la règle se déclenche.
  • hint : message à afficher dans le rapport, catégorie (Informations, Facultatif ou Obligatoire) et niveau d’effort nécessaire à la résolution du problème, allant de 1 (facile) à 13 (difficile).

Le code XML suivant montre la définition de la règle personnalisée :

<ruleset id="azure-postgre-flexible-server"
         xmlns="http://windup.jboss.org/schema/jboss-ruleset"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://windup.jboss.org/schema/jboss-ruleset http://windup.jboss.org/schema/jboss-ruleset/windup-jboss-ruleset.xsd">
    <metadata>
        <description>Recommend Azure PostgreSQL Flexible Server.</description>
        <dependencies>
            <addon id="org.jboss.windup.rules,windup-rules-xml,3.0.0.Final"/>
        </dependencies>
        <targetTechnology id="azure-appservice"/>
        <targetTechnology id="azure-aks"/>
        <targetTechnology id="azure-container-apps"/>
    </metadata>
    <rules>
        <rule id="azure-postgre-flexible-server">
            <when>
                <project>
                    <artifact groupId="org.postgresql" artifactId="postgresql"/>
                </project>
            </when>
            <perform>
                <hint title="Azure PostgreSQL Flexible Server" category-id="mandatory" effort="7">
                    <message>The application uses PostgreSQL. It is recommended to use Azure PostgreSQL Flexible Server instead.</message>
                    <link title="Azure PostgreSQL Flexible Server documentation" href="https://learn.microsoft.com/azure/postgresql/flexible-server/overview"/>
                </hint>
            </perform>
        </rule>
    </rules>
</ruleset>

Après avoir exécuté cette règle via appcat, réexécutez l’analyse pour passer en revue le rapport généré. Comme pour les autres incidents, le rapport d’évaluation liste les problèmes identifiés et les fichiers affectés liés à cette règle.

Capture d’écran de l’outil appcat avec une règle en cours d’exécution.

Le guide complet du développement de règles est disponible sur azure.github.io/appcat-docs/rules-development-guide.

Notes de publication

6.3.9.0

Cette version contient les correctifs suivants et inclut un ensemble de nouvelles règles. Pour plus d’informations, voir plus bas.

Mises à jour générales

  • Modifications intégrées du référentiel en amont Windup (version 6.3.9.Finale).
  • Les liens rompus résolus dans les descriptions des règles et le texte d’aide ont été résolus.

Règles

  • File d’attente de messages Azure : mise à jour et ajout de nouvelles règles pour azure-message-queue-rabbitmq et azure-message-queue-amqp.
  • Azure Service Bus : a introduit une règle de détection pour Azure Service Bus.
  • MySQL et PostgreSQL : règles de détection de dépendance affinées.
  • Règles Azure AWS : règles ajustées et améliorées.
  • S3 Spring Starter : ajout d’une règle de détection pour S3 Spring Starter.
  • RabbitMQ Spring JMS : ajout d’une règle de détection pour RabbitMQ Spring JMS.
  • Règles de journalisation : règles de journalisation mises à jour et affinées.
  • Règle de stockage local : mise à jour et amélioration de la règle de stockage local.
  • Règle de système de fichiers Azure : mise à jour et amélioration de la règle du système de fichiers Azure.

Bibliothèques

  • Mise à jour de différentes bibliothèques pour résoudre les vulnérabilités de sécurité.

6.3.0.9

Cette version contient les correctifs suivants et inclut un ensemble de nouvelles règles. Pour plus d’informations, voir plus bas.

  • Résolution d’un problème avec la règle de localhost-java-00001.
  • Introduction de nouvelles règles d’identification des technologies telles que AWS S3, AWS SQS, Alibaba Cloud OSS, Alibaba Cloud SMS, Alibaba Scheduler X, Alibaba Cloud Seata et Alibaba Rocket MQ.
  • Mise à jour du azure-file-system-02000 pour prendre désormais en charge les extensions de fichier xml.
  • Mise à niveau de différentes bibliothèques pour résoudre les vulnérabilités de sécurité.

6.3.0.8

Auparavant, un ensemble de cibles était activé par défaut, ce qui rendait difficile pour certains clients d’évaluer des applications volumineuses présentant trop d’incidents liés à des problèmes moins critiques. Pour réduire le bruit dans les rapports, les utilisateurs doivent désormais spécifier plusieurs cibles, avec le paramètre --target, lors de l’exécution de appcat, en leur donnant la possibilité de sélectionner uniquement les cibles qui leur importent.

6.3.0.7

Version en disponibilité générale de l’évaluation des applications et du code Azure Migrate.

Licence

L’outil Azure Migrate d’évaluation des applications et du code pour Java est un outil open source gratuit, distribué sous licence dans le cadre de la même licence que celle du projet WindUp en amont.

Forum aux questions

Q : Où puis-je télécharger la dernière version de l’outil Azure Migrate d’évaluation des applications et du code pour Java ?

Vous pouvez télécharger appcat à partir de aka.ms/appcat/azure-appcat-cli-latest.zip.

Q : Où puis-je trouver plus d’informations sur l’outil Azure Migrate d’évaluation des applications et du code pour Java ?

Quand vous téléchargez appcat, vous obtenez un répertoire docs contenant toutes les informations dont vous avez besoin pour commencer.

Q : Où puis-je trouver les règles spécifiques à Azure ?

Toutes les règles Azure sont disponibles dans le référentiel GitHub des ensembles de règles Appcat.

Q : Où puis-je trouver plus d’informations sur la création de règles personnalisées ?

Consultez le Guide du développement de règles pour plus d’informations sur l’outil Azure Migrate d’évaluation des applications et du code pour Java.

Q : Où puis-je obtenir de l’aide pour créer des règles personnalisées ?

Le meilleur moyen d’obtenir de l’aide consiste à signaler un problème sur le référentiel GitHub appcat-rulesets.