

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.

# Cómo migrar tu código de AWS SDK para Java 1.x a 2.x
<a name="migration-howto"></a>

Puede migrar sus aplicaciones existentes del SDK para Java 1.x de dos formas.

1. Método automatizado mediante la [herramienta de migración](migration-tool.md).

1. [Método manual](migration-steps.md) reemplazando incrementalmente las importaciones de 1.x con importaciones de 2.x.

Le recomendamos que empiece utilizando la herramienta de migración. Automatiza gran parte de la rutina, el trabajo de reemplazo del código de 1.x a 2.x. 

Dado que la herramienta [no migra todas las características](migration-tool.md#migration-tool-limitations), deberá buscar el código restante de la v1 después de ejecutar la herramienta. Cuando encuentre un código que la herramienta no haya migrado, siga las [step-by-step instrucciones](migration-steps.md) (enfoque manual) y utilice los [artículos de la guía de migración](migration-whats-different.md) para finalizar la migración.

**Topics**
+ [Herramienta de migración](migration-tool.md)
+ [Step-by-step instrucciones](migration-steps.md)

# 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
   ```

   \$1Sustituya *<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).

   \$1\$1Sustituya *<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
   ```

   \$1Sustituya <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).

   \$1\$1Sustituya *<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()
               }
           }
       }
   }
   ```

   \$1Sustituya *<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

# Patrones de código no compatibles de la herramienta de migración
<a name="migration-tool-unsupported-patterns"></a>

La herramienta de migración convierte automáticamente la mayor parte del código de la v1 a la v2. Sin embargo, algunos patrones de código requieren migración manual. En este tema se proporcionan ejemplos detallados de los patrones no compatibles más comunes y se muestra cómo convertirlos manualmente.

Lo que sigue no es una lista de patrones exhaustiva. Si el código no se compila después de ejecutar la herramienta de migración, sigue las [instrucciones de step-by-step migración](migration-steps.md) para migrar manualmente el resto del código de la versión 1.

## Solicitud de constructores de objetos con parámetros
<a name="request-pojo-constructors"></a>

A petición POJOs (excepto Amazon S3), la herramienta de migración solo transforma los métodos setter. La herramienta no admite constructores con parámetros.

**Patrón compatible: solicite un objeto mediante setters (sin parámetros de constructor)**

Antes (código de v1 original):

```
import com.amazonaws.services.sqs.model.SendMessageRequest;

SendMessageRequest request = new SendMessageRequest().withMessageBody("Hello World");
request.setQueueUrl("https://sqs.us-west-2.amazonaws.com/0123456789012/demo-queue");
```

Después (resultado de la herramienta de migración):

```
import software.amazon.awssdk.services.sqs.model.SendMessageRequest;

SendMessageRequest request = SendMessageRequest.builder()
    .messageBody("Hello World").build();
request = request.toBuilder()
    .queueUrl("https://sqs.us-west-2.amazonaws.com/0123456789012/demo-queue").build();
```

**Patrón no compatible: solicite un constructor de objetos con parámetros**

La herramienta de migración no puede convertir constructores con parámetros:

Antes de la migración manual, pero después de la herramienta de migración:

```
import software.amazon.awssdk.services.sqs.model.SendMessageRequest; // Import updated to v2.

// This pattern requires manual migration.
SendMessageRequest request = new SendMessageRequest(
    "https://sqs.us-west-2.amazonaws.com/0123456789012/demo-queue", 
    "Hello World");
```

La herramienta de migración transforma la importación a la v2, pero el código del constructor permanece sin cambios y requiere actualizaciones manuales para utilizar el patrón del compilador.

Después de la migración manual:

```
import software.amazon.awssdk.services.sqs.model.SendMessageRequest;

SendMessageRequest request = SendMessageRequest.builder()
    .messageBody("Hello World")
    .queueUrl("https://sqs.us-west-2.amazonaws.com/0123456789012/demo-queue")
    .build();
```

## Métodos del cliente de servicio con parámetros individuales
<a name="service-client-method-overloads"></a>

La herramienta de migración no puede convertir los métodos del cliente de servicio que utilizan parámetros individuales en lugar de objetos de solicitud (excepto Amazon S3).

Antes (código de v1):

```
import com.amazonaws.services.sqs.AmazonSQS;
import com.amazonaws.services.sqs.AmazonSQSClient;

AmazonSQS sqs = new AmazonSQSClient();
// The following v1 method takes individual parameters.
sqs.sendMessage("https://sqs.us-west-2.amazonaws.com/0123456789012/demo-queue", "Hello World");
```

Después (resultado de la herramienta de migración, no se compila):

```
import software.amazon.awssdk.services.sqs.SqsClient;  // Import updated to v2.
// No import statement for the v2 request POJO.

SqsClient sqs = SqsClient.builder().build();

// Does not compile–v2 methods only accept request POJOs.
sqs.sendMessage("https://sqs.us-west-2.amazonaws.com/0123456789012/demo-queue", "Hello World");
```

Debe actualizar manualmente los argumentos del método para usar un objeto de solicitud:

```
import software.amazon.awssdk.services.sqs.SqsClient;
import software.amazon.awssdk.services.sqs.model.SendMessageRequest; // Add manually.

