Compartir a través de


Evaluación de aplicaciones y código de Azure Migrate para Java

Nota:

Hemos publicado una nueva versión de Evaluación de aplicaciones y códigos Azure Migrate para Java, versión 7.x en versión preliminar, basada en un nuevo motor de analizador. Para descargar y experimentar con el nuevo motor, disponible para Windows, Linux y macOS, vea Evaluación de aplicaciones y códigos Azure Migrate para Java, versión 7

En esta guía se describe cómo usar la herramienta de evaluación de aplicaciones y códigos de Azure Migrate para Java para evaluar y replanificar cualquier tipo de aplicación Java. La herramienta le permite evaluar la preparación de la aplicación para la migración y la replanificación a Azure. Esta herramienta se ofrece como una CLI (interfaz de línea de comandos) y evalúa los archivos binarios de la aplicación Java y el código fuente para identificar las oportunidades de migración y expansión para Azure. Le ayuda a modernizar y replanificar aplicaciones Java a gran escala mediante la identificación de casos de uso comunes y patrones de código y la propuesta de cambios recomendados.

La herramienta detecta el uso de la tecnología de la aplicación a través del análisis estático de código, proporciona estimación de esfuerzo y acelera la expansión del código, lo que le ayuda a priorizar y mover aplicaciones Java a Azure. Con un conjunto de motores y reglas, puede detectar y evaluar diferentes tecnologías como Java 11, Java 17, Jakarta EE, Spring, Hibernate, Java Message Service (JMS) y mucho más. A continuación, le ayuda a replanificar la aplicación Java a diferentes destinos de Azure (Azure App Service, Azure Kubernetes Service y Azure Container Apps) con reglas específicas de replanificación. de Azure.

Esta herramienta es de código abierto y se basa en WindUp, un proyecto creado por Red Hat y publicado en bajo la licencia pública de Eclipse.

Información general

La herramienta está diseñada para ayudar a las organizaciones a modernizar sus aplicaciones Java de forma que reduzca los costos y permita una innovación más rápida. La herramienta usa técnicas de análisis avanzadas para comprender la estructura y las dependencias de cualquier aplicación de Java y proporciona instrucciones sobre cómo refactorizar y migrar las aplicaciones a Azure.

Con ella, podrá realizar las siguientes tareas:

  • Detectar el uso de la tecnología: vea rápidamente qué tecnologías usa una aplicación. La detección es útil si tiene aplicaciones heredadas con poca documentación y quiere saber qué tecnologías usan.
  • Evaluar el código para un destino específico: evalúe una aplicación para un destino específico de Azure. Compruebe el esfuerzo y las modificaciones que debe realizar para cambiar la plataforma de sus aplicaciones a Azure.

Destinos admitidos

La herramienta contiene reglas que le ayudarán a cambiar la plataforma de sus aplicaciones para que pueda implementarlas y usar diferentes servicios de Azure.

Las reglas utilizadas por la evaluación de códigos y aplicaciones de Azure Migrate se agrupan según un destino. Un destino es dónde o cómo se ejecuta la aplicación, y las necesidades y expectativas generales. Al evaluar una aplicación, puede elegir varios destinos. En la tabla siguiente se describen los destinos disponibles:

Destino Descripción ID
Azure App Service Procedimientos recomendados para implementar una aplicación en Azure App Service. azure-appservice
Azure Kubernetes Service Procedimientos recomendados para implementar una aplicación en Azure Kubernetes Service. azure-aks
Azure Container Apps Procedimientos recomendados para implementar una aplicación en Azure Container Apps. azure-container-apps
Preparación para la nube Procedimientos recomendados generales para preparar una aplicación en la nube (Azure). cloud-readiness
Detección Identifica el uso de la tecnología, como bibliotecas y marcos. discovery
Linux Procedimientos recomendados generales para preparar una aplicación para Linux. linux
OpenJDK 11 Procedimientos recomendados generales para ejecutar una aplicación de Java 8 con Java 11. openjdk11
OpenJDK 17 Procedimientos recomendados generales para ejecutar una aplicación de Java 11 con Java 17. openjdk17
OpenJDK 21 Procedimientos recomendados generales para ejecutar una aplicación de Java 17 con Java 21. openjdk21

Cuando la herramienta evalúa la preparación para la nube y los servicios de Azure relacionados, también puede notificar información útil para el posible uso de diferentes servicios de Azure. En la lista siguiente se muestran algunos de los servicios cubiertos:

  • Bases de datos de Azure
  • Azure Service Bus
  • Azure Storage
  • Azure Content Delivery Network
  • Azure Event Hubs
  • Azure Key Vault
  • Azure Front Door

Descargar

