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
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
-
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.
-
Ejecución del comando
rewrite-maven-plugindel pluginPuede elegir entre dos modos (objetivos de Maven):
dryRunyrun.dryRunModoEn el modo
dryRun, el complemento genera registros de diferencias en la salida de la consola y un archivo de parche llamadorewrite.patchen la carpetatarget/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 valorrewriteMavenPluginVersionque aparece en este archivo de prueba. **Sustituya
<sdkversion>por una versión 2.x del SDK. Visite Central de Mavenpara comprobar si hay una nueva versión. importante
Asegúrese de usar la versión del
rewrite-maven-pluginque se muestra en el archivo de prueba, ya que es posible que otras versiones no funcionen. La salida de la consola del modo
dryRundebe 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.runModoCuando 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
rewriteMavenPluginVersionvalueque aparece en este archivo de prueba. **Sustituya
<sdkversion>por una versión 2.x del SDK. Visite Central de Mavenpara 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
-
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.
-
Creación de un script de inicio de Gradle
Cree un archivo
init.gradlecon 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. -
Ejecute el comando
rewriteAl igual que con el complemento de Maven, puede ejecutar el complemento de Gradle en modo
dryRunorun.dryRunModoEl siguiente ejemplo muestra cómo invocar el complemento en modo
dryRun.gradle rewriteDryRun --init-script init.gradle \ -Drewrite.activeRecipes=software.amazon.awssdk.v2migration.AwsSdkJavaV1ToV2runModoEl 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.
-
Diferencias entre clientes de S3 de la versión 1 y la 2 del AWS SDK para Java
-
S3 Transfer Manager (TransferManager)
-
Asignación de objetos de DynamoDB (DynamoDBMapper)
-
Utilidad de metadatos de EC2 (EC2MetadataUtils)
-
Esperadores (AmazonDynamoDBWaiters)
-
Generador de políticas de IAM (Policy)
-
Prefirma de CloudFront (CloudFrontUrlSigner, CloudFrontCookieSigner)
-
Notificaciones de eventos de S3 (S3EventNotification)
-
Publicación de métricas de SDK (documentación de 1.x, documentación de 2.x)
-
Patrones de código no compatibles: ejemplos detallados de patrones de código comunes que requieren migración manual