

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

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

Você pode migrar aplicações existentes do SDK para Java 1.x de duas formas.

1. Abordagem automatizada usando a [ferramenta de migração](migration-tool.md).

1. [Abordagem manual](migration-steps.md) substituindo incrementalmente as importações de 1.x por importações de 2.x.

Recomendamos que você comece usando a ferramenta de migração. Ela automatiza grande parte da rotina de substituir o código de 1.x para 2.x. 

Como a ferramenta [não migra todos os recursos](migration-tool.md#migration-tool-limitations), você precisará pesquisar o código de v1 restante depois de executar a ferramenta. Quando você encontrar um código que a ferramenta não migrou, siga as [step-by-step instruções](migration-steps.md) (abordagem manual) e use os [artigos do guia de migração](migration-whats-different.md) para concluir a migração.

**Topics**
+ [Ferramenta de migração](migration-tool.md)
+ [Step-by-step instruções](migration-steps.md)

# Ferramenta de migração do AWS SDK para Java
<a name="migration-tool"></a>

O AWS SDK para Java fornece uma ferramenta de migração que ajuda a automatizar a migração do código do SDK para Java 1.x (V1) para 2.x (V2). A ferramenta usa o [OpenRewrite](https://docs.openrewrite.org/), uma ferramenta de refatoração de código-fonte e código aberto, para fazer a migração. O OpenRewrite usa regras de modificação de código (chamadas de “receitas”) para atualizar automaticamente o código-fonte da sintaxe e dos padrões da V1 para a V2.

A ferramenta permite regras de modificação de código para clientes de serviços do SDK e para a biblioteca de alto nível do [Gerenciador de Transferências do S3](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/transfer/TransferManager.html). As regras de modificação de código para outras APIs de alto nível, como da V1 da API [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) para a V2 da [API de cliente avançado do DynamoDB](dynamodb-enhanced-client.md) não são compatíveis. 

Consulte mais detalhes sobre limitações no [final desta página](#migration-tool-limitations). Consulte exemplos detalhados de padrões de código comuns sem suporte com etapas de migração manual em [Padrões de código sem suporte](migration-tool-unsupported-patterns.md).

## Usar a ferramenta de migração
<a name="migration-tool-use"></a>

### Migrar um projeto Maven
<a name="migration-tool-use-maven"></a>

Siga as instruções abaixo para migrar seu projeto baseado no Maven do SDK para Java 1.x usando a ferramenta de [plug-in OpenRewrite Maven](https://docs.openrewrite.org/reference/rewrite-maven-plugin).

1. Acesse o diretório-raiz do projeto Maven

   Abra uma janela de terminal (linha de comando) e acesse o diretório-raiz da aplicação baseada no Maven.

1. Execute o comando `rewrite-maven-plugin` do plugin

   É possível escolher entre dois modos (metas do Maven): `dryRun` e `run`.

   **`dryRun`**** Modo**

   No modo `dryRun`, o plug-in gera logs de diferenças na saída do console e um arquivo de patch chamado `rewrite.patch` na pasta `target/rewrite`. Esse modo permite que você visualize as alterações que seriam feitas, já que nenhuma alteração é feita nos arquivos de código-fonte. 

   O exemplo a seguir mostra como invocar o plug-in no 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
   ```

   \$1Substitua *<rewrite-plugin-version>* pelo valor de `rewriteMavenPluginVersion` exibido neste [arquivo de teste](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\$1Substitua *<sdkversion>* por uma versão 2.x do SDK. Confira a versão mais recente em [Maven Central](https://central.sonatype.com/artifact/software.amazon.awssdk/v2-migration). 
**Importante**  
Use a versão de `rewrite-maven-plugin` mostrada no [arquivo de teste](https://github.com/aws/aws-sdk-java-v2/blob/3a01289246f1f4ac814a354051d00030e53ef968/test/v2-migration-tests/src/test/java/software/amazon/awssdk/v2migrationtests/MavenTestBase.java#L54), pois outras versões podem não funcionar.

   A saída do console do modo `dryRun` deve ser semelhante à saída a seguir.

   ```
   [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**

   Quando você executa o plug-in no modo `run`, ele modifica o código-fonte no disco para aplicar as alterações. Faça backup do código-fonte antes de executar o comando.

   O exemplo a seguir mostra como invocar o plug-in no 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
   ```

   \$1Substitua *<rewrite-plugin-version>* pelo `rewriteMavenPluginVersionvalue` exibido neste [arquivo de teste](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\$1Substitua *<sdkversion>* por uma versão 2.x do SDK. Confira a versão mais recente em [Maven Central](https://central.sonatype.com/artifact/software.amazon.awssdk/v2-migration). 

   Depois de executar o comando, faça uma compilação da aplicação e realize testes para verificar as alterações. 

### Migrar um projeto Gradle
<a name="migration-tool-use-gradle"></a>

Siga as instruções abaixo para migrar seu projeto baseado no Gradle do SDK para Java 1.x usando a ferramenta de [plug-in OpenRewrite Gradle](https://docs.openrewrite.org/reference/gradle-plugin-configuration).

1. Acesse o diretório-raiz do projeto Gradle

   Abra uma janela de terminal (linha de comando) e acesse o diretório-raiz da aplicação baseada no Gradle.

1. Criar um script de inicialização do Gradle

   Crie um arquivo `init.gradle` com o conteúdo a seguir no diretório.

   ```
   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()
               }
           }
       }
   }
   ```

   \$1Substitua *<rewrite-plugin-version>* pela versão exibida neste [arquivo de teste](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. Execute o comando `rewrite`

   Assim como no plug-in Maven, você pode executar o plug-in Gradle no modo `dryRun` or `run`.

   **Modo `dryRun`**

   O exemplo a seguir mostra como invocar o plug-in no modo `dryRun`.

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

   **Modo `run`**

   O exemplo a seguir mostra como invocar o plug-in no modo `run`.

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

## Limitações atuais
<a name="migration-tool-limitations"></a>

Embora a migração seja compatível com a maioria dos códigos da V1 por meio de regras de modificação de código que são atualizadas para o equivalente da V2, algumas classes e métodos não são abordados. Referente a essas classes e métodos, siga as [instruções passo a passo](migration-steps.md) para migrar o código manualmente.

Para algumas regras de modificação de código incompatíveis, a ferramenta de migração pode adicionar um comentário que comece com:

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

Após o comentário, a ferramenta gera um esboço genérico da versão V2 do método ou da classe. Por exemplo, na saída a seguir, a ferramenta de migração tentou migrar o método `setBucketLifecycleConfiguration` do cliente V1 do 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());
```

Os links na lista abaixo abrem informações de migração para ajudar você a migrar o código manualmente.
+ [Diferenças do cliente S3 entre a versão 1 e a versão 2 do AWS SDK para Java](migration-s3-client.md)
+ [Gerenciador de Transferências do S3](migration-s3-transfer-manager.md) (TransferManager)
+ [Mapeamento de objetos do DynamoDB](migration-ddb-mapper.md) (DynamoDBMapper)
+ [Utilitário de metadados do EC2](migration-imds.md) (EC2MetadataUtils)
+ [Waiters](migration-waiters.md) (AmazonDynamoDBWaiters)
+ [Compilador de Políticas do IAM](migration-iam-policy-builder.md) (Policy)
+ [Pré-assinatura do CloudFront](migration-cloudfront-presigning.md) (CloudFrontUrlSigner, CloudFrontCookieSigner)
+ [Notificações de Eventos do S3](migration-s3-event-notification.md) (S3EventNotification)
+ Publicação de métricas do SDK ([documentação da 1.x](https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/generating-sdk-metrics.html), [documentação da 2.x](metrics.md))
+ [Padrões de código incompatíveis](migration-tool-unsupported-patterns.md): exemplos detalhados de padrões de código comuns que exigem migração manual

# Padrões de código incompatíveis da ferramenta de migração
<a name="migration-tool-unsupported-patterns"></a>

A ferramenta de migração converte automaticamente a maior parte do código da v1 para a v2. No entanto, alguns padrões de código exigem migração manual. Este tópico fornece exemplos detalhados dos padrões incompatíveis mais comuns e mostra como convertê-los manualmente.

A lista de padrões a seguir não está completa. Se seu código não for compilado após a execução da ferramenta de migração, siga as [instruções de step-by-step migração](migration-steps.md) para migrar manualmente o código v1 restante.

## Solicitar construtores de objetos com parâmetros
<a name="request-pojo-constructors"></a>

Para solicitação POJOs (excluindo o Amazon S3), a ferramenta de migração transforma somente os métodos setter. A ferramenta não é compatível com construtores com parâmetros.

**Padrão compatível: objeto de solicitação usando setters (sem parâmetros de construtor)**

Antes (código original da v1):

```
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");
```

Depois (resultado da ferramenta de migração):

```
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();
```

**Padrão incompatível: construtor de objeto de solicitação com parâmetros**

A ferramenta de migração não pode converter construtores com parâmetros:

Antes da migração manual, mas depois da ferramenta de migração:

```
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");
```

A ferramenta de migração transforma a importação para a v2, mas o código do construtor permanece inalterado e requer atualizações manuais para usar o padrão do construtor.

Após a migração 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 do cliente de serviço com parâmetros individuais
<a name="service-client-method-overloads"></a>

A ferramenta de migração não pode converter métodos de cliente de serviço que usam parâmetros individuais em vez de objetos de solicitação (exceto Amazon S3).

Antes (código da 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");
```

Depois (resultado da ferramenta de migração: não 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");
```

Você deve atualizar manualmente os argumentos do método para usar um objeto de solicitação:

```
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 tempo limite da solicitação
<a name="request-pojo-timeout-configuration"></a>

A ferramenta de migração não converte métodos que definem tempo limite em objetos de solicitação.

Antes (código da v1):

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

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

Depois (resultado da ferramenta de migração: não compila):

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

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

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

Você deve migrar manualmente para usar o método `overrideConfiguration` da 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();
```

## Construtores de clientes de serviço com parâmetros
<a name="service-client-constructors-with-args"></a>

A ferramenta de migração converte construtores de cliente de serviço vazios, mas não pode converter construtores que aceitam parâmetros como credenciais ou configuração.

Antes (código da 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);
```

Depois (resultado da ferramenta de migração: não 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);
```

Você deve atualizar manualmente o construtor do cliente de serviço para usar o padrão do 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-stepInstruções de migração com exemplo
<a name="migration-steps"></a>

Esta seção fornece um step-by-step guia para migrar seu aplicativo que atualmente usa o SDK for Java v1.x para o SDK for Java 2.x. A primeira parte apresenta uma visão geral das etapas seguidas por um exemplo detalhado de uma migração.

As etapas abordadas aqui descrevem a migração de um caso de uso normal, em que o aplicativo chama Serviços da AWS usando clientes de serviço orientados por modelos. Se você precisar migrar código que usa um nível superior APIs , como o [S3 Transfer Manager](migration-s3-transfer-manager.md) ou a [CloudFrontpré-assinatura](migration-cloudfront-presigning.md), consulte a seção abaixo do [O que há de diferente entre AWS SDK para Java 1.x e 2.x](migration-whats-different.md) índice.



A abordagem descrita aqui é uma sugestão. Você pode usar outras técnicas e aproveitar os recursos de edição de código do IDE para alcançar o mesmo resultado. 

## Visão geral das etapas
<a name="migration-steps-overview"></a>

### 1. Comece adicionando o BOM do SDK para Java 2.x
<a name="migration-steps-overview-step1"></a>

Ao adicionar o elemento BOM (Lista de materiais) do Maven para o SDK para Java 2.x ao arquivo POM, você garante que todas as dependências necessárias da v2 sejam da mesma versão. O POM pode conter dependências da v1 e da v2. Isso permite migrar o código de forma incremental em vez de alterá-lo de uma só vez.

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

É possível encontrar a [versão mais recente](https://central.sonatype.com/artifact/software.amazon.awssdk/bom) no repositório do Maven Central.

### 2. Pesquisar arquivos para declarações de importação de classe da v1
<a name="migration-steps-overview-step2"></a>

Ao escanear os arquivos em seu aplicativo em busca de SERVICE\$1 IDs usado nas importações v1, você encontrará o SERVICE\$1 exclusivo usado. IDs Um SERVICE\$1ID é um nome curto e exclusivo para um. AWS service (Serviço da AWS) Por exemplo, `cognitoidentity` é o SERVICE\$1ID do Amazon Cognito Identity.

### 3. Determine as dependências da v2 do Maven com base nas declarações de importação da v1
<a name="migration-steps-overview-step3"></a>

Depois de encontrar todos os exclusivos v1 SERVICE\$1IDs, você pode determinar o artefato Maven correspondente para a dependência v2 consultando a. [Nome do pacote para mapeamentos de artifactId do Maven.](#migration-serviceid-artifactid-mapping)

### 4. Adicionar elementos de dependência da v2 ao arquivo POM
<a name="migration-steps-overview-step4"></a>

Atualize o arquivo POM do Maven com os elementos de dependência determinados na etapa 3.

### 5. Nos arquivos Java, altere incrementalmente as classes da v1 para as classes da v2
<a name="migration-steps-overview-step5"></a>

Ao substituir as classes da v1 por classes da v2, faça as alterações necessárias para dar suporte à API da v2, como usar compiladores em vez de construtores e usar getters e setters fluentes.

### 6. Remova as dependências da v1 do Maven das importações do POM e da v1 dos arquivos
<a name="migration-steps-overview-step6"></a>

Depois de migrar o código para usar classes da v2, remova todas as importações da v1 restantes dos arquivos e todas as dependências do arquivo de compilação.

### 7. Refatorar o código para usar os aprimoramentos da API da v2
<a name="migration-steps-overview-step7"></a>

Depois que o código for compilado e aprovado nos testes, você poderá aproveitar os aprimoramentos da v2, como usar um cliente HTTP diferente ou paginadores para simplificar o código. Esta é uma etapa opcional.

## Exemplo de migração
<a name="migration-steps-example"></a>

Neste exemplo, migramos uma aplicação que usa o SDK para Java v1 e acessa vários Serviços da AWS. Trabalhamos detalhadamente com o seguinte método da v1 na etapa 5. Esse é um método em uma classe que contém oito métodos e há 32 classes na aplicação.

### método da v1 para migrar
<a name="v1-snippet-collapsed"></a>

Somente as importações do SDK da v1 estão listadas abaixo no arquivo 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. Adicionar BOM da v2 do Maven
<a name="migration-steps-example-step1"></a>

Adicione o BOM do Maven para o SDK para Java 2.x ao POM junto com quaisquer outras dependências na seção `dependencyManagement`. Se o arquivo POM tiver o BOM da v1 do SDK, deixe-o por enquanto. Ele será removido em uma etapa posterior.

#### Gerenciamento de dependências do POM no início
<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. Pesquisar arquivos para declarações de importação de classe da v1
<a name="migration-steps-example-step2"></a>

Pesquise o código da aplicação em busca de ocorrências exclusivas de `import com.amazonaws.services`. Isso nos ajuda a determinar as dependências da v1 usadas pelo projeto. Se a aplicação tiver um arquivo POM do Maven com dependências da v1 listadas, você poderá usar essas informações em vez disso. 

Neste exemplo, usamos o comando [`ripgrep` (rg)](https://github.com/BurntSushi/ripgrep) para pesquisar a base de código.

Da raiz da base de código, execute o comando `ripgrep` a seguir. Depois de `ripgrep` encontrar as instruções de importação, elas são canalizadas para os `uniq` comandos `cut``sort`, e para isolar o SERVICE\$1. IDs 

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

Para esse aplicativo, os seguintes SERVICE\$1 IDs são registrados no console.

```
autoscaling
cloudformation
ec2
identitymanagement
```

Isso indica que houve pelo menos uma ocorrência de cada um dos seguintes nomes de pacotes usados nas declarações `import`. Para nossos propósitos, os nomes das classes individuais não importam. Só precisamos encontrar os SERVICE\$1 IDs que são usados.

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

### 3. Determine as dependências da v2 do Maven com base nas declarações de importação da v1
<a name="migration-steps-example-step3"></a>

O SERVICE\$1 IDs para v1 que isolamos da Etapa 2 — por exemplo, `autoscaling` e `cloudformation` — pode ser mapeado para o mesmo SERVICE\$1ID v2 na maior parte. Como o artifactId da v2 do Maven corresponde ao SERVICE\$1ID na maioria dos casos, você tem as informações necessárias para adicionar blocos de dependência ao arquivo POM.

A tabela a seguir mostra como podemos determinar as dependências da v2.


| SERVICE\$1ID da v1 mapeia para...nome do pacote | SERVICE\$1ID da v2 mapeia para...nome do pacote | Dependência da v2 do Maven | 
| --- | --- | --- | 
|  **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>  | 
|  **escalonamento automático** `com.amazonaws.services.autoscaling.*`  |  **escalonamento 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.*` | eu sou\$1`software.amazon.awssdk.iam.*` |  <pre><dependency><br />  <groupId>software.amazon.awssdk</groupId><br />  <artifactId>iam</artifactId><br /></dependency></pre>  | 

\$1 O mapeamento de `identitymanagement` para `iam` é uma exceção em que o SERVICE\$1ID difere entre as versões. Consulte as exceções em [Nome do pacote para mapeamentos de artifactId do Maven.](#migration-serviceid-artifactid-mapping), caso o Maven ou o Gradle não consigam resolver a dependência da v2.

### 4. Adicionar elementos de dependência da v2 ao arquivo POM
<a name="migration-steps-example-step4"></a>

Na etapa 3, determinamos os quatro blocos de dependência que precisam ser adicionados ao arquivo POM. Não precisamos adicionar uma versão porque especificamos o BOM na etapa 1. Depois que as importações são adicionadas, nosso arquivo POM tem os seguintes elementos de dependência.

```
    ...
  <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. Nos arquivos Java, altere incrementalmente as classes da v1 para as classes da v2
<a name="migration-steps-example-step5"></a>

No método que estamos migrando, vemos
+ Um cliente de serviço do EC2 de `com.amazonaws.services.ec2.AmazonEC2Client`.
+ Várias classes de modelo do EC2 usadas. Por exemplo, `DescribeInstancesRequest` e `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;
}
...
```

Nosso objetivo é substituir todas as importações da v1 por importações da v2. Prosseguimos com uma classe por vez.

#### a. Substitua a declaração de importação ou o nome da classe
<a name="migration-example-step5-substep1"></a>

Vemos que o primeiro parâmetro do método `describeRunningInstances` uma instância `AmazonEC2Client` da v1. Execute um destes procedimentos:
+ Substitua a importação por `com.amazonaws.services.ec2.AmazonEC2Client` com `software.amazon.awssdk.services.ec2.Ec2Client` e altere `AmazonEC2Client` para `Ec2Client`.
+ Altere o tipo de parâmetro para `Ec2Client` e deixe que o IDE solicite a importação correta. Nosso IDE solicitará a importação da classe da v2 porque os nomes dos clientes são diferente: `AmazonEC2Client` e `Ec2Client`. Essa abordagem não funcionará se o nome da classe for o mesmo nas duas versões.

#### b. Substitua as classes do modelo da v1 por equivalentes da v2
<a name="migration-example-step5-substep2"></a>

Após a mudança para o `Ec2Client` da v2, se usarmos um IDE, veremos erros de compilação na declaração a seguir.

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

O erro de compilação resulta do uso de uma instância de `DescribeInstancesRequest` da v1 como parâmetro para o método `Ec2Client` `describeInstances` da v2. Para corrigir, faça as seguintes declarações de substituição ou importação.


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

#### c. Altere os compiladores da v1 para compiladores da v2.
<a name="migration-example-step5-substep3"></a>

Ainda vemos erros de compilação porque [não há construtores nas classes da v2](migration-whats-different.md#immutable-classes). Para corrigir isso, faça a alteração a seguir.


| alteração | para | 
| --- | --- | 
|  <pre>final DescribeInstancesRequest request = new DescribeInstancesRequest()<br />        .withInstanceIds(instanceIdsCopy);</pre>  |  <pre>final DescribeInstancesRequest request = DescribeInstancesRequest.builder()<br />        .instanceIds(instanceIdsCopy)<br />        .build();</pre>  | 

#### d. Substitua objetos de resposta `*Result` da v1 por `*Response` equivalentes da v2
<a name="migration-example-step5-substep4"></a>

Uma diferença consistente entre a v1 e a v2 é que todos os [objetos de resposta na v2 terminam com `*Response` em vez de `*Result`](migration-whats-different.md#model-classname-changes). Substitua a importação `DescribeInstancesResult` da v1 pela importação `DescribeInstancesResponse` da v2.

#### d. Fazer alterações na API
<a name="migration-example-step5-substep5"></a>

A declaração a seguir precisa de algumas alterações.

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

Na v2, os [métodos de setter](migration-whats-different.md#setter-getter-methods) não usam o `set` nem com `prefix`. Métodos getter com prefixo `get` também foram incluídos no SDK para Java 2.x

Classes de modelo, como a instância `request`, são imutáveis na v2, então precisamos criar uma `DescribeInstancesRequest` com um compilador.

Na v2, a declaração se torna a seguinte.

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

#### d. Repita até que o método seja compilado com classes da v2
<a name="migration-example-step5-substep6"></a>

Continue com o restante do código. Substitua as importações da v1 pelas importações da v2 e corrija os erros de compilação. Consulte a [Referência da API da v2](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/ec2/package-summary.html) e a [Referência O que mudou](migration-whats-different.md), conforme necessário.

Depois de migrarmos esse único método, temos o seguinte código da 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;
    }
...
```

Como estamos migrando um único método em um arquivo Java com oito métodos, temos uma combinação de importações da v1 e da v2 à medida que trabalhamos no arquivo. Adicionamos as últimas seis declarações de importação à medida que executamos as etapas. 

Depois de migrarmos todo o código, não haverá mais declarações de importação v1.

### 6. Remova as dependências da v1 do Maven das importações do POM e da v1 dos arquivos
<a name="migration-steps-example-step6"></a>

Depois de migrarmos todo o código da v1 no arquivo, temos as seguintes declarações de importação do SDK da 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;
```

Depois de migrarmos *todos* os arquivos na aplicação, não precisaremos mais das dependências da v1 no arquivo POM. Remova o BOM v1 da seção `dependencyManagement`, caso esteja usando, e todos os blocos de dependência da v1.

### 7. Refatorar o código para usar os aprimoramentos da API da v2
<a name="migration-steps-example-step7"></a>

Para o trecho que estamos migrando, podemos usar um paginador da v2 e deixar o SDK gerenciar as solicitações baseadas em tokens para obter mais dados, caso desejarmos.

Podemos substituir toda a cláusula `do` pela seguinte.

```
                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);
                                    }
                                }));
```

## Nome do pacote para mapeamentos de artifactId do Maven.
<a name="migration-serviceid-artifactid-mapping"></a>

Ao migrar o projeto Maven ou Gradle da v1 do SDK para Java para a v2, você precisa descobrir quais dependências adicionar ao arquivo de compilação. A abordagem descrita em [step-by-stepInstruções de migração com exemplo](#migration-steps) (etapa 3) usa os nomes dos pacotes nas declarações de importação como ponto de partida para determinar as dependências (como artifactIds) que devem ser adicionadas ao arquivo de compilação. 

Você pode usar as informações deste tópico para mapear os nomes dos pacotes da v1 para os artifactIds da v2.

### Convenção de nomenclatura comum usada em nomes de pacotes e artifactIds do Maven
<a name="migration-naming-convention"></a>

A tabela a seguir mostra a convenção de nomenclatura comum SDKs usada para um determinado SERVICE\$1ID. Um SERVICE\$1ID é um identificador exclusivo para um. AWS service (Serviço da AWS) Por exemplo, o SERVICE\$1ID do serviço Amazon S3 é `s3` e o SERVICE\$1ID do Amazon Cognito Identity é `cognitoidentity`.


| Nome do pacote da v1 (declaração de importação) | artifactId da v1 | artifactId da v2 | Nome do pacote da v2 (declaração de importação) | 
| --- | --- | --- | --- | 
| com.amazonaws.services.SERVICE\$1ID | aws-java-sdk-ID DO SERVIÇO | SERVICE\$1ID | software.amazon.awssdk.services.SERVICE\$1ID | 
|   | 
| Exemplo do Amazon Cognito Identity (SERVICE\$1ID: cognitoidentity) | 
| com.amazonaws.services.cognitoidentity | aws-java-sdk- identidade cognitiva | cognitoidentity | software.amazon.awssdk.services.cognitoidentity | 

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

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

Em alguns casos, o SERVICE\$1ID difere entre o nome do pacote e o artifactId do mesmo serviço. Por exemplo, a linha CloudWatch Métricas da tabela a seguir mostra que `metrics` é o SERVICE\$1ID no nome do pacote, mas `cloudwatchmetrics` é o SERVICE\$1ID do ArtifactID.

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

Não há diferenças no SERVICE\$1ID usado em nomes de pacotes e artifactIds.

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

Para a maioria dos serviços, o SERVICE\$1ID na v2 é o mesmo que o SERVICE\$1ID na v1 nos nomes dos pacotes e nos artifactIds. Um exemplo disso é o SERVICE\$1ID `cognitoedentity`, conforme mostrado na tabela anterior. No entanto, alguns SERVICE\$1 IDs diferem entre os, SDKs conforme mostrado na tabela a seguir.

Um **SERVICE\$1ID em negrito** em qualquer uma das colunas da v1 indica que ele é diferente do SERVICE\$1ID usado na v2.


| Nome do serviço | Nome do pacote da v1 | artifactId da v1 | artifactId da v2 | Nome do pacote da v2 | 
| --- | --- | --- | --- | --- | 
|  |  Todos os nomes de pacotes começam com `com.amazonaws.services`, conforme mostrado na primeira linha.  |  Todos os artifactIds são colocados entre tags, conforme mostrado na primeira linha.  |  Todos os artifactIds são colocados entre tags, conforme mostrado na primeira linha.  |  Todos os nomes de pacotes começam com `software.amazon.awssdk`, conforme mostrado na primeira linha.  | 
|  | 
| API Gateway | com.amazonaws.services.apigateway | <artifactId>aws-java-sdk- gateway de API</artifactId> | <artifactId>apigateway</artifactId> | software.amazon.awssdk.services.apigateway | 
| Registro de aplicação | appregistry | appregistry | servicecatalogappregistry | servicecatalogappregistry | 
| Application Discovery | applicationdiscovery | discovery | applicationdiscovery | applicationdiscovery | 
| Runtime do Augmented AI | augmentedairuntime | augmentedairuntime | sagemakera2iruntime | sagemakera2iruntime | 
| Certificate Manager | certificatemanager | acm | acm | acm | 
| CloudControl API | cloudcontrolapi | cloudcontrolapi | cloudcontrol | cloudcontrol | 
| CloudSearch | cloudsearchv2 | cloudsearch | cloudsearch | cloudsearch | 
| CloudSearch Domínio | cloudsearchdomain | pesquisa na nuvem | 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 Rum | cloudwatchrum | cloudwatchrum | rum | rum | 
| Provedor de identidades do Cognito | cognitoidp | cognitoidp | cognitoidentityprovider | cognitoidentityprovider | 
| Campanhas do Connect | 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 arquivos 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 | 
| Gerenciamento de identidades | identitymanagement | iam | iam | iam | 
| Dados de IoT | iotdata | iot | iotdataplane | iotdataplane | 
| Kinesis Analytics | kinesisanalytics | kinesis | kinesisanalytics | kinesisanalytics | 
| Kinesis Firehose | kinesisfirehose | kinesis | firehose | firehose | 
| Canais de sinalização do Kinesis Video | kinesisvideosignalingchannels | kinesisvideosignalingchannels | kinesisvideosignaling | kinesisvideosignaling | 
| Lex | lexruntime | lex | lexruntime | lexruntime | 
| Lookout for Vision | lookoutforvision | lookoutforvision | lookoutvision | lookoutvision | 
| Mainframe Modernization | mainframemodernization | mainframemodernization | m2 | m2 | 
| Marketplace Metering | marketplacemetering | marketplacemeteringservice | marketplacemetering | marketplacemetering | 
| Managed Grafana | managedgrafana | managedgrafana | grafana | grafana | 
| Mechanical Turk | mturk | mechanicalturkrequester | mturk | mturk | 
| Migration Hub Strategy Recommendations | migrationhubstrategyrecommendations | migrationhubstrategyrecommendations | migrationhubstrategy | migrationhubstrategy | 
| Nimble Studio | nimblestudio | nimblestudio | nimble | nimble | 
| 5G Privado | private5g | private5g | privatenetworks | privatenetworks | 
| Prometheus | prometheus | prometheus | amp | amp | 
| Lixeira | recyclebin | recyclebin | rbin | rbin | 
| API de dados Redshift | redshiftdataapi | redshiftdataapi | redshiftdata | redshiftdata | 
| Route 53 | route53domains | route53 | route53domains | route53domains | 
| SageMaker 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 Manager | simplesystemsmanagement | ssm | ssm | ssm | 
| Simple Workflow | simpleworkflow | simpleworkflow | swf | swf | 
| Step Functions | stepfunctions | stepfunctions | sfn | sfn | 