Condividi tramite


Valutazione di applicazioni e codice di Azure Migrate per Java

Nota

È stata rilasciata una nuova versione dell'applicazione Azure Migrate e della valutazione del codice per Java, versione 7.x in anteprima, basata su un nuovo motore di analizzatore. Per scaricare ed sperimentare il nuovo motore, disponibile per Windows, Linux e macOS, vedere l'applicazione e la valutazione del codice di Azure Migrate per Java versione 7

Questa guida descrive come usare l'applicazione Azure Migrate e lo strumento di valutazione di applicazioni e codice per Java per valutare e trasferire su altre piattaforme qualsiasi tipo di applicazione Java. Lo strumento consente di valutare l'idoneità delle applicazioni per il trasferimento su altre piattaforme e la migrazione ad Azure. Questo strumento viene offerto come interfaccia della riga di comando (interfaccia della riga di comando) e valuta i file binari dell'applicazione Java e il codice sorgente per identificare le opportunità di riplatforming e migrazione per Azure. Consente di modernizzare e trasferire su altre piattaforme applicazioni Java su larga scala identificando i casi d'uso e i modelli di codice comuni e proponendo le modifiche consigliate.

Lo strumento individua l'utilizzo della tecnologia delle applicazioni tramite l'analisi statica del codice, supporta la stima dell’impegno e accelera il trasferimento su altre piattaforme del codice, consentendo di classificare e spostare le applicazioni Java in Azure. Dotato di un set di motori e regole, può individuare e valutare tecnologie diverse, ad esempio Java 11, Java 17, Jakarta EE, Spring, Hibernate, Java Message Service (JMS) e altro ancora. Consente quindi di riformformare l'applicazione Java in destinazioni di Azure diverse (servizio app Azure, servizio Azure Kubernetes e app di Azure Container) con regole di riplatforming di Azure specifiche.

Si tratta di uno strumento open source, basato su WindUp, un progetto creato da Red Hat e pubblicato con Eclipse Public License.

Panoramica

Lo strumento è progettato per aiutare le organizzazioni a modernizzare le proprie applicazioni Java in modo da ridurre i costi e consentire un'innovazione più rapida. Lo strumento usa tecniche di analisi avanzate per comprendere la struttura e le dipendenze di qualsiasi applicazione Java e fornisce indicazioni su come effettuare il refactoring e la migrazione delle applicazioni ad Azure.

Lo strumento consente di effettuare le attività seguenti:

  • Individuare l'utilizzo della tecnologia: vedere rapidamente quali tecnologie usano un'applicazione. L'individuazione è utile se si dispone di applicazioni legacy senza molta documentazione e si vuole sapere quali tecnologie usano.
  • Valutare il codice in una destinazione specifica: valutare un'applicazione per una destinazione di Azure specifica. Controllare l’impegno e le modifiche da apportare per trasferire le applicazioni da altre piattaforme in Azure.

Destinazioni supportate

Lo strumento contiene regole che consentono di trasferire ad altre piattaforme le applicazioni, in modo da poter distribuire e usare i servizi di Azure seguenti.

Le regole usate da valutazione di applicazioni e codice di Azure Migrate vengono raggruppate in base a una destinazione. Una destinazione indica dove e come viene eseguita l'applicazione, oltre alle esigenze e alle aspettative generali. Quando si valuta un'applicazione, è possibile scegliere più destinazioni. La tabella seguente descrive le destinazioni disponibili:

Destinazione Descrizione ID
Servizio app di Azure Procedure consigliate per la distribuzione di un'app nel servizio app di Azure. azure-appservice
Servizio Azure Kubernetes Procedure consigliate per la distribuzione di un'app nel servizio Azure Kubernetes. azure-aks
App contenitore di Azure Procedure consigliate per la distribuzione di un'app in App contenitore di Azure. azure-container-apps
Idoneità del cloud Procedure generali consigliate per la preparazione di un'applicazione Cloud (Azure). cloud-readiness
Individuazione Identificazione dell'utilizzo della tecnologia come librerie e framework. discovery
Linux Procedure generali consigliate per la preparazione di un'applicazione Linux. linux
OpenJDK 11 Procedure generali consigliate per l'esecuzione di un'applicazione Java 8 con Java 11. openjdk11
OpenJDK 17 Procedure generali consigliate per l'esecuzione di un'applicazione Java 11 con Java 17. openjdk17
OpenJDK 21 Procedure generali consigliate per l'esecuzione di un'applicazione Java 17 con Java 21. openjdk21

Quando lo strumento valuta l'idoneità del cloud e dei servizi di Azure correlati, può anche segnalare informazioni utili per il potenziale utilizzo di servizi di Azure diversi. L'elenco seguente mostra alcuni dei servizi offerti:

  • Database di Azure
  • Bus di servizio di Azure
  • Archiviazione di Azure
  • Rete di distribuzione dei contenuti di Azure
  • Hub eventi di Azure
  • Azure Key Vault
  • Frontdoor di Azure

Scarica

Per usare l'interfaccia della riga di comando appcat è necessario scaricare il file ZIP descritto nella sezione successiva e avere un'installazione compatibile di JDK 11 o JDK 17 nel computer. L'interfaccia della riga di comando appcat viene eseguita in qualsiasi ambiente compatibile con Java, come Windows, Linux o Mac, sia con hardware Intel e Arm che Apple Silicon. Si consiglia di usare Microsoft Build of OpenJDK.

Per altre informazioni, vedere la sezione Note sulla versione.

Problemi noti

Alcune regole potrebbero non essere attivate durante l'analisi di espressioni Lambda specifiche. Per altre informazioni, vedere il Problema in GitHub.

L'esecuzione di appcat in un ambiente non Unicode con caratteri a doppio byte complessi causerà un danneggiamento. Per le soluzioni alternative, vedere il Problema di GitHub.

Versioni precedenti

Per il download sono disponibili anche le versioni precedenti seguenti:

Operazioni preliminari

Per eseguire appcat, assicurarsi di avere installato un JDK supportato. Lo strumento supporta i JDK seguenti:

  • Microsoft Build di OpenJDK 11
  • Microsoft Build di OpenJDK 17
  • EclipseTemo™ JDK 11
  • EclipseTemo™ JDK 17

Dopo aver installato un JDK valido, assicurarsi che la JAVA_HOME directory di installazione sia configurata correttamente nella variabile di ambiente.

Per continuare, scaricare e decomprimere il pacchetto in una cartella di propria scelta. Si ottiene quindi la struttura di directory seguente:

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: questa directory contiene la documentazione di appcat.
  • bin: questa directory contiene gli appcateseguibili dell'interfaccia della riga di comando (per Windows/Linux/Mac).
  • esempi: questa directory contiene un'applicazione di esempio e diversi script da eseguire appcat nell'applicazione di esempio.

Per eseguire lo strumento, aprire una sessione del terminale e digitare il comando seguente dalla directory $APPCAT_HOME/bin:

./appcat --help

Per eseguire lo strumento da qualsiasi punto del computer, configurare la directory $APPCAT_HOME/bin nella PATHvariabile di ambiente e quindi riavviare la sessione del terminale.

Documentazione

Le guide seguenti forniscono la documentazione principale per appcat per Java:

Individuare l'utilizzo della tecnologia e l'idoneità del cloud senza considerare un servizio di Azure

L'individuazione delle tecnologie e delle destinazioni con idoneità del cloud fornisce informazioni dettagliate sulla modernizzazione e sul trasferimento ad altre piattaforme delle applicazioni nel cloud. Lo strumento analizza l'applicazione e i relativi componenti per acquisire una comprensione completa della struttura, dell'architettura e delle dipendenze. Rileva anche potenziali problemi di difficile soluzione in un ambiente cloud. In particolare la destinazione discovery viene usata per creare un inventario dettagliato dell'applicazione e dei relativi componenti. Questo inventario serve da base per ulteriori analisi e pianificazioni. Per altre informazioni consultare la sezione Report di individuazione.