SqsClient sqs = SqsClient.builder().build();

// Corrected v2 code.
SendMessageRequest request = SendMessageRequest.builder()
    .queueUrl("https://sqs.us-west-2.amazonaws.com/0123456789012/demo-queue")
    .messageBody("Hello World")
    .build();
sqs.sendMessage(request);
```

## Métodos de tiempo de espera de solicitud
<a name="request-pojo-timeout-configuration"></a>

La herramienta de migración no convierte los métodos que establecen tiempos de espera en objetos de solicitud.

Antes (código de v1):

```
import com.amazonaws.services.sqs.model.SendMessageRequest;

SendMessageRequest request = new SendMessageRequest();
request.setSdkRequestTimeout(7);
```

Después (resultado de la herramienta de migración, no se compila):

```
import software.amazon.awssdk.services.sqs.model.SendMessageRequest;  // Import updated to v2.

SendMessageRequest request = SendMessageRequest.builder().build();

// Does not compile.
request.setSdkRequestTimeout(7);
```

Debe migrar manualmente para usar el método `overrideConfiguration` de la v2:

```
import software.amazon.awssdk.services.sqs.model.SendMessageRequest;
import java.time.Duration;

SendMessageRequest request = SendMessageRequest.builder().build();

// Corrected v2 code.
request = request.toBuilder()
    .overrideConfiguration(o -> o.apiCallTimeout(Duration.ofSeconds(7)))
    .build();
```

## Constructores de clientes de servicio con parámetros
<a name="service-client-constructors-with-args"></a>

La herramienta de migración convierte los constructores de clientes de servicio vacíos, pero no puede convertir los constructores que aceptan parámetros como credenciales o configuración.

Antes (código de v1):

```
import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.services.sqs.AmazonSQS;
import com.amazonaws.services.sqs.AmazonSQSClient;

AWSCredentials awsCredentials = new BasicAWSCredentials("akid", "skid");
AmazonSQS sqs = new AmazonSQSClient(awsCredentials);
```

Después (resultado de la herramienta de migración, no se compila):

```
import software.amazon.awssdk.auth.credentials.AwsCredentials;
import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
import software.amazon.awssdk.services.sqs.SqsClient;  // Import updated to v2.

AwsCredentials awsCredentials = AwsBasicCredentials.create("akid", "skid");

// Does not compile.
SqsClient sqs = new SqsClient(awsCredentials);
```

Debe actualizar manualmente el constructor de clientes de servicio para utilizar el patrón del compilador:

```
import software.amazon.awssdk.auth.credentials.AwsCredentials;
import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider;  // Add manually.
import software.amazon.awssdk.services.sqs.SqsClient;

AwsCredentials awsCredentials = AwsBasicCredentials.create("akid", "skid");

// Corrected v2 code.
SqsClient sqs = SqsClient.builder()
    .credentialsProvider(StaticCredentialsProvider.create(awsCredentials))
    .build();
```

# step-by-stepInstrucciones de migración con ejemplo
<a name="migration-steps"></a>

En esta sección se proporciona una step-by-step guía para migrar la aplicación que actualmente usa el SDK para Java v1.x al SDK para Java 2.x. La primera parte presenta una descripción general de los pasos, seguida de un ejemplo detallado de migración.

Los pasos que se describen aquí describen la migración de un caso de uso normal, en el que la aplicación llama Servicios de AWS mediante clientes de servicio basados en modelos. Si necesita migrar un código que utilice un nivel superior APIs , como [S3 Transfer Manager](migration-s3-transfer-manager.md) o la [CloudFrontpresignación](migration-cloudfront-presigning.md), consulte la sección situada debajo del [Qué diferencia hay entre la AWS SDK para Java 1.x y la 2.x](migration-whats-different.md) índice.



El método que se describe aquí es una sugerencia. Puede utilizar otras técnicas y aprovechar las características de edición de código de su IDE para obtener el mismo resultado. 

## Información general sobre los pasos
<a name="migration-steps-overview"></a>

### 1. Inicio agregando la BOM del SDK para Java 2.x
<a name="migration-steps-overview-step1"></a>

Al añadir el elemento BOM (lista de materiales) de Maven para el SDK para Java 2.x a su archivo POM, se asegura de que todas las dependencias de la v2 que necesita son de la misma versión. Su POM puede contener dependencias de v1 y v2. Esto le permite migrar el código de forma incremental en lugar de cambiarlo todo de una vez.

#### BOM del SDK para Java 2.x
<a name="drt_b5n_q1c"></a>

```
<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>software.amazon.awssdk</groupId>
      <artifactId>bom</artifactId>
      <version>2.27.21</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>
