

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# AWS SDK untuk Java alat migrasi
<a name="migration-tool"></a>

 AWS SDK untuk Java Ini menyediakan alat migrasi yang membantu mengotomatiskan migrasi kode SDK for Java 1.x (V1) ke 2.x (V2). Alat ini menggunakan [OpenRewrite](https://docs.openrewrite.org/)—sumber terbuka, alat refactoring kode sumber—untuk melakukan migrasi. OpenRewrite menggunakan aturan modifikasi kode (disebut “resep”) untuk secara otomatis memperbarui kode sumber Anda dari sintaks dan pola V1 ke V2.

Alat ini mendukung aturan modifikasi kode untuk klien layanan SDK dan pustaka tingkat tinggi [S3 Transfer Manager](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/transfer/TransferManager.html). Aturan modifikasi kode untuk tingkat tinggi lainnya APIs seperti DynamoDB [Enhanced Client API V1 [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)ke V2 tidak didukung](dynamodb-enhanced-client.md). 

Untuk detail lebih lanjut tentang batasan, lihat [akhir halaman ini](#migration-tool-limitations). Untuk contoh detail pola kode umum yang tidak didukung dengan langkah migrasi manual, lihat Pola [kode tidak didukung](migration-tool-unsupported-patterns.md).

## Gunakan alat migrasi
<a name="migration-tool-use"></a>

### Migrasi proyek Maven
<a name="migration-tool-use-maven"></a>

[Ikuti petunjuk di bawah ini untuk memigrasikan SDK for Java 1.x proyek berbasis Maven dengan menggunakan alat plugin Maven. OpenRewrite](https://docs.openrewrite.org/reference/rewrite-maven-plugin)

1. Arahkan ke direktori root proyek Maven Anda

   Buka jendela terminal (baris perintah) dan arahkan ke direktori root aplikasi berbasis MAVENN Anda.

1. Jalankan `rewrite-maven-plugin` perintah plugin

   Anda dapat memilih dari dua mode (tujuan Maven): `dryRun` dan. `run`

   **`dryRun`****modus**

   Dalam `dryRun` mode, plugin menghasilkan log diff di output konsol dan file patch bernama `rewrite.patch` di `target/rewrite` folder. Mode ini memungkinkan Anda untuk melihat pratinjau perubahan yang akan dilakukan, karena tidak ada perubahan yang dilakukan pada file kode sumber. 

   Contoh berikut menunjukkan cara memanggil plugin dalam `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
   ```

   \$1Ganti *<rewrite-plugin-version>* dengan `rewriteMavenPluginVersion` nilai yang Anda lihat di [file pengujian](https://github.com/aws/aws-sdk-java-v2/blob/3a01289246f1f4ac814a354051d00030e53ef968/test/v2-migration-tests/src/test/java/software/amazon/awssdk/v2migrationtests/MavenTestBase.java#L54) ini.

   \$1\$1 Ganti *<sdkversion>* dengan versi 2.x SDK. Kunjungi [Maven Central](https://central.sonatype.com/artifact/software.amazon.awssdk/v2-migration) untuk memeriksa versi terbaru. 
**penting**  
Pastikan untuk menggunakan versi yang `rewrite-maven-plugin` ditampilkan dalam [file pengujian](https://github.com/aws/aws-sdk-java-v2/blob/3a01289246f1f4ac814a354051d00030e53ef968/test/v2-migration-tests/src/test/java/software/amazon/awssdk/v2migrationtests/MavenTestBase.java#L54) karena versi lain mungkin tidak berfungsi.

   Output konsol Anda dari `dryRun` mode harus menyerupai output berikut.

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

   Ketika Anda menjalankan plugin dalam `run` mode, itu memodifikasi kode sumber pada disk untuk menerapkan perubahan. Pastikan Anda memiliki cadangan kode sumber sebelum menjalankan perintah.

   Contoh berikut menunjukkan cara memanggil plugin dalam `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
   ```

   \$1 Ganti *<rewrite-plugin-version>* dengan `rewriteMavenPluginVersionvalue` yang Anda lihat di [file pengujian](https://github.com/aws/aws-sdk-java-v2/blob/3a01289246f1f4ac814a354051d00030e53ef968/test/v2-migration-tests/src/test/java/software/amazon/awssdk/v2migrationtests/MavenTestBase.java#L54) ini.

   \$1\$1 Ganti *<sdkversion>* dengan versi 2.x SDK. Kunjungi [Maven Central](https://central.sonatype.com/artifact/software.amazon.awssdk/v2-migration) untuk memeriksa versi terbaru. 

   Setelah Anda menjalankan perintah, kompilasi aplikasi Anda dan jalankan tes untuk memverifikasi perubahan. 

### Migrasi proyek Gradle
<a name="migration-tool-use-gradle"></a>

[Ikuti petunjuk di bawah ini untuk memigrasikan SDK for Java 1.x proyek berbasis Gradle dengan menggunakan alat plugin Gradle. OpenRewrite](https://docs.openrewrite.org/reference/gradle-plugin-configuration)

1. Arahkan ke direktori root proyek Gradle

   Buka jendela terminal (baris perintah) dan arahkan ke direktori root aplikasi berbasis Gradle Anda.

1. Buat skrip init Gradle

   Buat `init.gradle` file dengan konten berikut di direktori.

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

   \$1 Ganti *<rewrite-plugin-version>* dengan versi yang Anda lihat di [file pengujian](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) ini.

1. Jalankan `rewrite` perintah

   Seperti halnya plugin Maven, Anda dapat menjalankan plugin Gradle dalam `dryRun` mode atau. `run`

   **`dryRun`modus**

   Contoh berikut menunjukkan cara memanggil plugin dalam `dryRun` mode.

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

   **`run`modus**

   Contoh berikut menunjukkan cara memanggil plugin dalam `run` mode.

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

## Keterbatasan saat ini
<a name="migration-tool-limitations"></a>

Meskipun migrasi mengunggah sebagian besar kode V1 melalui aturan modifikasi kode yang diperbarui ke setara V2, beberapa kelas dan metode tidak tercakup. Untuk kelas dan metode ini, ikuti [step-by-step petunjuk](migration-steps.md) untuk memigrasikan kode Anda secara manual.

Untuk beberapa aturan modifikasi kode yang tidak didukung, alat migrasi dapat menambahkan komentar yang dimulai dengan:

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

Mengikuti komentar, alat ini mengeluarkan rintisan generik dari versi V2 dari metode atau kelas. Misalnya, dalam output berikut, alat migrasi mencoba memigrasi metode klien 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());
```

Tautan dalam daftar di bawah ini, membawa Anda ke informasi migrasi untuk membantu Anda memigrasikan kode secara manual.
+ [Perbedaan klien S3 antara versi 1 dan versi 2 AWS SDK untuk Java](migration-s3-client.md)
+ [Manajer Transfer S3](migration-s3-transfer-manager.md) () TransferManager
+ [Pemetaan objek DynamoDB (Dynamo](migration-ddb-mapper.md)) DBMapper
+ [EC2 utilitas metadata](migration-imds.md) () EC2 MetadataUtils
+ [Pelayan ()](migration-waiters.md) AmazonDynamo DBWaiters
+ [Pembangun Kebijakan IAM](migration-iam-policy-builder.md) (Kebijakan)
+ [CloudFront presigning](migration-cloudfront-presigning.md) (CloudFrontUrlSigner, CloudFrontCookieSigner)
+ [Pemberitahuan Acara S3](migration-s3-event-notification.md) (EventNotificationS3)
+ Penerbitan metrik SDK (dokumentasi [1.x, dokumentasi](https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/generating-sdk-metrics.html) [2.x](metrics.md))
+ [Pola kode yang tidak didukung](migration-tool-unsupported-patterns.md) —Contoh rinci pola kode umum yang memerlukan migrasi manual

# Pola kode alat migrasi yang tidak didukung
<a name="migration-tool-unsupported-patterns"></a>

Alat migrasi secara otomatis mengonversi sebagian besar kode v1 ke v2. Namun, beberapa pola kode memerlukan migrasi manual. Topik ini memberikan contoh rinci tentang pola yang tidak didukung yang paling umum dan menunjukkan kepada Anda cara mengonversinya secara manual.

Daftar pola berikut ini tidak lengkap. Jika kode Anda tidak dikompilasi setelah menjalankan alat migrasi, ikuti [petunjuk step-by-step migrasi](migration-steps.md) untuk memigrasikan kode v1 yang tersisa secara manual.

## Minta konstruktor objek dengan parameter
<a name="request-pojo-constructors"></a>

Untuk permintaan POJOs (tidak termasuk Amazon S3), alat migrasi hanya mengubah metode penyetel. Alat ini tidak mendukung konstruktor dengan parameter.

**Pola yang didukung: Minta objek menggunakan setter (tidak ada parameter konstruktor)**

Sebelum (kode v1 asli):

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

Setelah (hasil alat migrasi):

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

**Pola tidak didukung: Minta konstruktor objek dengan parameter**

Alat migrasi tidak dapat mengonversi konstruktor dengan parameter:

Sebelum migrasi manual, tetapi setelah alat migrasi:

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

Alat migrasi mengubah impor ke v2, tetapi kode konstruktor tetap tidak berubah dan memerlukan pembaruan manual untuk menggunakan pola pembangun.

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

## Metode klien layanan dengan parameter individual
<a name="service-client-method-overloads"></a>

Alat migrasi tidak dapat mengonversi metode klien layanan yang mengambil parameter individual alih-alih objek permintaan (tidak termasuk Amazon S3).

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

Setelah (hasil alat migrasi — tidak dikompilasi):

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

Anda harus memperbarui argumen metode secara manual untuk menggunakan objek permintaan:

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

## Minta metode batas waktu
<a name="request-pojo-timeout-configuration"></a>

Alat migrasi tidak mengonversi metode yang menetapkan batas waktu pada objek permintaan.

Sebelum (kode v1):

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

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

Setelah (hasil alat migrasi — tidak dikompilasi):

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

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

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

Anda harus melakukan migrasi secara manual untuk menggunakan `overrideConfiguration` metode 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();
```

## Konstruktor klien layanan dengan parameter
<a name="service-client-constructors-with-args"></a>

Alat migrasi mengonversi konstruktor klien layanan kosong tetapi tidak dapat mengonversi konstruktor yang menerima parameter seperti kredensil atau konfigurasi.

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

Setelah (hasil alat migrasi — tidak dikompilasi):

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

Anda harus memperbarui konstruktor klien layanan secara manual untuk menggunakan pola pembangun:

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