Herramienta de migración de AWS SDK para Java - AWS SDK for Java 2.x

Herramienta de migración de AWS SDK para Java

AWS SDK para Java proporciona una herramienta de migración que ayuda a automatizar la migración del SDK para código Java 1.x (V1) a 2.x (V2). La herramienta utiliza OpenRewrite, una herramienta de refactorización del código fuente abierto, para realizar la migración. OpenRewrite utiliza reglas de modificación de código (denominadas “fórmulas”) para actualizar automáticamente el código fuente de sintaxis y patrones de V1 a V2.

La herramienta admite las reglas de modificación de código para clientes de servicio del SDK y la biblioteca de alto nivel de S3 Transfer Manager. No se admiten reglas de modificación de código para otras API de alto nivel, como DynamoDBMapper de la V1 a la API DynamoDB Enhanced Client de la V2.

Para obtener más información sobre las limitaciones, consulte el final de esta página. Para ver ejemplos detallados de patrones de código comunes no admitidos con pasos de migración manual, consulte Patrones de código no admitidos.

Uso de la herramienta de migración

Migración de un proyecto de Maven

Siga las instrucciones que aparecen a continuación para migrar un proyecto basado en Maven del SDK para Java 1.x mediante la herramienta Complemento OpenRewrite Maven.

  1. Navegación al directorio raíz del proyecto de Maven

    Abra una ventana de terminal (línea de comandos) y acceda al directorio raíz de la aplicación basada en Maven.

  2. Ejecución del comando rewrite-maven-plugin del plugin

    Puede elegir entre dos modos (objetivos de Maven): dryRun y run.

    dryRun Modo

    En el modo dryRun, el complemento genera registros de diferencias en la salida de la consola y un archivo de parche llamado rewrite.patch en la carpeta target/rewrite. Este modo permite previsualizar los cambios que se realizarían, ya que no se realizan cambios en los archivos de código fuente.

    El siguiente ejemplo muestra cómo invocar el complemento en modo dryRun.

    mvn org.openrewrite.maven:rewrite-maven-plugin:<rewrite-plugin-version>*:dryRun \ -Drewrite.recipeArtifactCoordinates=software.amazon.awssdk:v2-migration:<sdkversion>** \ -Drewrite.activeRecipes=software.amazon.awssdk.v2migration.AwsSdkJavaV1ToV2

    *Sustituya <rewrite-plugin-version> por el valor rewriteMavenPluginVersion que aparece en este archivo de prueba.

    **Sustituya <sdkversion> por una versión 2.x del SDK. Visite Central de Maven para comprobar si hay una nueva versión.

    importante

    Asegúrese de usar la versión del rewrite-maven-plugin que se muestra en el archivo de prueba, ya que es posible que otras versiones no funcionen.

    La salida de la consola del modo dryRun debe ser similar a la siguiente.

    [WARNING] These recipes would make changes to project/src/test/resources/maven/before/pom.xml: [WARNING] software.amazon.awssdk.v2migration.AwsSdkJavaV1ToV2 [WARNING] software.amazon.awssdk.v2migration.UpgradeSdkDependencies [WARNING] org.openrewrite.java.dependencies.AddDependency: {groupId=software.amazon.awssdk, artifactId=apache-client, version=2.27.0, onlyIfUsing=com.amazonaws.ClientConfiguration} [WARNING] org.openrewrite.java.dependencies.AddDependency: {groupId=software.amazon.awssdk, artifactId=netty-nio-client, version=2.27.0, onlyIfUsing=com.amazonaws.ClientConfiguration} [WARNING] org.openrewrite.java.dependencies.ChangeDependency: {oldGroupId=com.amazonaws, oldArtifactId=aws-java-sdk-bom, newGroupId=software.amazon.awssdk, newArtifactId=bom, newVersion=2.27.0} [WARNING] org.openrewrite.java.dependencies.ChangeDependency: {oldGroupId=com.amazonaws, oldArtifactId=aws-java-sdk-s3, newGroupId=software.amazon.awssdk, newArtifactId=s3, newVersion=2.27.0} [WARNING] org.openrewrite.java.dependencies.ChangeDependency: {oldGroupId=com.amazonaws, oldArtifactId=aws-java-sdk-sqs, newGroupId=software.amazon.awssdk, newArtifactId=sqs, newVersion=2.27.0} [WARNING] These recipes would make changes to project/src/test/resources/maven/before/src/main/java/foo/bar/Application.java: [WARNING] software.amazon.awssdk.v2migration.AwsSdkJavaV1ToV2 [WARNING] software.amazon.awssdk.v2migration.S3GetObjectConstructorToFluent [WARNING] software.amazon.awssdk.v2migration.ConstructorToFluent [WARNING] software.amazon.awssdk.v2migration.S3StreamingResponseToV2 [WARNING] software.amazon.awssdk.v2migration.ChangeSdkType [WARNING] software.amazon.awssdk.v2migration.ChangeSdkCoreTypes [WARNING] software.amazon.awssdk.v2migration.ChangeExceptionTypes [WARNING] org.openrewrite.java.ChangeType: {oldFullyQualifiedTypeName=com.amazonaws.AmazonClientException, newFullyQualifiedTypeName=software.amazon.awssdk.core.exception.SdkException} [WARNING] org.openrewrite.java.ChangeMethodName: {methodPattern=com.amazonaws.AmazonServiceException getRequestId(), newMethodName=requestId} [WARNING] org.openrewrite.java.ChangeMethodName: {methodPattern=com.amazonaws.AmazonServiceException getErrorCode(), newMethodName=awsErrorDetails().errorCode} [WARNING] org.openrewrite.java.ChangeMethodName: {methodPattern=com.amazonaws.AmazonServiceException getServiceName(), newMethodName=awsErrorDetails().serviceName} [WARNING] org.openrewrite.java.ChangeMethodName: {methodPattern=com.amazonaws.AmazonServiceException getErrorMessage(), newMethodName=awsErrorDetails().errorMessage} [WARNING] org.openrewrite.java.ChangeMethodName: {methodPattern=com.amazonaws.AmazonServiceException getRawResponse(), newMethodName=awsErrorDetails().rawResponse().asByteArray} [WARNING] org.openrewrite.java.ChangeMethodName: {methodPattern=com.amazonaws.AmazonServiceException getRawResponseContent(), newMethodName=awsErrorDetails().rawResponse().asUtf8String} [WARNING] org.openrewrite.java.ChangeType: {oldFullyQualifiedTypeName=com.amazonaws.AmazonServiceException, newFullyQualifiedTypeName=software.amazon.awssdk.awscore.exception.AwsServiceException} [WARNING] software.amazon.awssdk.v2migration.NewClassToBuilderPattern [WARNING] software.amazon.awssdk.v2migration.NewClassToBuilder [WARNING] software.amazon.awssdk.v2migration.V1SetterToV2 [WARNING] software.amazon.awssdk.v2migration.V1GetterToV2 ... [WARNING] software.amazon.awssdk.v2migration.V1BuilderVariationsToV2Builder [WARNING] software.amazon.awssdk.v2migration.NewClassToBuilderPattern [WARNING] software.amazon.awssdk.v2migration.NewClassToBuilder [WARNING] software.amazon.awssdk.v2migration.V1SetterToV2 [WARNING] software.amazon.awssdk.v2migration.HttpSettingsToHttpClient [WARNING] software.amazon.awssdk.v2migration.WrapSdkClientBuilderRegionStr [WARNING] Patch file available: [WARNING] project/src/test/resources/maven/before/target/rewrite/rewrite.patch [WARNING] Estimate time saved: 20m [WARNING] Run 'mvn rewrite:run' to apply the recipes.

    run Modo

    Cuando ejecuta el complemento en modo run, se modifica el código fuente del disco para aplicar los cambios. Asegúrese de tener una copia de seguridad del código fuente antes de ejecutar el comando.

    El siguiente ejemplo muestra cómo invocar el complemento en modo run.

    mvn org.openrewrite.maven:rewrite-maven-plugin:<rewrite-plugin-version>*:run \ -Drewrite.recipeArtifactCoordinates=software.amazon.awssdk:v2-migration:<sdkversion>** \ -Drewrite.activeRecipes=software.amazon.awssdk.v2migration.AwsSdkJavaV1ToV2

    *Sustituya <rewrite-plugin-version> por el rewriteMavenPluginVersionvalue que aparece en este archivo de prueba.

    **Sustituya <sdkversion> por una versión 2.x del SDK. Visite Central de Maven para comprobar si hay una nueva versión.

    Tras ejecutar el comando, compile la aplicación y ejecute pruebas para comprobar los cambios.