Para usar la CLI de appcat, debe descargar el archivo ZIP descrito en la sección siguiente y tener una instalación de JDK 11 o JDK 17 compatible en el equipo. La CLI de appcat se ejecuta en cualquier entorno compatible con Java, como Windows, Linux o Mac, tanto para hardware Intel, Arm y Apple Silicon. Se recomienda usar el Microsoft Build de OpenJDK.

Para más información, consulte la sección notas de la versión.

Problemas conocidos

Es posible que algunas reglas no se desencadenen al analizar expresiones Lambda específicas. Para obtener más información, consulte el problema de GitHub.

La ejecución appcat en un entorno que no sea unicode con caracteres complejos de doble byte provocará daños. Para obtener soluciones alternativas, consulte el problemade GitHub.

Versiones anteriores

Las siguientes versiones anteriores también están disponibles para descarga:

Introducción

Para ejecutar appcat, asegúrese de que tiene instalado un JDK compatible. La herramienta admite los siguientes JDK:

  • Compilación de Microsoft de OpenJDK 11
  • Compilación de Microsoft de OpenJDK 17
  • JDK 11 de Eclipse Temurin™
  • JDK 17 de Eclipse Temurin™

Después de tener instalado un JDK válido, asegúrese de que su directorio de instalación esté configurado correctamente en la variable de entorno JAVA_HOME.

Para continuar, descargue y descomprima el paquete en una carpeta de su elección. A continuación, obtendrá la siguiente estructura de directorios:

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 directorio contiene la documentación de appcat.
  • bin: este directorio contiene los ejecutables de la CLI de appcat (para Windows/Linux/Mac).
  • samples: este directorio contiene una aplicación de ejemplo y varios scripts para ejecutar appcat en la aplicación de ejemplo.

Para ejecutar la herramienta, abra una sesión de terminal y escriba el siguiente comando desde el directorio $APPCAT_HOME/bin:

./appcat --help

Para ejecutar la herramienta desde cualquier lugar del equipo, configure el directorio $APPCAT_HOME/bin en la variable de entorno PATH y reinicie la sesión de terminal.

Documentación

En las siguientes guías se proporciona la documentación principal de appcat para Java:

Detección del uso de la tecnología y la preparación de la nube sin un servicio de Azure en mente

La detección de tecnologías y objetivos de preparación para la nube proporcionan una gran información sobre la plataforma de aplicaciones y la modernización en la nube. La herramienta examina la aplicación y sus componentes para obtener una comprensión completa de su estructura, arquitectura y dependencias. También encuentra posibles problemas que podrían ser difíciles en un entorno de nube. El destino discovery en particular se usa para crear un inventario detallado de la aplicación y sus componentes. Este inventario sirve como base para un análisis y planificación adicionales. Para obtener más información, consulte la sección Informe de detección.

Use el siguiente comando para iniciar la detección y la preparación para la nube:

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

Este tipo de informe es útil cuando no tiene un servicio de Azure específico en mente para implementar la aplicación.

La herramienta siempre realiza discovery si se incluye o no ese valor en el parámetro --target.

Evaluar de una aplicación Java

La fase de evaluación es donde la CLI de appcat analiza la aplicación y sus componentes para determinar su idoneidad para la remodelación e identificar posibles desafíos o limitaciones. Esta fase implica analizar el código de la aplicación y comprobar su cumplimiento con los destinos seleccionados.

Puede seleccionar varios destinos mediante una lista delimitada por espacios de valores con el argumento --target.

Para comprobar los destinos disponibles, ejecute el siguiente comando:

./appcat --listTargetTechnologies

Esto genera una salida similar a la del siguiente ejemplo:

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

A continuación, puede ejecutar appcat mediante una o una combinación de destinos disponibles, como se muestra en el ejemplo siguiente:

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

También puede ejecutar appcat con uno de los destinos OpenJDK disponibles, como se muestra en el ejemplo siguiente:

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

En el caso de los destinos de OpenJDK (Java), se recomienda elegir solo uno a uno.

Recomendación de destinos para la evaluación de Azure

Siempre que evalúe una aplicación para la implementación de Azure, se recomienda empezar con los siguientes destinos:

  • discovery
  • cloud-readiness

Además, especifique un servicio de Azure para la implementación, como azure-appservice o azure-container-apps.

Si piensa mover una aplicación de un entorno de Windows a una máquina virtual o contenedor Linux, se recomienda agregar también el destino de linux.

Si tiene previsto mover una aplicación de una versión anterior de JDK a una versión más reciente, se recomienda elegir la siguiente versión principal en comparación con la versión anterior en uso por la aplicación. Por ejemplo, use openjdk11 cuando la aplicación esté implementada actualmente con Java 8.

Obtención de resultados de appcat

