

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Herramienta de migración de AWS SDK para Java
<a name="migration-tool"></a>

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](https://docs.openrewrite.org/), 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](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/transfer/TransferManager.html). No se admiten reglas de modificación de código para otras API de alto nivel, como [https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/dynamodbv2/datamodeling/DynamoDBMapper.html](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/dynamodbv2/datamodeling/DynamoDBMapper.html) de la V1 a la [API DynamoDB Enhanced Client](dynamodb-enhanced-client.md) de la V2. 

Para obtener más información sobre las limitaciones, consulte el [final de esta página](#migration-tool-limitations). 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](migration-tool-unsupported-patterns.md).

## Uso de la herramienta de migración
<a name="migration-tool-use"></a>

### Migración de un proyecto de Maven
<a name="migration-tool-use-maven"></a>

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](https://docs.openrewrite.org/reference/rewrite-maven-plugin).

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.

1. 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](https://github.com/aws/aws-sdk-java-v2/blob/3a01289246f1f4ac814a354051d00030e53ef968/test/v2-migration-tests/src/test/java/software/amazon/awssdk/v2migrationtests/MavenTestBase.java#L54).

   \*\*Sustituya {{<sdkversion>}} por una versión 2.x del SDK. Visite [Central de Maven](https://central.sonatype.com/artifact/software.amazon.awssdk/v2-migration) 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](https://github.com/aws/aws-sdk-java-v2/blob/3a01289246f1f4ac814a354051d00030e53ef968/test/v2-migration-tests/src/test/java/software/amazon/awssdk/v2migrationtests/MavenTestBase.java#L54), 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](https://github.com/aws/aws-sdk-java-v2/blob/3a01289246f1f4ac814a354051d00030e53ef968/test/v2-migration-tests/src/test/java/software/amazon/awssdk/v2migrationtests/MavenTestBase.java#L54).

   \*\*Sustituya {{<sdkversion>}} por una versión 2.x del SDK. Visite [Central de Maven](https://central.sonatype.com/artifact/software.amazon.awssdk/v2-migration) 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
<a name="migration-tool-use-gradle"></a>

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](https://docs.openrewrite.org/reference/gradle-plugin-configuration).

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.

1. 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](https://github.com/aws/aws-sdk-java-v2/blob/master/test/v2-migration-tests/src/test/resources/software/amazon/awssdk/v2migrationtests/gradle/before/init.gradle#L6).

1. 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
<a name="migration-tool-limitations"></a>

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](migration-steps.md) 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.
+ [Diferencias del cliente S3 entre la versión 1 y la versión 2 del AWS SDK para Java](migration-s3-client.md)
+ [S3 Transfer Manager](migration-s3-transfer-manager.md) (TransferManager)
+ [Asignación de objetos de DynamoDB](migration-ddb-mapper.md) (DynamoDBMapper)
+ [Utilidad de metadatos de EC2](migration-imds.md) (EC2MetadataUtils)
+ [Esperadores](migration-waiters.md) (AmazonDynamoDBWaiters)
+ [Generador de políticas de IAM](migration-iam-policy-builder.md) (Policy)
+ [Prefirma de CloudFront](migration-cloudfront-presigning.md) (CloudFrontUrlSigner, CloudFrontCookieSigner)
+ [Notificaciones de eventos de S3](migration-s3-event-notification.md) (S3EventNotification)
+ Publicación de métricas de SDK ([documentación de 1.x](https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/generating-sdk-metrics.html), [documentación de 2.x](metrics.md))
+ [Patrones de código no compatibles](migration-tool-unsupported-patterns.md): ejemplos detallados de patrones de código comunes que requieren migración manual