

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# AWS SDK pour Java outil de migration
<a name="migration-tool"></a>

 AWS SDK pour Java Il fournit un outil de migration qui permet d'automatiser la migration du code du SDK for Java 1.x (V1) vers le code 2.x (V2). L'outil utilise [OpenRewrite](https://docs.openrewrite.org/)un outil open source de refactorisation du code source pour effectuer la migration. OpenRewrite utilise des règles de modification du code (appelées « recettes ») pour mettre à jour automatiquement votre code source de la syntaxe et des modèles V1 à V2.

L'outil prend en charge les règles de modification du code pour les clients du service SDK et la bibliothèque de haut niveau [S3 Transfer Manager](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/transfer/TransferManager.html). Les règles de modification du code pour d'autres applications de haut niveau, APIs telles que l'API [DynamoDB Enhanced Client](dynamodb-enhanced-client.md) des versions 1 [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)à 2, ne sont pas prises en charge. 

Pour plus de détails sur les limitations, consultez la [fin de cette page](#migration-tool-limitations). Pour des exemples détaillés de modèles de code courants non pris en charge avec des étapes de migration manuelle, voir Modèles de [code non pris en charge](migration-tool-unsupported-patterns.md).

## Utiliser l'outil de migration
<a name="migration-tool-use"></a>

### Migrer un projet Maven
<a name="migration-tool-use-maven"></a>

[Suivez les instructions ci-dessous pour migrer votre projet SDK for Java 1.x basé sur Maven à l'aide OpenRewrite du plug-in Maven.](https://docs.openrewrite.org/reference/rewrite-maven-plugin)

1. Accédez au répertoire racine de votre projet Maven

   Ouvrez une fenêtre de terminal (ligne de commande) et accédez au répertoire racine de votre application basée sur Maven.

1. Exécutez la `rewrite-maven-plugin` commande du plugin

   Vous pouvez choisir entre deux modes (objectifs Maven) : `dryRun` et`run`.

   **Mode `dryRun`******

   Dans ce `dryRun` mode, le plugin génère des journaux de comparaison dans la sortie de la console et un fichier correctif nommé `rewrite.patch` dans le `target/rewrite` dossier. Ce mode vous permet de prévisualiser les modifications qui seront apportées, car aucune modification n'est apportée aux fichiers de code source. 

   L'exemple suivant montre comment invoquer le plugin en `dryRun` mode.

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

   \$1Remplacez *<rewrite-plugin-version>* par la `rewriteMavenPluginVersion` valeur que vous voyez dans ce [fichier de test](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\$1Remplacez par *<sdkversion>* une version 2.x du SDK. Visitez [Maven Central](https://central.sonatype.com/artifact/software.amazon.awssdk/v2-migration) pour vérifier la dernière version. 
**Important**  
Veillez à utiliser la version `rewrite-maven-plugin` indiquée dans le [fichier de test](https://github.com/aws/aws-sdk-java-v2/blob/3a01289246f1f4ac814a354051d00030e53ef968/test/v2-migration-tests/src/test/java/software/amazon/awssdk/v2migrationtests/MavenTestBase.java#L54), car les autres versions risquent de ne pas fonctionner.

   La sortie de votre console depuis le `dryRun` mode doit ressembler à la sortie suivante.

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

   **Mode `run`******

   Lorsque vous exécutez le plugin en `run` mode, il modifie le code source sur le disque pour appliquer les modifications. Assurez-vous de disposer d'une copie de sauvegarde du code source avant d'exécuter la commande.

   L'exemple suivant montre comment invoquer le plugin en `run` mode.

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

   \$1Remplacez *<rewrite-plugin-version>* par celui `rewriteMavenPluginVersionvalue` que vous voyez dans ce [fichier de test](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\$1Remplacez par *<sdkversion>* une version 2.x du SDK. Visitez [Maven Central](https://central.sonatype.com/artifact/software.amazon.awssdk/v2-migration) pour vérifier la dernière version. 

   Après avoir exécuté la commande, compilez votre application et exécutez des tests pour vérifier les modifications. 

### Migrer un projet Gradle
<a name="migration-tool-use-gradle"></a>

[Suivez les instructions ci-dessous pour migrer votre projet SDK for Java 1.x basé sur Gradle à l'aide OpenRewrite du plug-in Gradle.](https://docs.openrewrite.org/reference/gradle-plugin-configuration)

1. Accédez au répertoire racine de votre projet Gradle

   Ouvrez une fenêtre de terminal (ligne de commande) et accédez au répertoire racine de votre application basée sur Gradle.

1. Créer un script d'initialisation Gradle

   Créez un `init.gradle` fichier avec le contenu suivant dans le répertoire.

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

   \$1Remplacez *<rewrite-plugin-version>* par la version que vous voyez dans ce [fichier de test](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. Exécutez la `rewrite` commande

   Comme avec le plugin Maven, vous pouvez exécuter le plugin Gradle en mode `dryRun` or`run`.

   **Mode `dryRun`**

   L'exemple suivant montre comment invoquer le plugin en `dryRun` mode.

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

   **Mode `run`**

   L'exemple suivant montre comment invoquer le plugin en `run` mode.

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

## Limitations actuelles
<a name="migration-tool-limitations"></a>

Bien que la migration prenne en charge la plupart du code V1 par le biais de règles de modification du code mises à jour vers l'équivalent de la V2, certaines classes et méthodes ne sont pas couvertes. Pour ces classes et méthodes, suivez les [step-by-step instructions](migration-steps.md) pour migrer manuellement votre code.

Pour certaines règles de modification de code non prises en charge, l'outil de migration peut ajouter un commentaire commençant par :

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

Après le commentaire, l'outil génère un stub générique de la version V2 de la méthode ou de la classe. Par exemple, dans le résultat suivant, l'outil de migration a tenté de migrer la `setBucketLifecycleConfiguration` méthode du client S3 V1 :

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

Les liens de la liste ci-dessous vous redirigent vers des informations de migration qui vous aideront à migrer manuellement le code.
+ [Différences du client S3 entre la version 1 et la version 2 du AWS SDK pour Java](migration-s3-client.md)
+ [Gestionnaire de transfert S3](migration-s3-transfer-manager.md) (TransferManager)
+ [Mappage d'objets DynamoDB (](migration-ddb-mapper.md)Dynamo) DBMapper
+ [EC2 utilitaire de métadonnées](migration-imds.md) (EC2MetadataUtils)
+ [Serveurs](migration-waiters.md) () AmazonDynamo DBWaiters
+ [Générateur de politiques IAM](migration-iam-policy-builder.md) (stratégie)
+ [CloudFront présignant](migration-cloudfront-presigning.md) (CloudFrontUrlSigner, CloudFrontCookieSigner)
+ [Notifications d'événements S3](migration-s3-event-notification.md) (S3EventNotification)
+ Publication de métriques dans le SDK (documentation [1.x, documentation](https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/generating-sdk-metrics.html) [2.x](metrics.md))
+ [Modèles de code non pris en charge](migration-tool-unsupported-patterns.md) : exemples détaillés de modèles de code courants nécessitant une migration manuelle

# Modèles de code non pris en charge par l'outil de migration
<a name="migration-tool-unsupported-patterns"></a>

L'outil de migration convertit automatiquement la plupart du code v1 en v2. Cependant, certains modèles de code nécessitent une migration manuelle. Cette rubrique fournit des exemples détaillés des modèles non pris en charge les plus courants et explique comment les convertir manuellement.

La liste de modèles suivante n'est pas exhaustive. Si votre code n'est pas compilé après avoir exécuté l'outil de migration, suivez les [instructions de step-by-step migration](migration-steps.md) pour migrer manuellement le code v1 restant.

## Demander des constructeurs d'objets avec des paramètres
<a name="request-pojo-constructors"></a>

Pour les demandes POJOs (à l'exception d'Amazon S3), l'outil de migration transforme uniquement les méthodes setter. L'outil ne prend pas en charge les constructeurs paramétrés.

**Modèle pris en charge : objet de requête à l'aide de setters (aucun paramètre de constructeur)**

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

Après (résultat de l'outil de migration) :

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

**Modèle non pris en charge : constructeur d'objet de demande avec paramètres**

L'outil de migration ne peut pas convertir les constructeurs avec des paramètres :

Avant la migration manuelle, mais après l'outil de migration :

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

L'outil de migration transforme l'importation en version v2, mais le code du constructeur reste inchangé et nécessite des mises à jour manuelles pour utiliser le modèle du générateur.

Après la migration manuelle :

```
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éthodes du client de service avec paramètres individuels
<a name="service-client-method-overloads"></a>

L'outil de migration ne peut pas convertir les méthodes des clients de service qui utilisent des paramètres individuels au lieu d'objets de demande (à l'exception d'Amazon S3).

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

Après (résultat de l'outil de migration : ne compile pas) :

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

Vous devez mettre à jour manuellement les arguments de méthode pour utiliser un objet de requête :

```
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éthodes de temporisation des demandes
<a name="request-pojo-timeout-configuration"></a>

L'outil de migration ne convertit pas les méthodes qui définissent des délais d'expiration pour les objets de demande.

Avant (code v1) :

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

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

Après (résultat de l'outil de migration : ne compile pas) :

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

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

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

Vous devez migrer manuellement pour utiliser la `overrideConfiguration` méthode 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();
```

## Constructeurs de clients de service avec paramètres
<a name="service-client-constructors-with-args"></a>

L'outil de migration convertit les constructeurs de clients de service vides, mais ne peut pas convertir les constructeurs qui acceptent des paramètres tels que les informations d'identification ou la configuration.

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

Après (résultat de l'outil de migration : ne compile pas) :

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

Vous devez mettre à jour manuellement le constructeur du client de service pour utiliser le modèle de générateur :

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