El resultado de las fases de detección y evaluación es un informe detallado que proporciona un mapa de ruta para la replanificación y modernización de la aplicación Java, incluidas las recomendaciones para el servicio de Azure y el enfoque de replanificación. El informe sirve como base para las siguientes fases del proceso de replanificación. Ayuda a las organizaciones a obtener información sobre el esfuerzo necesario para esta transformación y a tomar decisiones sobre cómo modernizar sus aplicaciones para obtener las máximas ventajas.

El informe generado por appcat proporciona una visión general completa de la aplicación y sus componentes. Puede usar este informe para obtener información sobre la estructura y las dependencias de la aplicación, así como para determinar su idoneidad para la expansión y modernización.

En las secciones siguientes se proporciona más información sobre el informe.

Resumen del análisis

La página de aterrizaje del informe enumera todas las tecnologías que se usan en la aplicación. El panel proporciona un resumen del análisis, incluido el número de incidentes de transformación, las categorías de incidentes o los grados de dificultad del caso.

Captura de pantalla del informe de resumen de appcat.

Al acercar el gráfico circular Incidentes por categoría, puede ver el número de incidentes por categoría: Obligatorio, Opcional, Potenciale Información.

El panel también muestra los grados de dificultad del caso. Los grados de dificultad del caso son una métrica abstracta que se usa habitualmente en Agile Software Development para calcular el nivel de esfuerzo necesario para implementar una característica o un cambio. appcat usa grados de dificultad del caso para expresar el nivel de esfuerzo necesario para migrar una aplicación determinada. Los grados de dificultad del caso no se traducen necesariamente en horas de trabajo, pero el valor debe ser coherente en todas las tareas.

Captura de pantalla del informe de incidentes de resumen de AppCAT.

Informe de detección

El informe de detección es un informe generado durante la Fase de detección. Muestra la lista de tecnologías usadas por la aplicación en la categoría Información. Este informe solo le informa sobre el uso de la tecnología que appcat detectó.

Captura de pantalla del informe de detección de appcat.

Informe de evaluación

El informe de valoración proporciona información general sobre los problemas de transformación que tendrían que resolverse para migrar la aplicación a Azure.

Estos problemas, también denominados Incidentes, tienen una gravedad (Obligatoria,Opcional, Potencial o de Información), un nivel de esfuerzo y un número que indica los grados de dificultad del caso. Los grados de dificultad del caso se determinan calculando el número de incidentes durante el esfuerzo necesario para solucionar el problema.

Captura de pantalla del informe de valoración de AppCAT.

Información detallada de un problema específico

Para cada incidente, puede obtener más información (el detalle del problema, el contenido de la regla, etc.) simplemente seleccionándolo. También obtendrá la lista de todos los archivos afectados por este incidente.

Captura de pantalla del informe de detalles del problema de AppCAT.

A continuación, para cada archivo o clase afectado por el incidente, puede saltar al código fuente para resaltar la línea de código que creó el problema.

Captura de pantalla del informe de código de problema de AppCAT.

Reglas personalizadas

Puede considerarse como un motor de reglas de appcat. Usa reglas para extraer archivos de niveles de archivo de Java, descompilar clases de Java, examinar y clasificar tipos de archivo, analizar estos archivos y compilar los informes. En appcat, las reglas se definen en forma de conjunto de reglas. Un conjunto de reglas es una colección de reglas individuales que definen problemas o patrones específicos que appcat pueden detectar durante el análisis.

Estas reglas se definen en XML y usan el siguiente patrón de regla:

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

appcat proporciona un conjunto completo de reglas de migración estándar. Dado que las aplicaciones pueden contener bibliotecas o componentes personalizados, appcat le permite escribir sus propias reglas para identificar el uso de componentes o software que puede cubrir el conjunto de reglas existente.

Para escribir una regla personalizada, use un lenguaje específico de dominio enriquecido (DLS) expresado en XML. Por ejemplo, supongamos que quiere una regla que identifique el uso del controlador JDBC de PostgreSQL en una aplicación Java y sugiere el uso del Servidor flexible de Azure PostgreSQL en su lugar. Necesita una regla para buscar el controlador JDBC de PostgreSQL definido en un archivo de Maven pom.xml o un archivo de Gradle, como la dependencia que se muestra en el ejemplo siguiente:

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

Para detectar el uso de esta dependencia, la regla usa las siguientes etiquetas XML:

  • ruleset: identificador único del conjunto de reglas. Un conjunto de reglas es una colección de reglas relacionadas con una tecnología específica.
  • targetTechnology: la tecnología a la que se dirige la regla. En este caso, la regla tiene como destino Azure App Services, Azure Kubernetes Service (AKS) y Azure Container Apps.
  • rule: elemento raíz de una sola regla.
  • when: condición que se debe cumplir para que se desencadene la regla.
  • perform: la acción que se va a realizar cuando se desencadena la regla.
  • hint: el mensaje que se va a mostrar en el informe, su categoría (Información, Opcional u Obligatoria) y el esfuerzo necesario para corregir el problema, que va de 1 (fácil) a 13 (difícil).