```

Encontrará la [versión más reciente](https://central.sonatype.com/artifact/software.amazon.awssdk/bom) en el Repositorio central de Maven.

### 2. Búsqueda de archivos para instrucciones de importación de la clase v1
<a name="migration-steps-overview-step2"></a>

Si escaneas los archivos de tu aplicación en busca del SERVICE\$1 IDs utilizado en las importaciones de la versión 1, encontrarás el único IDs SERVICE\$1 utilizado. Un SERVICE\$1ID es un nombre corto y único para un. Servicio de AWS Por ejemplo, `cognitoidentity` es el SERVICE\$1ID de Amazon Cognito Identity.

### 3. Determinación de las dependencias de Maven de la v2 a partir de las instrucciones de importación de la v1
<a name="migration-steps-overview-step3"></a>

Después de encontrar todos los SERVICE\$1 v1 únicosIDs, puedes determinar el artefacto de Maven correspondiente a la dependencia v2 consultando. [Asignaciones de nombre del paquete a artifactId de Maven](#migration-serviceid-artifactid-mapping)

### 4. Adición de elementos de dependencia de la v2 al archivo POM
<a name="migration-steps-overview-step4"></a>

Actualice el archivo POM de Maven con los elementos de dependencia determinados en el paso 3.

### 5. En los archivos Java, cambio gradual de las clases de la v1 a las clases de la v2
<a name="migration-steps-overview-step5"></a>

A medida que sustituya las clases de la v1 por las de la v2, realice los cambios necesarios para que sean compatibles con la API de v2, como utilizar compiladores en lugar de constructores y utilizar fluent getters y setters.

### 6. Eliminación las dependencias de Maven de v1 desde el POM y las importaciones de v1 desde los archivos
<a name="migration-steps-overview-step6"></a>

Después de migrar el código para usar clases de la v2, elimine las importaciones sobrantes de la v1 de los archivos y todas las dependencias del archivo de compilación.

### 7. Refactorización del código para usar mejoras de la API de la v2
<a name="migration-steps-overview-step7"></a>

Una vez que el código se haya compilado correctamente y superado las pruebas, puede aprovechar las mejoras de la v2, como utilizar un cliente de HTTP diferente o paginadores para simplificar el código. Se trata de un paso opcional.

## Ejemplo de migración
<a name="migration-steps-example"></a>

En este ejemplo, migramos una aplicación que usa el SDK para Java v1 y accede a varios Servicios de AWS. En el paso 5 analizaremos en detalle el siguiente método de la v1. Es un método de una clase que contiene ocho métodos y hay 32 clases en la aplicación.

### Método de la v1 para migrar
<a name="v1-snippet-collapsed"></a>

Solo se enumeran las importaciones del SDK de la v1 a continuación del archivo Java.

```
import com.amazonaws.ClientConfiguration;
import com.amazonaws.regions.Region;
import com.amazonaws.regions.RegionUtils;
import com.amazonaws.services.ec2.AmazonEC2Client;
import com.amazonaws.services.ec2.model.AmazonEC2Exception;
import com.amazonaws.services.ec2.model.CreateTagsRequest;
import com.amazonaws.services.ec2.model.DescribeInstancesRequest;
import com.amazonaws.services.ec2.model.DescribeInstancesResult;
import com.amazonaws.services.ec2.model.Instance;
import com.amazonaws.services.ec2.model.InstanceStateName;
import com.amazonaws.services.ec2.model.Reservation;
import com.amazonaws.services.ec2.model.Tag;
import com.amazonaws.services.ec2.model.TerminateInstancesRequest;
...
private static List<Instance> getRunningInstances(AmazonEC2Client ec2, List<String> instanceIds) {
    List<Instance> runningInstances = new ArrayList<>();
    try {
        DescribeInstancesRequest request = new DescribeInstancesRequest()
                .withInstanceIds(instanceIds);
        DescribeInstancesResult result;
        do {
            // DescribeInstancesResponse is a paginated response, so use tokens with multiple requests.
            result = ec2.describeInstances(request);
            request.setNextToken(result.getNextToken());   // Prepare request for next page.
            for (final Reservation r : result.getReservations()) {
                for (final Instance instance : r.getInstances()) {
                    LOGGER.info("Examining instanceId: "+ instance.getInstanceId());
                    // if instance is in a running state, add it to runningInstances list.
                    if (RUNNING_STATES.contains(instance.getState().getName())) {
                        runningInstances.add(instance);
                    }
                }
            }
        } while (result.getNextToken() != null);
    } catch (final AmazonEC2Exception exception) {
        // if instance isn't found, assume its terminated and continue.
        if (exception.getErrorCode().equals(NOT_FOUND_ERROR_CODE)) {
            LOGGER.info("Instance probably terminated; moving on.");
        } else {
            throw exception;
        }
    }
    return runningInstances;
}
```

### 1. Adición de BOM de Maven de la v2
<a name="migration-steps-example-step1"></a>

Agregue la BOM de Maven para el SDK para Java 2.x al POM junto con cualquier otra dependencia en la sección `dependencyManagement`. Si el archivo POM tiene la BOM de la v1 del SDK, déjela por ahora. Se eliminará en un paso posterior.

#### Administración de dependencias de POM al principio
<a name="migration-example-boms"></a>

```
<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>org.example</groupId>             <!--Existing dependency in POM. -->
      <artifactId>bom</artifactId>
      <version>1.3.4</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
    ...
    <dependency>
      <groupId>com.amazonaws</groupId>
      <artifactId>aws-java-sdk-bom</artifactId>  <!--Existing v1 BOM dependency. -->
      <version>1.11.1000</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
    ...
    <dependency>
      <groupId>software.amazon.awssdk</groupId>  <!--Add v2 BOM dependency. -->
      <artifactId>bom</artifactId>
      <version>2.27.21</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>