Usare il comando seguente per avviare l'individuazione e l’idoneità del cloud:

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

Questo tipo di report è utile quando non si considera un servizio specifico di Azure in cui distribuire l'applicazione.

Lo strumento esegue sempre discovery, a prescindere dall’inclusione di tale valore nel parametro --target.

Valutare un'applicazione Java

La fase di valutazione è dove l’interfaccia della riga di comando appcat analizza l'applicazione e i relativi componenti per determinare l'idoneità per il trasferimento ad altre piattaforme e per identificare potenziali sfide o limitazioni. Questa fase prevede l'analisi del codice dell'applicazione e la verifica della conformità con le destinazioni selezionate.

È possibile selezionare più destinazioni usando un elenco di valori delimitato da spazi con l'argomento --target.

Per controllare le destinazioni disponibili, eseguire il comando seguente:

./appcat --listTargetTechnologies

L'output generato dal comando sarà simile all'esempio seguente:

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

È quindi possibile eseguire appcat usando una o una combinazione di destinazioni disponibili, come mostrato nell'esempio seguente:

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

È quindi possibile eseguire appcat usando una delle destinazioni OpenJDK disponibili, come mostrato nell'esempio seguente:

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

Per le destinazioni OpenJDK (Java) si consiglia di sceglierne solo una alla volta.

Consigli sulle destinazioni per la valutazione di Azure

Nel valutare un'applicazione per la distribuzione di Azure, si consiglia di iniziare con le destinazioni seguenti:

  • discovery
  • cloud-readiness

Specificare anche un servizio di Azure per la distribuzione, ad esempio azure-appservice o azure-container-apps.

Se si intende spostare un'applicazione da un ambiente Windows in una macchina virtuale o un contenitore Linux, si consiglia di aggiungere anche la destinazione linux.

Se si intende spostare un'applicazione da una versione precedente di JDK a una versione più recente, si consiglia di scegliere la versione principale successiva rispetto alla versione precedente usata dall'applicazione. Ad esempio, usare openjdk11 quando l'applicazione è distribuita con Java 8.

Ottenere risultati da appcat

Il risultato delle fasi di individuazione e valutazione è un report dettagliato che fornisce una roadmap per il trasferimento ad altre piattaforme e la modernizzazione dell'applicazione Java, incluse le raccomandazioni per il servizio di Azure e l'approccio di trasferimento ad altre piattaforme. Il report funge da base per le fasi successive del processo di trasferimento ad altre piattaforme. Consente alle organizzazioni di apprendere il lavoro richiesto per tale trasformazione e di prendere decisioni su come modernizzare le applicazioni per ottenere i massimi vantaggi.

Il report generato da appcat offre una panoramica completa dell'applicazione e dei relativi componenti. È possibile usare questo report per ottenere informazioni dettagliate sulla struttura e sulle dipendenze dell'applicazione e per determinarne l'idoneità per il trasferimento ad altre piattaforme e la modernizzazione.

Le sezioni seguenti offrono altre informazioni sul report.

Riepilogo dell'analisi

La pagina di destinazione del report elenca tutte le tecnologie usate nell'applicazione. Il dashboard fornisce un riepilogo dell'analisi, tra cui il numero di eventi imprevisti di trasformazione, le categorie di eventi imprevisti o i punti della storia.

Screenshot del report di riepilogo appcat.

Quando si esegue lo zoom avanti sul grafico a torta eventi Incidenti per categoria, è possibile visualizzare il numero di incidenti per categoria: Obbligatorio, Facoltativo, Potenziale e Informazioni.

Il dashboard mostra anche i punti della storia. I punti della storia sono una metrica astratta comunemente usata nello sviluppo software Agile per stimare il livello di sforzo necessario per implementare una funzionalità o una modifica. appcat usa i punti della storia per esprimere il livello di impegno necessario per eseguire la migrazione di una determinata applicazione. I punti della storia non si traducono necessariamente in ore lavorative, ma il valore deve essere coerente tra le attività.