Migración de un proyecto de Gradle

Siga las instrucciones que aparecen a continuación para migrar un proyecto basado en Gradle del SDK para Java 1.x mediante la herramienta Complemento OpenRewrite Gradle.

  1. Navegación al directorio raíz del proyecto de Gradle

    Abra una ventana de terminal (línea de comandos) y acceda al directorio raíz de la aplicación basada en Gradle.

  2. Creación de un script de inicio de Gradle

    Cree un archivo init.gradle con el contenido siguiente en el directorio.

    initscript { repositories { maven { url "https://plugins.gradle.org/m2" } } dependencies { classpath("org.openrewrite:plugin:<rewrite-plugin-version>*") } } rootProject { plugins.apply(org.openrewrite.gradle.RewritePlugin) dependencies { rewrite("software.amazon.awssdk:v2-migration:latest.release") } afterEvaluate { if (repositories.isEmpty()) { repositories { mavenCentral() } } } }

    *Sustituya <rewrite-plugin-version> por la versión que aparece en este archivo de prueba.

  3. Ejecute el comando rewrite

    Al igual que con el complemento de Maven, puede ejecutar el complemento de Gradle en modo dryRun o run.

    dryRun Modo

    El siguiente ejemplo muestra cómo invocar el complemento en modo dryRun.

    gradle rewriteDryRun --init-script init.gradle \ -Drewrite.activeRecipes=software.amazon.awssdk.v2migration.AwsSdkJavaV1ToV2

    run Modo

    El siguiente ejemplo muestra cómo invocar el complemento en modo run.

    gradle rewriteRun --init-script init.gradle \ -Drewrite.activeRecipes=software.amazon.awssdk.v2migration.AwsSdkJavaV1ToV2