```

### 2. Búsqueda de archivos para instrucciones de importación de la clase v1
<a name="migration-steps-example-step2"></a>

Busque en el código de la aplicación apariciones únicas de `import com.amazonaws.services`. Esto nos ayuda a determinar las dependencias de la v1 que utiliza el proyecto. Si su aplicación tiene un archivo POM de Maven en la que figuran dependencias de la v1, puede utilizar esta información en su lugar. 

En este ejemplo, utilizamos el comando [`ripgrep` (rg)](https://github.com/BurntSushi/ripgrep) para buscar en la base de código.

Desde la raíz de la base de código, ejecute el comando `ripgrep` siguiente. Una vez `ripgrep` que encuentra las sentencias de importación, se canalizan a los `uniq` comandos `cut``sort`, y para aislar el SERVICE\$1. IDs 

```
rg --no-filename 'import\s+com\.amazonaws\.services' | cut -d '.' -f 4 | sort | uniq
```

Para esta aplicación, se IDs registran los siguientes SERVICE\$1 en la consola.

```
autoscaling
cloudformation
ec2
identitymanagement
```

Esto indica que se ha utilizado al menos una vez cada uno de los siguientes nombres de paquetes en las instrucciones de `import`. Para nuestros propósitos, los nombres de las clases individuales no tienen importancia. Solo necesitamos encontrar los SERVICE\$1 IDs que se utilizan.

```
com.amazonaws.services.autoscaling.*
com.amazonaws.services.cloudformation.*
com.amazonaws.services.ec2.*
com.amazonaws.services.identitymanagement.*
```

### 3. Determinación de las dependencias de Maven de la v2 a partir de las instrucciones de importación de la v1
<a name="migration-steps-example-step3"></a>

El SERVICE\$1 IDs de la versión 1 que hemos aislado del paso 2 (por ejemplo, `autoscaling` y) se `cloudformation` puede asignar al mismo SERVICE\$1ID de la versión 2 en su mayor parte. Dado que el artifactId de Maven de la v2 coincide con el SERVICE\$1ID en la mayoría de los casos, usted tiene la información que necesita para añadir bloques de dependencias a su archivo POM.

En la siguiente tabla se muestra cómo podemos determinar las dependencias de la v2.


| SERVICE\$1ID de v1 se asigna a...nombre del paquete | SERVICE\$1ID de v2 se asigna a...nombre del paquete | Dependencia de Maven de v2 | 
| --- | --- | --- | 
|  **ec2** `com.amazonaws.services.ec2.*`  |  **ec2** `software.amazon.awssdk.services.ec2.*`  |  <pre><dependency><br />  <groupId>software.amazon.awssdk</groupId><br />  <artifactId>ec2</artifactId><br /></dependency></pre>  | 
|  **escalado automático** `com.amazonaws.services.autoscaling.*`  |  **escalado automático** `software.amazon.awssdk.services.autoscaling.*`  |  <pre><dependency><br />  <groupId>software.amazon.awssdk</groupId><br />  <artifactId>autoscaling</artifactId><br /></dependency></pre>  | 
| cloudformation`com.amazonaws.services.cloudformation.*` | cloudformation`software.amazon.awssdk.cloudformation.*` |  <pre><dependency><br />  <groupId>software.amazon.awssdk</groupId><br />  <artifactId>cloudformation</artifactId><br /></dependency></pre>  | 
| identitymanagement\$1`com.amazonaws.services.identitymanagement.*` | iam\$1`software.amazon.awssdk.iam.*` |  <pre><dependency><br />  <groupId>software.amazon.awssdk</groupId><br />  <artifactId>iam</artifactId><br /></dependency></pre>  | 

\$1 La asignación de `identitymanagement` a `iam` es una excepción en la que el SERVICE\$1ID difiere según la versión. Consulte en la [Asignaciones de nombre del paquete a artifactId de Maven](#migration-serviceid-artifactid-mapping) las excepciones si Maven o Gradle no pueden resolver la dependencia de la v2.

### 4. Adición de elementos de dependencia de la v2 al archivo POM
<a name="migration-steps-example-step4"></a>

En el paso 3, hemos determinado los cuatro bloques de dependencia que deben añadirse al archivo POM. No necesitamos añadir una versión porque especificamos la BOM en el paso 1. Una vez agregadas las importaciones, nuestro archivo POM tiene los siguientes elementos de dependencia.

```
    ...
  <dependencies>
    ...
    <dependency>
      <groupId>software.amazon.awssdk</groupId>
      <artifactId>autoscaling</artifactId>
    </dependency>
    <dependency>
      <groupId>software.amazon.awssdk</groupId>
      <artifactId>iam</artifactId>
    </dependency>
    <dependency>
      <groupId>software.amazon.awssdk</groupId>
      <artifactId>cloudformation</artifactId>
    </dependency>
    <dependency>
      <groupId>software.amazon.awssdk</groupId>
      <artifactId>ec2</artifactId>
    </dependency>
    ...
  </dependencies>
    ...