Screenshot del report di riepilogo degli incidenti di AppCAT.

Report di individuazione

Il report di individuazione è un report generato durante la fase di individuazione. Mostra l'elenco delle tecnologie usate dall'applicazione nella categoria Informazioni. Questo report segnala solo l’utilizzo della tecnologia individuato da appcat.

Screenshot del report di individuazione appcat.

Report di valutazione

Il report di valutazione offre una panoramica dei problemi di trasformazione che sarebbe necessario risolvere per eseguire la migrazione dell'applicazione ad Azure.

Questi problemi, chiamati anche Incidenti, hanno una gravità (Obbligatorio, Facoltativo, Potenziale o Informazioni), un livello di sforzo e un numero che indica i punti della storia. I punti della storia sono determinati calcolando il numero di incidentinecessari per risolvere il problema.

Screenshot del report di valutazione appCAT.

Informazioni dettagliate per un problema specifico

Per ogni incidente, è possibile ottenere altre informazioni (dettagli del problema, contenuto della regola e così via) semplicemente selezionandolo. Si ottiene anche l'elenco di tutti i file interessati da questo incidente.

Screenshot del report dettagli del problema di AppCAT.

Quindi, per ogni file o classe interessata dall'incidente, è possibile passare al codice sorgente per evidenziare la riga di codice che ha creato il problema.

Screenshot del report del codice del problema di AppCAT.

Regole personalizzate

È possibile considerare appcat come motore di regole. Usa regole per estrarre file da archivi Java, decompilare classi Java, analizzare e classificare i tipi di file, analizzare questi file e compilare i report. In appcat le regole vengono definite sotto forma di set di regole. Un set di regole è una raccolta di singole regole che definiscono problemi o modelli specifici che appcat può rilevare durante l'analisi.

Queste regole sono definite in XML e usano il modello di regola seguente:

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

appcat fornisce un set completo di regole di migrazione standard. Poiché le applicazioni possono contenere librerie o componenti personalizzati, appcat consente di scrivere regole personalizzate per identificare l'uso di componenti o software che il set di regole esistente potrebbe coprire.

Per scrivere una regola personalizzata, usare un linguaggio completo specifico del dominio (DLS) espresso in XML. Si supponga, ad esempio, di volere una regola che identifichi l'uso del driver JDBC PostgreSQL in un'applicazione Java e suggerisca invece l'uso del server flessibile di Azure PostgreSQL. È necessaria una regola per trovare il driver JDBC PostgreSQL definito in un file di pom.xml Maven o in un file Gradle, ad esempio la dipendenza illustrata nell'esempio seguente:

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

Per rilevare l'uso di questa dipendenza, la regola usa i tag XML seguenti:

  • ruleset: identificatore univoco del set di regole. Un set di regole è una raccolta di regole correlate a una tecnologia specifica.
  • targetTechnology: tecnologia di destinazione della regola. In questo caso, la regola è destinata a servizi app Azure, servizio Azure Kubernetes (servizio Azure Kubernetes) e app contenitore di Azure.
  • rule: elemento radice di una singola regola.
  • when: condizione che deve essere soddisfatta per l'attivazione della regola.
  • perform: azione da eseguire quando viene attivata la regola.
  • hint: il messaggio da visualizzare nel report, la relativa categoria (Informazioni, Facoltativo o Obbligatorio) e lo sforzo necessario per risolvere il problema, compreso tra 1 (facile) e 13 (difficile).

Il codice XML seguente mostra la definizione della regola personalizzata:

<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>

Dopo aver eseguito questa regola tramite appcat, eseguire di nuovo l'analisi per esaminare il report generato. Come per gli altri eventi imprevisti, il report di valutazione elenca i problemi identificati e i file interessati correlati a questa regola.

