Partilhar via


Azure Migrate aplicativo e avaliação de código para Java

Este guia descreve como usar o aplicativo Azure Migrate e a ferramenta de avaliação de código para Java para avaliar e reformular qualquer tipo de aplicativo Java. A ferramenta permite avaliar a preparação do aplicativo para replataforma e migração para o Azure. Essa ferramenta é oferecida como uma CLI (interface de linha de comando) e avalia binários de aplicativos Java e código-fonte para identificar oportunidades de replataforma e migração para o Azure. Ele ajuda a modernizar e reformular aplicativos Java de grande escala, identificando casos de uso comuns e padrões de código e propondo alterações recomendadas.

A ferramenta descobre o uso da tecnologia de aplicativos por meio da análise estática de código, fornece estimativa de esforço e acelera a replataforma de código, ajudando você a priorizar e mover aplicativos Java para o Azure. Com um conjunto de mecanismos e regras, ele pode descobrir e avaliar diferentes tecnologias, como Java 11, Java 17, Jakarta EE, Spring, Hibernate, Java Message Service (JMS) e muito mais. Em seguida, ele ajuda você a reformular o aplicativo Java para diferentes destinos do Azure (Serviço de Aplicativo do Azure, Serviço Kubernetes do Azure e Aplicativos de Contêiner do Azure) com regras específicas de replataforma do Azure.

Esta ferramenta é de código aberto e é baseada no WindUp, um projeto criado pela Red Hat e publicado sob a Eclipse Public License.

Descrição geral

A ferramenta foi projetada para ajudar as organizações a modernizar seus aplicativos Java de uma forma que reduza custos e permita uma inovação mais rápida. A ferramenta usa técnicas avançadas de análise para entender a estrutura e as dependências de qualquer aplicativo Java e fornece orientação sobre como refatorar e migrar os aplicativos para o Azure.

Com ele, você pode executar as seguintes tarefas:

  • Descubra o uso da tecnologia: veja rapidamente quais tecnologias um aplicativo usa. A descoberta é útil se você tiver aplicativos herdados com pouca documentação e quiser saber quais tecnologias eles usam.
  • Avaliar o código para um destino específico: avalie um aplicativo para um destino específico do Azure. Verifique o esforço e as modificações que você precisa fazer para reformular seus aplicativos para o Azure.

Alvos suportados

A ferramenta contém regras para ajudá-lo a reformular seus aplicativos para que você possa implantar e usar diferentes serviços do Azure.

As regras usadas pelo aplicativo Azure Migrate e pela avaliação de código são agrupadas com base em um destino. Um destino é onde ou como o aplicativo é executado e as necessidades e expectativas gerais. Ao avaliar um aplicativo, você pode escolher vários destinos. A tabela a seguir descreve os destinos disponíveis:

Destino Description ID
Serviço de Aplicações do Azure Práticas recomendadas para implantar um aplicativo no Serviço de Aplicativo do Azure. azure-appservice
Azure Kubernetes Service Práticas recomendadas para implantar um aplicativo no Serviço Kubernetes do Azure. azure-aks
Azure Container Apps Práticas recomendadas para implantar um aplicativo em Aplicativos de Contêiner do Azure. azure-container-apps
Preparação para a nuvem Práticas recomendadas gerais para preparar um aplicativo Cloud (Azure). cloud-readiness
Deteção Identifica o uso de tecnologia, como bibliotecas e estruturas. discovery
Linux Práticas recomendadas gerais para preparar um aplicativo Linux. linux
OpenJDK 11 Melhores práticas gerais para executar uma aplicação Java 8 com Java 11. openjdk11
OpenJDK 17 Melhores práticas gerais para executar uma aplicação Java 11 com Java 17. openjdk17
OpenJDK 21 Melhores práticas gerais para executar uma aplicação Java 17 com Java 21. openjdk21

Quando a ferramenta avalia a Preparação para a Nuvem e os serviços relacionados do Azure, também pode relatar informações úteis para o uso potencial de diferentes serviços do Azure. A lista seguinte mostra alguns dos serviços abrangidos:

  • Bases de Dados do Azure
  • Azure Service Bus
  • Armazenamento do Azure
  • Rede de Entrega de Conteúdos do Azure
  • Hubs de Eventos do Azure
  • Azure Key Vault
  • Azure Front Door

Download

Para usar a appcat CLI, você deve baixar o arquivo ZIP descrito na próxima seção e ter uma instalação compatível do JDK 11 ou JDK 17 no seu computador. A appcat CLI é executada em qualquer ambiente compatível com Java, como Windows, Linux ou Mac, tanto para hardware Intel, Arm e Apple Silicon. Recomendamos que você use o Microsoft Build do OpenJDK.