```

### 5. En los archivos Java, cambio gradual de las clases de la v1 a las clases de la v2
<a name="migration-steps-example-step5"></a>

En el método que estamos migrando, vemos
+ Un cliente de servicio de EC2 de `com.amazonaws.services.ec2.AmazonEC2Client`.
+ Se han utilizado varias clases de modelos de EC2. Por ejemplo, `DescribeInstancesRequest` y `DescribeInstancesResult`.

```
import com.amazonaws.ClientConfiguration;
import com.amazonaws.regions.Region;
import com.amazonaws.regions.RegionUtils;
import com.amazonaws.services.ec2.AmazonEC2Client;
import com.amazonaws.services.ec2.model.AmazonEC2Exception;
import com.amazonaws.services.ec2.model.CreateTagsRequest;
import com.amazonaws.services.ec2.model.DescribeInstancesRequest;
import com.amazonaws.services.ec2.model.DescribeInstancesResult;
import com.amazonaws.services.ec2.model.Instance;
import com.amazonaws.services.ec2.model.InstanceStateName;
import com.amazonaws.services.ec2.model.Reservation;
import com.amazonaws.services.ec2.model.Tag;
import com.amazonaws.services.ec2.model.TerminateInstancesRequest;
...
private static List<Instance> getRunningInstances(AmazonEC2Client ec2, List<String> instanceIds)
    List<Instance> runningInstances = new ArrayList<>();
    try {
        DescribeInstancesRequest request = new DescribeInstancesRequest()
                .withInstanceIds(instanceIds);
        DescribeInstancesResult result;
        do {
            // DescribeInstancesResponse is a paginated response, so use tokens with multiple re
            result = ec2.describeInstances(request);
            request.setNextToken(result.getNextToken());   // Prepare request for next page.
            for (final Reservation r : result.getReservations()) {
                for (final Instance instance : r.getInstances()) {
                    LOGGER.info("Examining instanceId: "+ instance.getInstanceId());
                    // if instance is in a running state, add it to runningInstances list.
                    if (RUNNING_STATES.contains(instance.getState().getName())) {
                        runningInstances.add(instance);
                    }
                }
            }
        } while (result.getNextToken() != null);
    } catch (final AmazonEC2Exception exception) {
        // if instance isn't found, assume its terminated and continue.
        if (exception.getErrorCode().equals(NOT_FOUND_ERROR_CODE)) {
            LOGGER.info("Instance probably terminated; moving on.");
        } else {
            throw exception;
        }
    }
    return runningInstances;
}
...
```

Nuestro objetivo es sustituir todas las importaciones de la v1 por las de la v2. Procedemos clase por clase.

#### a. Reemplace la instrucción de importación o el nombre de clase
<a name="migration-example-step5-substep1"></a>

Vemos que el primer parámetro del método `describeRunningInstances` es una instancia de `AmazonEC2Client` v1. Realice una de las siguientes acciones:
+ Sustituya la importación de `com.amazonaws.services.ec2.AmazonEC2Client` con `software.amazon.awssdk.services.ec2.Ec2Client` y cambie `AmazonEC2Client` a `Ec2Client`.
+ Cambie el tipo de parámetro a `Ec2Client` y deje que el IDE nos pida la importación correcta. Nuestro IDE nos pedirá que importemos la clase v2 porque los nombres de cliente son diferentes: `AmazonEC2Client` y `Ec2Client`. Este método no funciona si el nombre de clase es el mismo en ambas versiones.

#### b. Reemplazo de las clases del modelo de v1 por equivalentes de v2
<a name="migration-example-step5-substep2"></a>

Tras el cambio a `Ec2Client` v2, si utilizamos un IDE, aparecen errores de compilación en la siguiente instrucción.

```
                    result = ec2.describeInstances(request);