Limitaciones actuales

Si bien la migración admite la mayor parte del código de la V1 mediante reglas de modificación de código que se actualizan al equivalente de la V2, algunas clases y métodos no están cubiertos. Para estas clases y métodos, siga las instrucciones paso a paso para migrar el código manualmente.

En el caso de algunas reglas de modificación de código no compatibles, la herramienta de migración puede agregar un comentario que comience por:

/*AWS SDK for Java v2 migration: Transform for ...

Tras el comentario, la herramienta genera un código auxiliar genérico de la versión V2 del método o la clase. Por ejemplo, en el siguiente resultado, la herramienta de migración intentó migrar el método setBucketLifecycleConfiguration del cliente V1 S3:

/*AWS SDK for Java v2 migration: Transform for setBucketLifecycleConfiguration method not supported. Please manually migrate your code by using builder pattern, update from BucketLifecycleConfiguration.Rule to LifecycleRule, StorageClass to TransitionStorageClass, and adjust imports and names.*/ s3.putBucketLifecycleConfiguration( PutBucketLifecycleConfigurationRequest.builder() .bucket(bucketName) .lifecycleConfiguration(BucketLifecycleConfiguration.builder() .build()) .build());

Los enlaces de la lista siguiente le llevan a la información sobre migración para ayudarle a migrar el código manualmente.