Para obter mais informações, consulte a seção Notas de versão.

Problemas conhecidos

Certas regras podem não ser acionadas ao analisar expressões específicas do Lambda. Para obter mais informações, consulte o problema do GitHub.

A execução appcat em um ambiente não-unicode com caracteres complexos de byte duplo causará corrupção. Para soluções alternativas, consulte o problema do GitHub.

Versões anteriores

As seguintes versões anteriores também estão disponíveis para download:

Começar agora

Para executar appcato , verifique se você tem um JDK suportado instalado. A ferramenta suporta os seguintes JDKs:

  • Compilação Microsoft do OpenJDK 11
  • Compilação Microsoft do OpenJDK 17
  • Eclipse Temurin™ JDK 11
  • Eclipse Temurin™ JDK 17

Depois de ter um JDK válido instalado, verifique se o diretório de instalação está configurado corretamente na variável de JAVA_HOME ambiente.

Para continuar, baixe e descompacte o pacote em uma pasta de sua escolha. Em seguida, você obtém a seguinte estrutura de diretórios:

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: Este diretório contém a documentação do appcat.
  • bin: Este diretório contém os executáveis da appcat CLI (para Windows/Linux/Mac).
  • exemplos: Este diretório contém um aplicativo de exemplo e vários scripts para executar appcat no aplicativo de exemplo.

Para executar a ferramenta, abra uma sessão de terminal e digite o seguinte comando no diretório $APPCAT_HOME/bin :

./appcat --help

Para executar a ferramenta de qualquer lugar no computador, configure o diretório $APPCAT_HOME/bin na PATH variável de ambiente e reinicie a sessão do terminal.

Documentação

Os guias a seguir fornecem a documentação principal para appcat Java:

Descubra o uso da tecnologia e a preparação para a nuvem sem um serviço do Azure em mente

A descoberta de tecnologias e as metas de preparação para a nuvem fornecem uma excelente visão sobre a replataforma de aplicativos e a modernização para a nuvem. A ferramenta verifica o aplicativo e seus componentes para obter uma compreensão abrangente de sua estrutura, arquitetura e dependências. Ele também encontra possíveis problemas que podem ser desafiadores em um ambiente de nuvem. O discovery destino, em particular, é usado para criar um inventário detalhado do aplicativo e seus componentes. Este inventário serve de base para uma análise e planeamento mais aprofundados. Para obter mais informações, consulte a seção Relatório de descoberta .

Use o seguinte comando para iniciar a descoberta e a preparação para a nuvem:

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

Esse tipo de relatório é útil quando você não tem um serviço específico do Azure em mente para implantar seu aplicativo.

A ferramenta sempre executa se discovery você inclui ou não esse valor no --target parâmetro.

Avaliar uma aplicação Java

A fase de avaliação é onde a appcat CLI analisa o aplicativo e seus componentes para determinar sua adequação para replatorming e identificar quaisquer desafios ou limitações potenciais. Esta fase envolve a análise do código do aplicativo e a verificação de sua conformidade com os alvos selecionados.

Você pode selecionar vários destinos usando uma lista de valores delimitada por espaço com o --target argumento.

Para verificar os destinos disponíveis, execute o seguinte comando:

./appcat --listTargetTechnologies

Este comando produz uma saída semelhante ao exemplo a seguir:

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

Em seguida, você pode executar appcat usando um ou uma combinação de destinos disponíveis, conforme mostrado no exemplo a seguir:

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

Você também pode executar appcat com um dos destinos OpenJDK disponíveis, conforme mostrado no exemplo a seguir:

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

Para destinos OpenJDK (Java), recomendamos que você escolha apenas um de cada vez.

Recomendação de metas para avaliação do Azure

Sempre que você avaliar um aplicativo para implantação do Azure, recomendamos que comece com os seguintes destinos:

  • discovery
  • cloud-readiness

Além disso, especifique um serviço do Azure para implantação, como azure-appservice ou azure-container-apps.

Se você pretende mover um aplicativo de um ambiente Windows para uma VM ou contêiner Linux, recomendamos que você também adicione o linux destino.

Se você pretende mover um aplicativo de uma versão mais antiga do JDK para uma versão mais recente, recomendamos que escolha a próxima versão principal em comparação com a versão anterior em uso pelo aplicativo. Por exemplo, use openjdk11 quando seu aplicativo estiver atualmente implantado com Java 8.

Obter resultados do appcat