```

El error de compilación se debe al uso de una instancia de `DescribeInstancesRequest` de la v1 como parámetro del método `Ec2Client` `describeInstances` de la v2. Para corregirlo, aplique las siguientes instrucciones de sustitución o importación.


| replace | por | 
| --- | --- | 
|  <pre>import com.amazonaws.services.ec2.model.DescribeInstancesRequest</pre>  |  <pre>import software.amazon.awssdk.services.ec2.model.DescribeInstancesRequest</pre>  | 

#### c. Cambie los constructores de v1 por constructores de v2.
<a name="migration-example-step5-substep3"></a>

Siguen apareciendo errores de compilación porque [no hay constructores en clases de la v2](migration-whats-different.md#immutable-classes). Para corregirlo, realice el siguiente cambio.


| cambiar | a | 
| --- | --- | 
|  <pre>final DescribeInstancesRequest request = new DescribeInstancesRequest()<br />        .withInstanceIds(instanceIdsCopy);</pre>  |  <pre>final DescribeInstancesRequest request = DescribeInstancesRequest.builder()<br />        .instanceIds(instanceIdsCopy)<br />        .build();</pre>  | 

#### d. Reemplace los objetos de respuesta de `*Result` de v1 con los equivalentes de `*Response` de v2
<a name="migration-example-step5-substep4"></a>

Una diferencia constante entre v1 y v2 es que todos los [objetos de respuesta de v2 terminan en `*Response` en lugar de `*Result`](migration-whats-different.md#model-classname-changes). Reemplace la importación de `DescribeInstancesResult` de v1 por la importación de v2, `DescribeInstancesResponse`.

#### d. Realización de cambios en la API
<a name="migration-example-step5-substep5"></a>

La siguiente instrucción necesita algunos cambios.

```
request.setNextToken(result.getNextToken());
```

En la v2, [los métodos setter](migration-whats-different.md#setter-getter-methods) no utilizan `set` o `prefix`. Los métodos Getter con prefijo con `get` también han desaparecido del SDK para Java 2.x

Las clases de modelos, como la instancia de `request`, son inmutables en la v2, por lo que debemos crear una `DescribeInstancesRequest` nueva con un compilador.

En la v2, la instrucción pasa a ser la siguiente.

```
request = DescribeInstancesRequest.builder()
        .nextToken(result.nextToken())
        .build();
```

#### d. Repita hasta que el método se compile con clases de la v2
<a name="migration-example-step5-substep6"></a>

Continúe con el resto del código. Sustituya las importaciones de la v1 por las de la v2 y corrija los errores de compilación. Consulte la [Referencia de la API de la v2](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/ec2/package-summary.html) y la [Referencia de diferencias](migration-whats-different.md) si es necesario.

Después de migrar este método individual, tendremos el siguiente código de la v2.

```
import com.amazonaws.ClientConfiguration;
import com.amazonaws.regions.Region;
import com.amazonaws.regions.RegionUtils;
import com.amazonaws.services.ec2.AmazonEC2Client;
import com.amazonaws.services.ec2.model.AmazonEC2Exception;
import com.amazonaws.services.ec2.model.CreateTagsRequest;
import com.amazonaws.services.ec2.model.InstanceStateName;
import com.amazonaws.services.ec2.model.Tag;
import com.amazonaws.services.ec2.model.TerminateInstancesRequest;

import software.amazon.awssdk.services.ec2.Ec2Client;
import software.amazon.awssdk.services.ec2.model.DescribeInstancesRequest;
import software.amazon.awssdk.services.ec2.model.DescribeInstancesResponse;
import software.amazon.awssdk.services.ec2.model.Ec2Exception;
import software.amazon.awssdk.services.ec2.model.Instance;
import software.amazon.awssdk.services.ec2.model.Reservation;
...
private static List<Instance> getRunningInstances(Ec2Client ec2, List<String> instanceIds) {
    List<Instance> runningInstances = new ArrayList<>();
        try {
            DescribeInstancesRequest request = DescribeInstancesRequest.builder()
                    .instanceIds(instanceIds)
                    .build();
            DescribeInstancesResponse result;
            do {
                // DescribeInstancesResponse is a paginated response, so use tokens with multiple re
                result = ec2.describeInstances(request);
                request = DescribeInstancesRequest.builder()   // Prepare request for next page.
                        .nextToken(result.nextToken())
                        .build();
                for (final Reservation r : result.reservations()) {
                    for (final Instance instance : r.instances()) {
                        // if instance is in a running state, add it to runningInstances list.
                        if (RUNNING_STATES.contains(instance.state().nameAsString())) {
                            runningInstances.add(instance);
                        }
                    }
                }
            } while (result.nextToken() != null);
        } catch (final Ec2Exception exception) {
            // if instance isn't found, assume its terminated and continue.
            if (exception.awsErrorDetails().errorCode().equals(NOT_FOUND_ERROR_CODE)) {
                    LOGGER.info("Instance probably terminated; moving on.");
            } else {
                throw exception;
            }
        }
        return runningInstances;
    }