Screenshot dell'appcat con una regola da eseguire.

La guida completa per lo sviluppo di regole è disponibile in azure.github.io/appcat-docs/rules-development-guide.

Note sulla versione

6.3.9.0

Questa versione contiene le correzioni seguenti e include un set di nuove regole. Per altre informazioni, vedere di seguito.

Aggiornamenti generali

  • Modifiche integrate dal repository upstream Windup (versione 6.3.9.Final).
  • Collegamenti interrotti risolti nelle descrizioni delle regole e testo della Guida.

Regole

  • Coda messaggi di Azure: aggiornamento e aggiunta di nuove regole per azure-message-queue-rabbitmq e azure-message-queue-amqp.
  • bus di servizio di Azure: è stata introdotta una regola di rilevamento per bus di servizio di Azure.
  • MySQL & PostgreSQL: regole di rilevamento delle dipendenze perfezionate.
  • Regole di Azure-AWS: regole esistenti migliorate e migliorate.
  • S3 Spring Starter: aggiunta di una regola di rilevamento per S3 Spring Starter.
  • RabbitMQ Spring JMS: è stata aggiunta una regola di rilevamento per RabbitMQ Spring JMS.
  • Regole di registrazione: regole aggiornate e ottimizzate per la registrazione.
  • Regola di archiviazione locale: aggiornata e perfezionata la regola di archiviazione locale.
  • Regola del file system di Azure: aggiornata e perfezionata la regola del file system di Azure.

Raccolte

  • Librerie aggiornate per risolvere le vulnerabilità di sicurezza.

6.3.0.9

Questa versione contiene le correzioni seguenti e include un set di nuove regole. Per altre informazioni, vedere di seguito.

  • È stato risolto un problema con la localhost-java-00001 regola.
  • Sono state introdotte nuove regole per identificare tecnologie come AWS S3, AWS SQS, Alibaba Sistema operativo cloud S, Alibaba Cloud SMS, Alibaba Scheduler X, Alibaba Cloud Seata e Alibaba Rocket MQ.
  • Aggiornato per azure-file-system-02000 supportare ora le estensioni di file XML.
  • Aggiornamento di varie librerie per risolvere le vulnerabilità di sicurezza.

6.3.0.8

In precedenza, per impostazione predefinita veniva abilitato un set di destinazioni, che rendeva difficile per alcuni clienti valutare applicazioni di grandi dimensioni causando troppi incidenti correlati a problemi meno critici. Per ridurre il rumore nei report, ora gli utenti devono specificare più destinazioni con il parametro --target durante l'esecuzione di appcat; ciò consente loro di selezionare solo le destinazioni importanti.

6.3.0.7

Versione disponibile a livello generale (disponibilità generale) di valutazione di applicazioni e codice di Azure Migrate.

Licenza

valutazione di applicazioni e codice di Azure Migrate per Java sono uno strumento open source gratuito senza costi e concesso in licenza con la stessa licenza del progetto WindUp upstream.

Domande frequenti

D: Dove è possibile scaricare la versione più recente della valutazione di applicazioni e codice di Azure Migrate per Java?

È possibile scaricare appcat da aka.ms/appcat/azure-appcat-cli-latest.zip.

D: Dove è possibile trovare altre informazioni sulla valutazione di applicazioni e codice di Azure Migrate per Java?

Quando si scarica appcat, si ottiene una directory docs con tutte le informazioni necessarie per iniziare.

D: Dove è possibile trovare le regole di Azure specifiche?

Tutte le regole di Azure sono disponibili nel repository GitHub del set di regole appcat.

D: Dove è possibile reperire altre informazioni sulla creazione di regole personalizzate?

Vedere la guida allo sviluppo di regole per l'applicazione e la valutazione del codice di Azure Migrate per Java.

D: Dove è possibile ottenere assistenza durante la creazione di regole personalizzate?

Il modo migliore per ottenere assistenza consiste nel creare un problema nel repository GitHub del set di regole appcat.