O resultado das fases de descoberta e avaliação é um relatório detalhado que fornece um roteiro para a replataforma e modernização do aplicativo Java, incluindo recomendações para o serviço do Azure e a abordagem de replataforma. O relatório serve de base para as próximas etapas do processo de replataforma. Ele ajuda as organizações a aprender sobre o esforço necessário para essa transformação e tomar decisões sobre como modernizar seus aplicativos para obter o máximo de benefícios.

O relatório gerado por appcat fornece uma visão abrangente do aplicativo e seus componentes. Você pode usar esse relatório para obter informações sobre a estrutura e as dependências do aplicativo e para determinar sua adequação para replataforma e modernização.

As seções a seguir fornecem mais informações sobre o relatório.

Resumo da análise

A página de destino do relatório lista todas as tecnologias usadas no aplicativo. O painel fornece um resumo da análise, incluindo o número de incidentes de transformação, as categorias de incidentes ou os pontos da história.

Captura de tela do relatório de resumo do appcat.

Ao ampliar o gráfico de pizza Incidentes por categoria , você pode ver o número de incidentes por categoria: Obrigatório, Opcional, Potencial e Informações.

O painel também mostra os pontos da história. Os pontos de história são uma métrica abstrata comumente usada no desenvolvimento de software ágil para estimar o nível de esforço necessário para implementar um recurso ou mudança. appcat usa pontos de história para expressar o nível de esforço necessário para migrar um aplicativo específico. Os pontos de história não se traduzem necessariamente em horas de trabalho, mas o valor deve ser consistente em todas as tarefas.

Captura de tela do relatório de incidente resumido do AppCAT.

Relatório de descoberta

O relatório de descoberta é um relatório gerado durante a fase de descoberta. Ele mostra a lista de tecnologias usadas pelo aplicativo na categoria Informações . Este relatório está apenas informando sobre o uso da tecnologia que appcat descobriu.

Captura de tela do relatório de descoberta do appcat.

Relatório de avaliação

O relatório de avaliação fornece uma visão geral dos problemas de transformação que precisariam ser resolvidos para migrar o aplicativo para o Azure.

Esses Problemas, também chamados de Incidentes, têm uma gravidade (Obrigatório, Opcional, Potencial ou Informação), um nível de esforço e um número indicando os pontos da história. Os pontos da história são determinados calculando o número de incidentes vezes o esforço necessário para resolver o problema.

Captura de ecrã do relatório de avaliação AppCAT.

Informações pormenorizadas sobre uma questão específica

Para cada incidente, você pode obter mais informações (o detalhe do problema, o conteúdo da regra e assim por diante) apenas selecionando-o. Você também obtém a lista de todos os arquivos afetados por esse incidente.

Captura de tela do relatório de detalhes do problema do AppCAT.

Em seguida, para cada arquivo ou classe afetada pelo incidente, você pode ir para o código-fonte para destacar a linha de código que criou o problema.

Captura de tela do relatório de código de problema do AppCAT.

Regras personalizadas

Você pode pensar como um mecanismo de appcat regra. Ele usa regras para extrair arquivos de arquivos Java, descompila classes Java, verifica e classifica tipos de arquivos, analisa esses arquivos e constrói os relatórios. No appcat, as regras são definidas na forma de um conjunto de regras. Um conjunto de regras é uma coleção de regras individuais que definem problemas ou padrões específicos que appcat podem ser detetados durante a análise.

Essas regras são definidas em XML e usam o seguinte padrão de regras:

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

appcat fornece um conjunto abrangente de regras de migração padrão. Como os aplicativos podem conter bibliotecas ou componentes personalizados, appcat permite que você escreva suas próprias regras para identificar o uso de componentes ou software que o conjunto de regras existente pode cobrir.

Para escrever uma regra personalizada, use uma linguagem específica de domínio avançado (DLS) expressa em XML. Por exemplo, digamos que você queira uma regra que identifique o uso do driver JDBC PostgreSQL em um aplicativo Java e sugira o uso do Servidor Flexível PostgreSQL do Azure. Você precisa de uma regra para localizar o driver JDBC PostgreSQL definido em um arquivo Maven pom.xml ou um arquivo Gradle, como a dependência mostrada no exemplo a seguir:

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