...
```

Dado que estamos migrando un único método en un archivo Java con ocho métodos, tenemos una combinación de importaciones de la v1 y v2 a medida que avanzamos en el archivo. Hemos añadido las seis últimas instrucciones de importación a medida que dábamos los pasos. 

Después de migrar todo el código, no habrá más instrucciones de importación de v1.

### 6. Eliminación las dependencias de Maven de v1 desde el POM y las importaciones de v1 desde los archivos
<a name="migration-steps-example-step6"></a>

Tras migrar todo el código de la v1 del archivo, tenemos las siguientes instrucciones de importación del SDK de la v2.

```
import software.amazon.awssdk.core.client.config.ClientOverrideConfiguration;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.regions.ServiceMetadata;
import software.amazon.awssdk.services.ec2.Ec2Client;
import software.amazon.awssdk.services.ec2.model.CreateTagsRequest;
import software.amazon.awssdk.services.ec2.model.DescribeInstancesRequest;
import software.amazon.awssdk.services.ec2.model.DescribeInstancesResponse;
import software.amazon.awssdk.services.ec2.model.Ec2Exception;
import software.amazon.awssdk.services.ec2.model.Instance;
import software.amazon.awssdk.services.ec2.model.InstanceStateName;
import software.amazon.awssdk.services.ec2.model.Reservation;
import software.amazon.awssdk.services.ec2.model.Tag;
import software.amazon.awssdk.services.ec2.model.TerminateInstancesRequest;
```

Después de migrar *todos* los archivos de nuestra aplicación, ya no necesitamos las dependencias de la v1 en nuestro archivo POM. Elimine la BOM de la v1 de la sección `dependencyManagement`, si la está utilizando, y todos los bloques de dependencias de la v1.

### 7. Refactorización del código para usar mejoras de la API de la v2
<a name="migration-steps-example-step7"></a>

Para el fragmento de código que hemos estado migrando, podemos usar opcionalmente un paginador de v2 y dejar que el SDK administre las solicitudes de datos adicionales basadas en tokens.

Podemos sustituir toda la cláusula `do` por lo siguiente.

```
                DescribeInstancesIterable responses = ec2.describeInstancesPaginator(request);

                responses.reservations().stream()
                        .forEach(reservation -> reservation.instances()
                                .forEach(instance -> {
                                    if (RUNNING_STATES.contains(instance.state().nameAsString())) {
                                        runningInstances.put(instance.instanceId(), instance);
                                    }
                                }));