El siguiente XML muestra la definición de regla 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>

Después de ejecutar esta regla a través de appcat, vuelva a ejecutar el análisis para revisar el informe generado. Al igual que con otros incidentes, el informe de evaluación enumera los problemas identificados y los archivos afectados relacionados con esta regla.

Captura de pantalla de appcat con una regla que se está ejecutando.

La guía completa para el desarrollo de reglas está disponible en azure.github.io/appcat-docs/rules-development-guide.

Notas de la versión

6.3.9.0

Esta versión contiene las siguientes correcciones e incluye un conjunto de reglas nuevas. Para obtener más información, consulte más adelante.

Actualizaciones generales

  • Cambios integrados del repositorio ascendente de Windup (versión 6.3.9.Final).
  • Vínculos rotos resueltos en descripciones de reglas y texto de ayuda.

Reglas

  • Cola de mensajes de Azure: se han actualizado y agregado nuevas reglas para azure-message-queue-rabbitmq y azure-message-queue-amqp.
  • Azure Service Bus: introdujo una regla de detección para Azure Service Bus.
  • MySQL y PostgreSQL: reglas de detección de dependencias refinadas.
  • Reglas de Azure-AWS: reglas existentes mejoradas y mejoradas.
  • S3 Spring Starter: se ha agregado una regla de detección para S3 Spring Starter.
  • RabbitMQ Spring JMS: se ha agregado una regla de detección para RabbitMQ Spring JMS.
  • Reglas de registro: reglas actualizadas y refinadas relacionadas con el registro.
  • Regla de almacenamiento local: se ha actualizado y refinado la regla de almacenamiento local.
  • Regla del sistema de archivos de Azure: se ha actualizado y refinado la regla del sistema de archivos de Azure.

Bibliotecas

  • Se han actualizado las bibliotecas para abordar las vulnerabilidades de seguridad.

6.3.0.9

Esta versión contiene las siguientes correcciones e incluye un conjunto de reglas nuevas. Para obtener más información, consulte más adelante.

  • Se ha resuelto un problema con la regla localhost-java-00001.
  • Se introdujeron nuevas reglas para identificar tecnologías como AWS S3, AWS SQS, Alibaba Cloud OSS, Alibaba Cloud SMS, Alibaba Scheduler X, Alibaba Cloud Seata y Alibaba Rocket MQ.
  • Se ha actualizado el azure-file-system-02000 para que ahora admita extensiones de archivo xml.
  • Se han actualizado varias bibliotecas para abordar las vulnerabilidades de seguridad.

6.3.0.8

Anteriormente, un conjunto de destinos se habilitaba de forma predeterminada, lo que dificultaba que determinados clientes evaluaran aplicaciones grandes con demasiados incidentes relacionados con problemas menos críticos. Para reducir el ruido en los informes, los usuarios ahora deben especificar varios destinos, con el parámetro --target, al ejecutar appcat, lo que les da la opción de seleccionar solo los destinos que importan.

6.3.0.7

Versión de disponibilidad general (disponible con carácter general) de la evaluación de código y la aplicación de Azure Migrate.

Licencia

La evaluación de aplicaciones y códigos de Azure Migrate para Java es una herramienta gratuita de código abierto sin costo alguno y con licencia bajo la misma licencia que el proyecto WindUp ascendente.

Preguntas más frecuentes

P: ¿Dónde puedo descargar la versión más reciente de la evaluación de aplicaciones y códigos de Azure Migrate para Java?

Puede descargar appcat desde aka.ms/appcat/azure-appcat-cli-latest.zip.

P: ¿Dónde puedo encontrar más información sobre la evaluación de código y la aplicación de Azure Migrate para Java?

Al descargar appcat, obtendrá un directorio de documentos con toda la información que necesita para empezar.

P: ¿Dónde puedo encontrar las reglas específicas de Azure?

Todas las reglas de Azure están disponibles en el repositorio de GitHub de conjuntos de reglas de appcat.

P: ¿Dónde puedo encontrar más información sobre cómo crear reglas personalizadas?

Consulte la Guía de desarrollo de reglas para la evaluación de aplicaciones y códigos de Azure Migrate para Java.

P: ¿Dónde puedo obtener ayuda al crear reglas personalizadas?

La mejor manera de obtener ayuda es crear un problema en el repositorio de GitHub de conjuntos de reglas de appcat.