Para detetar o uso dessa dependência, a regra usa as seguintes marcas XML:

  • ruleset: O identificador único do conjunto de regras. Um conjunto de regras é um conjunto de regras relacionadas a uma tecnologia específica.
  • targetTechnology: A tecnologia visada pela regra. Nesse caso, a regra tem como alvo os Serviços de Aplicativo do Azure, o Serviço de Kubernetes do Azure (AKS) e os Aplicativos de Contêiner do Azure.
  • rule: O elemento raiz de uma única regra.
  • when: A condição que deve ser cumprida para que a regra seja acionada.
  • perform: A ação a ser executada quando a regra é acionada.
  • hint: A mensagem a ser exibida no relatório, sua categoria (Informação, Opcional ou Obrigatória) e o esforço necessário para corrigir o problema, variando de 1 (fácil) a 13 (difícil).

O XML a seguir mostra a definição de regra personalizada:

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

Depois de executar essa regra através appcatdo , execute novamente a análise para revisar o relatório gerado. Tal como acontece com outros incidentes, o relatório de avaliação lista os problemas identificados e os ficheiros afetados relacionados com esta regra.

Captura de tela do appcat com uma regra sendo executada.

O guia completo para o desenvolvimento de regras está disponível em azure.github.io/appcat-docs/rules-development-guide.

Notas de versão

6.3.9.0

Esta versão contém as seguintes correções e inclui um conjunto de novas regras. Para obter mais informações, consulte abaixo.

Atualizações gerais

  • Alterações integradas a partir do repositório Windup upstream (6.3.9.Versão Final).
  • Resolvidos links quebrados em descrições de regras e texto de ajuda.

Regras

  • Azure Message Queue: novas regras atualizadas e adicionadas para azure-message-queue-rabbitmq e azure-message-queue-amqp.
  • Barramento de Serviço do Azure: introduziu uma regra de deteção para o Barramento de Serviço do Azure.
  • MySQL & PostgreSQL: regras refinadas de deteção de dependência.
  • Azure-AWS Rules: regras existentes aprimoradas e aprimoradas.
  • S3 Spring Starter: adicionada uma regra de deteção para o S3 Spring Starter.
  • RabbitMQ Spring JMS: adicionada uma regra de deteção para RabbitMQ Spring JMS.
  • Regras de registro: regras relacionadas ao registro em log atualizadas e refinadas.
  • Regra de armazenamento local: atualizou e refinou a regra de armazenamento local.
  • Regra do Sistema de Arquivos do Azure: atualizada e refinada a regra do Sistema de Arquivos do Azure.

Bibliotecas

  • Bibliotecas atualizadas para resolver vulnerabilidades de segurança.

6.3.0.9

Esta versão contém as seguintes correções e inclui um conjunto de novas regras. Para obter mais informações, consulte abaixo.

  • Resolvido um problema com a localhost-java-00001 regra.
  • Introduziu novas regras para identificar tecnologias como AWS S3, AWS SQS, Alibaba Cloud OSS, Alibaba Cloud SMS, Alibaba Scheduler X, Alibaba Cloud Seata e Alibaba Rocket MQ.
  • Atualizado o azure-file-system-02000 para agora suportar extensões de arquivo xml.
  • Atualizou várias bibliotecas para resolver vulnerabilidades de segurança.

6.3.0.8

Anteriormente, um conjunto de destinos era habilitado por padrão, tornando difícil para certos clientes avaliar aplicativos grandes com muitos incidentes relacionados a problemas menos críticos. Para reduzir o ruído nos relatórios, os usuários agora devem especificar vários destinos, com o parâmetro --target, ao executar appcat, dando-lhes a opção de selecionar apenas os alvos que importam.

6.3.0.7

Versão GA (Geralmente Disponível) do aplicativo Azure Migrate e avaliação de código.

Licença

O Azure Migrate application and code assessment for Java é uma ferramenta gratuita de código aberto sem custos e licenciada sob a mesma licença que o projeto WindUp upstream.

Perguntas mais frequentes

P: Onde posso baixar a versão mais recente do aplicativo Azure Migrate e a avaliação de código para Java?

Você pode fazer o download appcat em aka.ms/appcat/azure-appcat-cli-latest.zip.

P: Onde posso encontrar mais informações sobre o aplicativo Azure Migrate e a avaliação de código para Java?

Ao fazer o download appcatdo , você recebe um diretório de documentos com todas as informações necessárias para começar.

P: Onde posso encontrar as regras específicas do Azure?

Todas as regras do Azure estão disponíveis no repositório GitHub do appcat Rulesets.

P: Onde posso encontrar mais informações sobre como criar regras personalizadas?

Consulte o Guia de Desenvolvimento de Regras para Azure Migrate aplicativo e avaliação de código para Java.

P: Onde posso obter ajuda ao criar regras personalizadas?

A melhor maneira de obter ajuda é criar um problema no repositório GitHub appcat-rulesets.