```

## Asignaciones de nombre del paquete a artifactId de Maven
<a name="migration-serviceid-artifactid-mapping"></a>

Al migrar el proyecto de Maven o Gradle de la v1 del SDK para Java a la v2, debe determinar qué dependencias desea añadir al archivo de compilación. El método descrito en los [step-by-stepInstrucciones de migración con ejemplo](#migration-steps) (paso 3) utiliza los nombres de paquetes de las instrucciones de importación como punto de partida para determinar las dependencias (como artifactId) que se van a añadir al archivo de compilación. 

Puede usar la información de este tema para asignar los nombres de paquetes de la v1 a los artifactId de la v2.

### Convención de nomenclatura común utilizada en nombres de paquetes y artifactId de Maven
<a name="migration-naming-convention"></a>

La siguiente tabla muestra la convención de nomenclatura común que se SDKs utiliza para un SERVICE\$1ID determinado. Un SERVICE\$1ID es un identificador único para un. Servicio de AWS Por ejemplo, el SERVICE\$1ID del servicio de Amazon S3 es `s3` y `cognitoidentity` es el SERVICE\$1ID de Amazon Cognito Identity.


| Nombre del paquete v1 (instrucción de importación) | artifactId v1 | artifactId v2 | nombre del paquete v2 (instrucción de importación) | 
| --- | --- | --- | --- | 
| com.amazonaws.services.SERVICE\$1ID | aws-java-sdk-SERVICE\$1ID | SERVICE\$1ID | software.amazon.awssdk.services.SERVICE\$1ID | 
|   | 
| Ejemplo de Amazon Cognito Identity (SERVICE\$1ID: cognitoidentity) | 
| com.amazonaws.services.cognitoidentity | aws-java-sdk- identidad cognitiva | cognitoidentity | software.amazon.awssdk.services.cognitoidentity | 

### Diferencias de SERVICE\$1ID
<a name="migration-serviceid-diffs"></a>

#### En v1
<a name="migration-serviceid-diffs-withinv1"></a>

En algunos casos, el SERVICE\$1ID presenta diferencias entre el nombre del paquete y el artifactId del mismo servicio. Por ejemplo, la fila de CloudWatch métricas de la siguiente tabla muestra que `metrics` es el SERVICE\$1ID del nombre del paquete, pero `cloudwatchmetrics` es el SERVICE\$1ID del ArtifactID.

#### En v2
<a name="migration-serviceid-diffs-withinv2"></a>

No hay diferencias en el SERVICE\$1ID utilizado en los nombres de paquetes y artifactId.

#### Entre v1 y v2.
<a name="migration-serviceid-diffs-btwv1v2"></a>

En la mayoría de los servicios, el SERVICE\$1ID de la v2 es el mismo que el SERVICE\$1ID de la v1, tanto en los nombres de paquetes como en los artifactId. Un ejemplo de esto es el SERVICE\$1ID `cognitoedentity` que se muestra en la tabla anterior. Sin embargo, algunos SERVICE\$1 IDs difieren entre sí, como se muestra en la siguiente tabla. SDKs

Un **SERVICE\$1ID en negrita** en las columnas de la v1 indica que es diferente del SERVICE\$1ID utilizado en la v2.


| Nombre del servicio | Nombre del paquete v1 | artifactId v1 | artifactId v2 | Nombre del paquete v2 | 
| --- | --- | --- | --- | --- | 
|  |  Todos los nombres de paquetes comienzan por `com.amazonaws.services`, como se muestra en la primera fila.  |  Todos los artifactId aparecen entre etiquetas, como se muestra en la primera fila.  |  Todos los artifactId aparecen entre etiquetas, como se muestra en la primera fila.  |  Todos los nombres de paquetes comienzan por `software.amazon.awssdk`, como se muestra en la primera fila.  | 
|  | 
| API Gateway | com.amazonaws.services.apigateway | <artifactId>aws-java-sdk- puerta de enlace api</artifactId> | <artifactId>apigateway</artifactId> | software.amazon.awssdk.services.apigateway | 
| App Registry | appregistry | appregistry | servicecatalogappregistry | servicecatalogappregistry | 
| Application Discovery | applicationdiscovery | discovery | applicationdiscovery | applicationdiscovery | 
| Augmented AI Runtime | augmentedairuntime | augmentedairuntime | sagemakera2iruntime | sagemakera2iruntime | 
| Certificate Manager | certificatemanager | acm | acm | acm | 
| CloudControl API | cloudcontrolapi | cloudcontrolapi | cloudcontrol | cloudcontrol | 
| CloudSearch | cloudsearchv2 | cloudsearch | cloudsearch | cloudsearch | 
| CloudSearch Dominio | cloudsearchdomain | cloudsearch | cloudsearchdomain | cloudsearchdomain | 
| CloudWatch Eventos | cloudwatchevents | eventos | cloudwatchevents | cloudwatchevents | 
| CloudWatch Evidentemente | cloudwatchevidently | cloudwatchevidently | evidently | evidently | 
| CloudWatch Registros | logs | logs | cloudwatchlogs | cloudwatchlogs | 
| CloudWatch Métricas | métricas | cloudwatchmetrics | cloudwatch | cloudwatch | 
| CloudWatch Ron | cloudwatchrum | cloudwatchrum | rum | rum | 
| Amazon Cognito Identity Provider | cognitoide | cognitoide | cognitoidentityprovider | cognitoidentityprovider | 
| Connect Campaign | connectcampaign | connectcampaign | connectcampaigns | connectcampaigns | 
| Connect Wisdom | connectwisdom | connectwisdom | wisdom | wisdom | 
| Database Migration Service | databasemigrationservice | dms | databasemigration | databasemigration | 
| DataZone | datazone | datazoneexternal | datazone | datazone | 
| DynamoDB | dynamodbv2 | dynamodb | dynamodb | dynamodb | 
| Elastic File System | sistema de archivos elástico | efs | efs | efs | 
| Elastic Map Reduce | elasticmapreduce | emr | emr | emr | 
| Glue DataBrew | gluedatabrew | gluedatabrew | databrew | databrew | 
| IAM Roles Anywhere | iamrolesanywhere | iamrolesanywhere | rolesanywhere | rolesanywhere | 
| Administración de identidades | identitymanagement | iam | iam | iam | 
| IoT Data | iotdata | iot | iotdataplane | iotdataplane | 
| Kinesis Analytics | kinesisanalytics | kinesis | kinesisanalytics | kinesisanalytics | 
| Kinesis Firehose | kinesisfirehose | kinesis | firehose | firehose | 
| Kinesis Video Signaling Channels | kinesisvideosignalingchannels | kinesisvideosignalingchannels | kinesisvideosignaling | kinesisvideosignaling | 
| Lex | lexruntime | Álex | lexruntime | lexruntime | 
| Lookout For Vision | lookoutforvision | lookoutforvision | lookoutvision | lookoutvision | 
| Modernización de la unidad central | mainframemodernization | mainframemodernization | m2 | m2 | 
| Marketplace Metering | marketplacemetering | marketplacemeteringservice | marketplacemetering | marketplacemetering | 
| Managed Grafana | managedgrafana | managedgrafana | grafana | grafana | 
| Mechanical Turk | mturk | mechanicalturkrequester | mturk | mturk | 
| Recomendaciones de estrategias de Migration Hub | migrationhubstrategyrecommendations | migrationhubstrategyrecommendations | migrationhubstrategy | migrationhubstrategy | 
| Nimble Studio | nimblestudio | nimblestudio | nimble | nimble | 
| Private 5G | private5g | private5g | redes privadas | redes privadas | 
| Prometheus | prometheus | prometheus | amp | amp | 
| Papelera de reciclaje | recyclebin | recyclebin | rbin | rbin | 
| API de datos de Redshift  | redshiftdataapi | redshiftdataapi | redshiftdata | redshiftdata | 
| Route 53 | route53domains | route53 | route53domains | route53domains | 
| Sage Maker Edge Manager | sagemakeredgemanager | sagemakeredgemanager | sagemakeredge | sagemakeredge | 
| Security Token | securitytoken | sts | sts | sts | 
| Server Migration | servermigration | servermigration | sms | sms | 
| Simple Email | simpleemail | ses | ses | ses | 
| Simple Email V2 | simpleemailv2 | sesv2 | sesv2 | sesv2 | 
| Simple Systems Management | simplesystemsmanagement | ssm | ssm | ssm | 
| Simple Workflow | simpleworkflow | simpleworkflow | swf | swf | 
| Step Functions | stepfunctions | stepfunctions | sfn | sfn | 