Avaliação de aplicação e código das Migrações para Azure para Java
Este guia descreve como usar a ferramenta de avaliação de aplicação e código das Migrações para Azure para Java para avaliar e reformular qualquer tipo de aplicativo Java. A ferramenta permite que você avalie a preparação do aplicativo para reformular e migrar para o Azure. Esta ferramenta é oferecida como uma CLI (interface de linha de comando) e avalia binários e códigos-fonte de aplicativos Java para identificar oportunidades de mudança de plataforma e migração para o Azure. Ajuda você a modernizar e reformular aplicativos Java em grande escala, identificando casos de uso e padrões de código comuns e propondo alterações recomendadas.
A ferramenta descobre o uso da tecnologia de aplicativo por meio da análise de código estático, fornece estimativa de esforço e acelera a reformulação do código, ajudando você a priorizar e mover aplicativos Java para o Azure. Com um conjunto de mecanismos e regras, ela pode descobrir e avaliar diferentes tecnologias, como Java 11, Java 17, Jakarta EE, Spring, Hibernate, JMS (Java Message Service) e muito mais. Em seguida, ele ajuda você a alterar a plataforma do aplicativo Java para diferentes destinos do Azure (Serviço de Aplicativo do Azure, Serviço de Kubernetes do Azure e Aplicativos de Contêiner do Azure) com regras específicas de alteração de plataforma do Azure.
Essa ferramenta é de código aberto e baseia-se no WindUp, um projeto criado pela Red Hat e publicado na Licença Pública do Eclipse.
Visão geral
A ferramenta foi projetada para ajudar as organizações a modernizar seus aplicativos Java de forma a reduzir custos e habilitar uma inovação mais rápida. A ferramenta usa técnicas avançadas de análise para entender a estrutura e as dependências dos aplicativos Java e fornece diretrizes sobre como refatorar e migrar os aplicativos para o Azure.
Com ela, 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.
- Avalie 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 no Azure.
Destinos compatíveis
A ferramenta contém regras para ajudar você a reformular seus aplicativos para poder implantar e usar diferentes serviços do Azure.
As regras usadas pela avaliação de aplicação e código das Migrações para Azure são agrupadas com base em um destino. Um destino é onde ou como o aplicativo é executado, além de necessidades e expectativas gerais. Ao avaliar um aplicativo, você pode escolher vários destinos. A tabela a seguir descreve os destinos disponíveis:
Destino | Descrição | ID |
---|---|---|
Serviço de Aplicativo do Azure | Melhores práticas para implantar um aplicativo no Serviço de Aplicativo do Azure. | azure-appservice |
Serviço de Kubernetes do Azure | Melhores práticas para implantar um aplicativo no Serviço de Kubernetes do Azure. | azure-aks |
Aplicativos de Contêiner do Azure | Melhores práticas para implantar um aplicativo nos Aplicativos de Contêiner do Azure. | azure-container-apps |
Preparação da nuvem | Melhores práticas gerais para preparar uma nuvem de aplicativos (Azure). | cloud-readiness |
Descoberta | Identifica o uso de tecnologia, como bibliotecas e estruturas. | discovery |
Linux | Melhores práticas gerais para preparar um aplicativo Linux. | linux |
OpenJDK 11 | Melhores práticas gerais para executar um aplicativo Java 8 com o Java 11. | openjdk11 |
OpenJDK 17 | Melhores práticas gerais para executar um aplicativo Java 11 com o Java 17. | openjdk17 |
OpenJDK 21 | Melhores práticas gerais para executar um aplicativo Java 17 com o Java 21. | openjdk21 |
Quando a ferramenta avalia a preparação da nuvem e os serviços relacionados do Azure, ela também pode relatar informações úteis para o uso potencial de diferentes serviços do Azure. A lista a seguir mostra alguns dos serviços abordados:
- Bancos de dados do Azure
- Barramento de Serviço do Azure
- Armazenamento do Azure
- Rede de Distribuição de Conteúdo do Azure
- Hubs de eventos do Azure
- Cofre de Chave do Azure
- Porta da frente do Azure
Download
Para usar a CLI appcat
, você deve baixar o arquivo ZIP descrito na próxima seção e ter uma instalação compatível do JDK 11 ou do JDK 17 em seu computador. A CLI appcat
é executada em qualquer ambiente compatível com Java, como Windows, Linux ou Mac, com hardware Intel, Arm e Apple Silicon. Recomendamos que você use o Microsoft Build do OpenJDK.
Baixe a avaliação de aplicação e código das Migrações para Azure para Java 6.3.9.0. Atualizado em 2024-12-09.
Para saber mais, consulte a seção Notas sobre a versão.
Problemas conhecidos
Algumas regras podem não ser disparadas ao analisar expressões Lambda específicas. Para obter mais informações, confira o problema do GitHub.
Executar appcat
em um ambiente não unicode com caracteres complexos de bytes duplos causará corrupção. Para obter soluções alternativas, confira o problema do GitHub.
Versões anteriores
Estas versões anteriores também estão disponíveis para download:
- Avaliação de aplicativo e código do Migrações para Azure para Java 6.3.0.9. Lançado em agosto de 2024.
- Avaliação de aplicação e código das Migrações para Azure para Java 6.3.0.8. Lançado em março de 2024.
- Avaliação de aplicação e código das Migrações para Azure para Java 6.3.0.7. Lançado em novembro de 2023.
Introdução
Para executar appcat
, verifique se você tem um JDK compatível instalado. A ferramenta dá suporte às seguintes opções:
- Microsoft Build do OpenJDK 11
- Microsoft Build do OpenJDK 17
- Eclipse Temurin™ JDK 11
- Eclipse Temurin™ JDK 17
Depois que você tiver um JDK válido instalado, verifique se o diretório de instalação está configurado corretamente na variável de ambiente JAVA_HOME
.
Para continuar, baixe e descompacte o pacote em uma pasta de sua escolha. Em seguida, você obterá a seguinte estrutura de diretório:
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 de
appcat
. - bin: este diretório contém os executáveis da CLI
appcat
(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 em sua variável de ambiente PATH
e reinicie a sessão do terminal.
Documentação
Os guias a seguir fornecem a documentação principal do appcat
para Java:
Descobrir o uso de tecnologia e a preparação da nuvem sem um serviço do Azure em mente
A descoberta de tecnologias e os destinos de preparação da nuvem fornecem excelentes insights sobre a reformulação e modernização de aplicativos para a nuvem. A ferramenta examina o aplicativo e seus componentes para obter uma compreensão abrangente de sua estrutura, arquitetura e dependências. Também encontra possíveis problemas que podem ser desafiadores em um ambiente de nuvem. O destino discovery
em particular é usado para criar um inventário detalhado do aplicativo e seus componentes. Esse inventário serve como base para análise e planejamento adicionais. Para obter mais informações, confira a seção Relatório de descoberta.
Use o seguinte comando para iniciar a descoberta e a preparação da 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 o discovery
se você inclui ou não esse valor no parâmetro --target
.
Avaliar um aplicativo Java
A fase de avaliação é onde a CLI appcat
analisa o aplicativo e seus componentes para determinar sua adequação à reformulação e para identificar possíveis desafios ou limitações. Essa fase envolve analisar o código do aplicativo e verificar sua conformidade com os destinos selecionados.
Você pode selecionar vários destinos usando uma lista delimitada por espaço de valores com o argumento --target
.
Para verificar os destinos disponíveis, execute o comando a seguir:
./appcat --listTargetTechnologies
Esse comando produz uma saída semelhante ao seguinte exemplo:
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 do 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 do OpenJDK (Java), recomendamos que você escolha apenas um de cada vez.
Recomendação de destinos para avaliação do Azure
Sempre que você avaliar um aplicativo para implantação do Azure, recomendamos que você 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 do Windows para uma VM ou contêiner do Linux, recomendamos que você também adicione o destino linux
.
Se você pretende mover um aplicativo de uma versão mais antiga do JDK para uma versão mais recente, recomendamos que você escolha a próxima versão principal em comparação com a versão anterior em uso no aplicativo. Por exemplo, use openjdk11
quando o aplicativo estiver implantado no momento com o 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 reformulação e modernização do aplicativo Java, incluindo recomendações para o serviço do Azure e a abordagem de reformulação. O relatório serve como base para os próximos estágios do processo de reformulação. 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 pelo appcat
fornece uma visão geral abrangente do aplicativo e de seus componentes. Você pode usar esse relatório para obter insights sobre a estrutura e as dependências do aplicativo e determinar sua adequação para a reformulação e modernização.
As seções a seguir fornecem mais informações sobre o relatório.
Resumo da análise
A página de aterrissagem do relatório lista todas as tecnologias usadas no aplicativo. O dashboard fornece um resumo da análise, incluindo o número de incidentes de transformação, as categorias de incidentes ou os story points.
Ao ampliar o gráfico de pizza Incidentes por Categoria, você poderá ver o número de incidentes por categoria: Obrigatório, Opcional, Potencial e Informativo.
O dashboard também mostra os story points. Os story points são uma métrica abstrata comumente usada no desenvolvimento de software Agile para estimar o nível de esforço necessário para implementar um recurso ou alteração. O appcat
usa story points para expressar o nível de esforço necessário para migrar um aplicativo específico. Os story points não necessariamente se traduzem em horas de trabalho, mas o valor deve ser consistente entre as tarefas.
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 Informativo. Este relatório está apenas informando sobre o uso da tecnologia que o appcat
descobriu.
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.
Estes Problemas, também chamados Incidentes, têm uma severidade (Obrigatória, Opcional, Potencial ou Informativo), um nível de esforço e um número indicando os story points. Os story points são determinados calculando o número de incidentes vezes multiplicado pelo esforço necessário para resolver o problema.
Informações detalhadas sobre um problema específico
Para cada incidente, você pode obter mais informações (os detalhes 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 este incidente.
Assim, para cada arquivo ou classe afetada pelo incidente, você pode acessar o código-fonte para destacar a linha de código que criou o problema.
Regras personalizadas
Você pode usar o appcat
como um mecanismo de regra. Ele usa regras para extrair arquivos de arquivos Java, descompilar classes Java, verificar e classificar tipos de arquivos, analisar esses arquivos e criar 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 o appcat
pode detectar durante a análise.
Essas regras são definidas em XML e usam o seguinte padrão de regra:
when (condition)
perform (action)
otherwise (action)
O appcat
fornece um conjunto abrangente de regras de migração padrão. Como os aplicativos podem conter bibliotecas ou componentes personalizados, o appcat
permite que você escreva suas próprias regras para identificar o uso de componentes ou software que o conjunto de regras existente possa abranger.
Para escrever uma regra customizada, você usa uma linguagem específica de domínio (DLS) expressa em XML. Por exemplo, digamos que você queira uma regra que identifique o uso do driver PostgreSQL JDBC em um aplicativo Java e sugira o uso do Servidor Flexível do Azure para PostgreSQL. Você precisa de uma regra para localizar o driver JDBC do PostgreSQL definido em um arquivo pom.xml do Maven ou em 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 detectar o uso dessa dependência, a regra usa as seguintes marcas XML:
ruleset
: o identificador exclusivo do conjunto de regras. Um conjunto de regras é uma coleção de regras relacionadas a uma tecnologia específica.targetTechnology
: a tecnologia que a regra visa. Nesse caso, a regra tem como alvo os Serviços de Aplicativo do Azure, o AKS (Serviço de Kubernetes do Azure) e os Aplicativos de Contêiner do Azure.rule
: o elemento raiz de uma única regra.when
: a condição que deve ser atendida para que a regra seja disparada.perform
: a ação a ser executada quando a regra for disparada.hint
: a mensagem a ser exibida no relatório, sua categoria (Informativo, Opcionais ou Obrigatório) 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 esta regra por meio do appcat
, execute novamente a análise para revisar o relatório gerado. Assim como acontece com outros incidentes, o relatório de avaliação lista os problemas identificados e os arquivos afetados relacionados a essa regra.
O guia completo para 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 correções a seguir e inclui um conjunto de novas regras. Para obter mais informações, veja abaixo.
Atualizações gerais
- Alterações integradas do repositório upstream do Windup (versão final 6.3.9).
- Resolvidos links quebrados nas descrições de regras e no texto de ajuda.
Regras
- Azure Message Queue: atualizadas e adicionadas novas regras para azure-message-queue-rabbitmq e azure-message-queue-amqp.
- Azure Service Bus: introduziu uma regra de detecção para o Azure Service Bus.
- MySQL e PostgreSQL: regras refinadas de detecção de dependências.
- Regras do Azure-AWS: regras existentes aprimoradas e aprimoradas.
- S3 Spring Starter: adicionada uma regra de detecção para o S3 Spring Starter.
- RabbitMQ Spring JMS: adicionada uma regra de detecção para RabbitMQ Spring JMS.
- Regras de registro: regras relacionadas ao registro atualizadas e refinadas.
- Regra de armazenamento local: atualizou e refinou a regra de armazenamento local.
- Regra do Sistema de Arquivos do Azure: atualizou e refinou a regra do Sistema de Arquivos do Azure.
Bibliotecas
- Bibliotecas atualizadas para abordar vulnerabilidades de segurança.
6.3.0.9
Esta versão contém as correções a seguir e inclui um conjunto de novas regras. Para obter mais informações, veja abaixo.
- Resolução de um problema com a regra
localhost-java-00001
. - Introdução de 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.
- Atualização de
azure-file-system-02000
para passar a dar suporte a extensões de arquivo XML. - Upgrade de diversas bibliotecas para resolver vulnerabilidades de segurança.
6.3.0.8
Anteriormente, um conjunto de destinos era habilitado por padrão, dificultando a avaliação de aplicativos grandes com muitos incidentes relacionados a problemas menos críticos. Para reduzir o ruído em relatórios, os usuários agora devem especificar vários destinos, com o parâmetro --target
, ao executar appcat
, dando a eles a opção de selecionar apenas os destinos que importam.
6.3.0.7
Versão GA (Disponibilidade geral) da avaliação de aplicação e código das Migrações para Azure.
Licença
A avaliação de aplicação e código das Migrações para Azure para Java é uma ferramenta gratuita e de código aberto sem custo e licenciada sob a mesma licença que o projeto do WindUp upstream.
Perguntas frequentes
P: Onde posso baixar a versão mais recente da avaliação de aplicação e código das Migrações para Azure para Java?
Você pode baixar appcat
em aka.ms/appcat/azure-appcat-cli-latest.zip.
P: Onde posso encontrar mais informações sobre a avaliação de aplicação e código das Migrações para Azure para Java?
Ao baixar appcat
, você obterá 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 de Conjuntos de regras do appcat.
P: Onde posso encontrar mais informações sobre como criar regras personalizadas?
Confira o Guia de Desenvolvimento de Regras da avaliação de aplicação e código das Migrações para Azure para Java.
P: Onde posso obter ajuda ao criar regras personalizadas?
A melhor maneira de obter ajuda é criar um problema no repositório GitHub de Conjuntos de regras do appcat.