

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# AWS SDK per Java strumento di migrazione
<a name="migration-tool"></a>

 AWS SDK per Java Fornisce uno strumento di migrazione che aiuta ad automatizzare la migrazione del codice SDK for Java 1.x (V1) a 2.x (V2). Lo strumento utilizza, uno strumento open source di [OpenRewrite](https://docs.openrewrite.org/)refactoring del codice sorgente, per eseguire la migrazione. OpenRewrite utilizza regole di modifica del codice (chiamate «ricette») per aggiornare automaticamente il codice sorgente dalla sintassi e dai modelli da V1 a V2.

Lo strumento supporta le regole di modifica del codice per i client del servizio SDK e la libreria di alto livello [S3](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/transfer/TransferManager.html) Transfer Manager. Le regole di modifica del codice per altre API DynamoDB Enhanced Client di alto livello, [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)ad APIs esempio dalla V1 alla V2, non sono [supportate](dynamodb-enhanced-client.md). 

[Per maggiori dettagli sulle limitazioni, consulta la fine di questa pagina.](#migration-tool-limitations) Per esempi dettagliati di modelli di codice comuni non supportati con passaggi di migrazione manuale, consulta Modelli di [codice non supportati.](migration-tool-unsupported-patterns.md)

## Utilizza lo strumento di migrazione
<a name="migration-tool-use"></a>

### Migra un progetto Maven
<a name="migration-tool-use-maven"></a>

[Segui le istruzioni riportate di seguito per migrare il tuo progetto SDK for Java 1.x basato su Maven utilizzando lo strumento plug-in Maven. OpenRewrite](https://docs.openrewrite.org/reference/rewrite-maven-plugin)

1. Vai alla directory principale del tuo progetto Maven

   Apri una finestra di terminale (riga di comando) e vai alla directory principale dell'applicazione basata su Maven.

1. Esegui il comando del plugin `rewrite-maven-plugin`

   Puoi scegliere tra due modalità (obiettivi Maven): `dryRun` e. `run`

   **Modalità `dryRun`******

   In questa `dryRun` modalità, il plugin genera i diff log nell'output della console e un file di patch denominato `rewrite.patch` nella cartella. `target/rewrite` Questa modalità consente di visualizzare in anteprima le modifiche che verranno apportate, poiché non vengono apportate modifiche ai file del codice sorgente. 

   L'esempio seguente mostra come richiamare il plugin in `dryRun` modalità.

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

   \$1Sostituisci *<rewrite-plugin-version>* con il `rewriteMavenPluginVersion` valore che vedi in questo file di [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\$1Sostituisci *<sdkversion>* con una versione SDK 2.x. Visita [Maven Central](https://central.sonatype.com/artifact/software.amazon.awssdk/v2-migration) per verificare la versione più recente. 
**Importante**  
Assicurati di utilizzare la versione `rewrite-maven-plugin` mostrata nel [file di 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) perché altre versioni potrebbero non funzionare.

   L'output della console proveniente dalla `dryRun` modalità dovrebbe essere simile al seguente.

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

   **Modalità `run`******

   Quando esegui il plugin in `run` modalità, modifica il codice sorgente sul disco per applicare le modifiche. Assicurati di avere un backup del codice sorgente prima di eseguire il comando.

   L'esempio seguente mostra come richiamare il plugin in `run` modalità.

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

   *<rewrite-plugin-version>*\$1Sostituiscilo con `rewriteMavenPluginVersionvalue` quello che vedi in questo file di [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\$1Sostituisci *<sdkversion>* con una versione SDK 2.x. Visita [Maven Central](https://central.sonatype.com/artifact/software.amazon.awssdk/v2-migration) per verificare la versione più recente. 

   Dopo aver eseguito il comando, compila l'applicazione ed esegui dei test per verificare le modifiche. 

### Migra un progetto Gradle
<a name="migration-tool-use-gradle"></a>

[Segui le istruzioni seguenti per migrare il tuo progetto SDK for Java 1.x basato su Gradle utilizzando lo strumento plug-in Gradle. OpenRewrite](https://docs.openrewrite.org/reference/gradle-plugin-configuration)

1. Vai alla directory principale del tuo progetto Gradle

   Apri una finestra di terminale (riga di comando) e vai alla directory principale dell'applicazione basata su Gradle.

1. Crea uno script di init Gradle

   Crea un `init.gradle` file con il seguente contenuto nella directory.

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

   \$1Sostituiscilo *<rewrite-plugin-version>* con la versione che vedi in questo [file di 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. Esegui il `rewrite` comando

   Come con il plug-in Maven, puoi eseguire il plug-in Gradle in `dryRun` modalità o. `run`

   **Modalità `dryRun`**

   L'esempio seguente mostra come richiamare il plugin in modalità. `dryRun`

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

   **Modalità `run`**

   L'esempio seguente mostra come richiamare il plugin in `run` modalità.

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

## Limitazioni attuali
<a name="migration-tool-limitations"></a>

Sebbene la migrazione supporti la maggior parte del codice V1 tramite regole di modifica del codice che si aggiornano all'equivalente V2, alcune classi e metodi non sono coperti. Per queste classi e metodi, segui le [step-by-step istruzioni](migration-steps.md) per migrare manualmente il codice.

Per alcune regole di modifica del codice non supportate, lo strumento di migrazione può aggiungere un commento che inizia con:

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

Dopo il commento, lo strumento restituisce uno stub generico della versione V2 del metodo o della classe. Ad esempio, nel seguente output, lo strumento di migrazione ha tentato di migrare il metodo del client V1 S3: `setBucketLifecycleConfiguration`

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

I collegamenti nell'elenco seguente rimandano alle informazioni sulla migrazione per aiutarti a migrare manualmente il codice.
+ [Differenze del client S3 tra la versione 1 e la versione 2 di AWS SDK per Java](migration-s3-client.md)
+ [S3 Transfer Manager](migration-s3-transfer-manager.md) () TransferManager
+ [Mappatura degli oggetti DynamoDB (](migration-ddb-mapper.md)Dynamo) DBMapper
+ [EC2 utilità per i](migration-imds.md) metadati EC2 MetadataUtils ()
+ [Camerieri (](migration-waiters.md)) AmazonDynamo DBWaiters
+ [IAM Policy Builder](migration-iam-policy-builder.md) (politica)
+ [CloudFront preassegnazione](migration-cloudfront-presigning.md) (,) CloudFrontUrlSigner CloudFrontCookieSigner
+ [Notifiche di eventi S3](migration-s3-event-notification.md) (S3) EventNotification
+ [Pubblicazione delle metriche SDK (documentazione [1.x, documentazione 2.x](https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/generating-sdk-metrics.html))](metrics.md)
+ Modelli di [codice non supportati: esempi dettagliati di modelli](migration-tool-unsupported-patterns.md) di codice comuni che richiedono la migrazione manuale

# Modelli di codice non supportati dello strumento di migrazione
<a name="migration-tool-unsupported-patterns"></a>

Lo strumento di migrazione converte automaticamente la maggior parte del codice v1 in v2. Tuttavia, alcuni modelli di codice richiedono la migrazione manuale. Questo argomento fornisce esempi dettagliati dei pattern non supportati più comuni e mostra come convertirli manualmente.

Il seguente elenco di modelli non è esaustivo. Se il codice non viene compilato dopo aver eseguito lo strumento di migrazione, segui le [istruzioni di step-by-step migrazione](migration-steps.md) per migrare manualmente il codice v1 rimanente.

## Richiedi costruttori di oggetti con parametri
<a name="request-pojo-constructors"></a>

Su richiesta POJOs (escluso Amazon S3), lo strumento di migrazione trasforma solo i metodi setter. Lo strumento non supporta costruttori con parametri.

**Pattern supportato: richiedi l'oggetto utilizzando i setter (nessun parametro del costruttore)**

Prima (codice v1 originale):

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

Dopo (risultato dello strumento di migrazione):

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

**Pattern non supportato: richiedi il costruttore di oggetti con parametri**

Lo strumento di migrazione non può convertire costruttori con parametri:

Prima della migrazione manuale, ma dopo lo strumento di migrazione:

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

Lo strumento di migrazione trasforma l'importazione in v2, ma il codice del costruttore rimane invariato e richiede aggiornamenti manuali per utilizzare il pattern builder.

Dopo la migrazione manuale:

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

## Metodi client di assistenza con parametri individuali
<a name="service-client-method-overloads"></a>

Lo strumento di migrazione non è in grado di convertire i metodi dei client di servizio che utilizzano parametri individuali anziché oggetti di richiesta (escluso Amazon S3).

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

Dopo (risultato dello strumento di migrazione: non viene compilato):

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

È necessario aggiornare manualmente gli argomenti del metodo per utilizzare un oggetto di richiesta:

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

## Metodi di timeout della richiesta
<a name="request-pojo-timeout-configuration"></a>

Lo strumento di migrazione non converte i metodi che impostano i timeout sugli oggetti di richiesta.

Prima (codice v1):

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

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

Dopo (risultato dello strumento di migrazione: non viene compilato):

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

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

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

È necessario migrare manualmente per utilizzare il metodo della v2: `overrideConfiguration`

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

## Fornisci assistenza ai costruttori dei client con parametri
<a name="service-client-constructors-with-args"></a>

Lo strumento di migrazione converte i costruttori di client di servizio vuoti ma non può convertire i costruttori che accettano parametri come credenziali o configurazioni.

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

Dopo (risultato dello strumento di migrazione: non viene compilato):

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

È necessario aggiornare manualmente il costruttore del client di servizio per utilizzare il pattern builder:

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