

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# So migrieren Sie Ihren Code von AWS SDK für Java 1.x auf 2.x
<a name="migration-howto"></a>

Sie können Ihr vorhandenes SDK for Java 1.x-Anwendungen auf verschiedene Arten migrieren.

1. Automatisierter Ansatz mithilfe des [Migrationstools](migration-tool.md).

1. [Manueller Ansatz](migration-steps.md) durch schrittweises Ersetzen von 1.x-Importen durch 2.x-Importe.

Wir empfehlen Ihnen, zunächst das Migrationstool zu verwenden. Es automatisiert einen Großteil der routinemäßigen Austauscharbeiten von 1.x- auf 2.x-Code. 

Da das Tool [nicht alle Funktionen migriert](migration-tool.md#migration-tool-limitations), müssen Sie nach der Ausführung des Tools nach dem verbleibenden v1-Code suchen. Wenn Sie Code finden, den das Tool nicht migriert hat, folgen Sie den [step-by-step Anweisungen](migration-steps.md) (manueller Ansatz) und schließen Sie die [Migration anhand der Artikel im Migrationsleitfaden](migration-whats-different.md) ab.

**Topics**
+ [Migrationstool](migration-tool.md)
+ [Step-by-step Anweisungen](migration-steps.md)

# AWS SDK für Java Migrationstool
<a name="migration-tool"></a>

Das AWS SDK für Java bietet ein Migrationstool, mit dem die Migration von SDK for Java 1.x (V1) -Code auf 2.x (V2) automatisiert werden kann. Das Tool verwendet [OpenRewrite](https://docs.openrewrite.org/)— ein Open-Source-Tool zur Refaktorierung von Quellcode —, um die Migration durchzuführen. OpenRewrite verwendet Regeln zur Codeänderung (sogenannte „Rezepte“), um Ihren Quellcode automatisch von V1- auf V2-Syntax und Muster zu aktualisieren.

Das Tool unterstützt Regeln zur Codeänderung für SDK-Dienstclients und die allgemeine [S3 Transfer Manager-Bibliothek](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/transfer/TransferManager.html). Regeln zur Codeänderung für andere High-Level-Clients APIs wie die [DynamoDB Enhanced Client API](dynamodb-enhanced-client.md) von 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)bis V2 werden nicht unterstützt. 

Weitere Informationen zu Einschränkungen finden Sie [am Ende dieser Seite](#migration-tool-limitations). Ausführliche Beispiele für häufig nicht unterstützte Codemuster mit manuellen Migrationsschritten finden Sie unter [Nicht unterstützte Codemuster](migration-tool-unsupported-patterns.md).

## Verwenden Sie das Migrationstool
<a name="migration-tool-use"></a>

### Migrieren Sie ein Maven-Projekt
<a name="migration-tool-use-maven"></a>

Folgen Sie den nachstehenden Anweisungen, um Ihr auf Maven basierendes SDK for Java 1.x-Projekt mithilfe des [OpenRewriteMaven-Plugin-Tools](https://docs.openrewrite.org/reference/rewrite-maven-plugin) zu migrieren.

1. Navigieren Sie zum Stammverzeichnis Ihres Maven-Projekts

   Öffnen Sie ein Terminalfenster (Befehlszeile) und navigieren Sie zum Stammverzeichnis Ihrer Maven-basierten Anwendung.

1. Führen Sie den Befehl des Plugins aus `rewrite-maven-plugin`

   Du kannst zwischen zwei Modi (Maven-Ziele) wählen: `dryRun` und`run`.

   **`dryRun`**** Modus**

   In diesem `dryRun` Modus generiert das Plugin Diff-Logs in der Konsolenausgabe und eine `rewrite.patch` im `target/rewrite` Ordner benannte Patch-Datei. In diesem Modus können Sie eine Vorschau der Änderungen anzeigen, die vorgenommen werden würden, da keine Änderungen an den Quellcodedateien vorgenommen werden. 

   Das folgende Beispiel zeigt, wie das Plugin im `dryRun` Modus aufgerufen wird.

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

   *<rewrite-plugin-version>*\$1Ersetzen Sie es durch den `rewriteMavenPluginVersion` Wert, den Sie in dieser [Testdatei](https://github.com/aws/aws-sdk-java-v2/blob/3a01289246f1f4ac814a354051d00030e53ef968/test/v2-migration-tests/src/test/java/software/amazon/awssdk/v2migrationtests/MavenTestBase.java#L54) sehen.

   \$1\$1Durch eine 2.x SDK-Version *<sdkversion>* ersetzen. Besuchen Sie [Maven Central](https://central.sonatype.com/artifact/software.amazon.awssdk/v2-migration), um nach der neuesten Version zu suchen. 
**Wichtig**  
Stellen Sie sicher, dass Sie die in der [Testdatei `rewrite-maven-plugin`](https://github.com/aws/aws-sdk-java-v2/blob/3a01289246f1f4ac814a354051d00030e53ef968/test/v2-migration-tests/src/test/java/software/amazon/awssdk/v2migrationtests/MavenTestBase.java#L54) angegebene Version verwenden, da andere Versionen möglicherweise nicht funktionieren.

   Ihre Konsolenausgabe aus dem `dryRun` Modus sollte der folgenden Ausgabe ähneln.

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

   Wenn Sie das Plug-in im `run` Modus ausführen, ändert es den Quellcode auf der Festplatte, sodass die Änderungen übernommen werden. Stellen Sie sicher, dass Sie eine Sicherungskopie des Quellcodes haben, bevor Sie den Befehl ausführen.

   Das folgende Beispiel zeigt, wie das Plugin im `run` Modus aufgerufen wird.

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

   \$1Ersetze es *<rewrite-plugin-version>* durch `rewriteMavenPluginVersionvalue` das, was du in dieser [Testdatei](https://github.com/aws/aws-sdk-java-v2/blob/3a01289246f1f4ac814a354051d00030e53ef968/test/v2-migration-tests/src/test/java/software/amazon/awssdk/v2migrationtests/MavenTestBase.java#L54) siehst.

   \$1\$1Durch eine 2.x SDK-Version *<sdkversion>* ersetzen. Besuchen Sie [Maven Central](https://central.sonatype.com/artifact/software.amazon.awssdk/v2-migration), um nach der neuesten Version zu suchen. 

   Nachdem Sie den Befehl ausgeführt haben, kompilieren Sie Ihre Anwendung und führen Sie Tests durch, um die Änderungen zu überprüfen. 

### Migrieren Sie ein Gradle-Projekt
<a name="migration-tool-use-gradle"></a>

[Folgen Sie den nachstehenden Anweisungen, um Ihr Gradle-basiertes SDK for Java 1.x-Projekt mithilfe des OpenRewrite Gradle-Plugin-Tools zu migrieren.](https://docs.openrewrite.org/reference/gradle-plugin-configuration)

1. Navigieren Sie zum Stammverzeichnis Ihres Gradle-Projekts

   Öffnen Sie ein Terminalfenster (Befehlszeile) und navigieren Sie zum Stammverzeichnis Ihrer Gradle-basierten Anwendung.

1. Erstellen Sie ein Gradle-Init-Skript

   Erstellen Sie eine `init.gradle` Datei mit dem folgenden Inhalt im Verzeichnis.

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

   *<rewrite-plugin-version>*\$1Ersetzen Sie durch die Version, die Sie in dieser [Testdatei](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) sehen.

1. Führen Sie den Befehl aus `rewrite`

   Wie beim Maven-Plugin können Sie das Gradle-Plugin im Modus `dryRun` oder `run` ausführen.

   **`dryRun` Modus**

   Das folgende Beispiel zeigt, wie das Plugin im Modus aufgerufen wird. `dryRun`

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

   **`run` Modus**

   Das folgende Beispiel zeigt, wie das Plugin im `run` Modus aufgerufen wird.

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

## Aktuelle Einschränkungen
<a name="migration-tool-limitations"></a>

Die Migration unterstützt zwar den Großteil des V1-Codes durch Regeln zur Codeänderung, die auf das V2-Äquivalent aktualisiert werden, einige Klassen und Methoden sind jedoch nicht abgedeckt. Folgen Sie für diese Klassen und Methoden den [step-by-step Anweisungen](migration-steps.md), um Ihren Code manuell zu migrieren.

Bei einigen Regeln zur Codeänderung, die nicht unterstützt werden, fügt das Migrationstool möglicherweise einen Kommentar hinzu, der wie folgt beginnt:

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

Im Anschluss an den Kommentar gibt das Tool einen generischen Stub der V2-Version der Methode oder Klasse aus. In der folgenden Ausgabe hat das Migrationstool beispielsweise versucht, die `setBucketLifecycleConfiguration` Methode des V1 S3-Clients zu migrieren:

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

Über die Links in der folgenden Liste gelangen Sie zu Migrationsinformationen, die Ihnen bei der manuellen Migration des Codes helfen.
+ [S3-Client-Unterschiede zwischen Version 1 und Version 2 von AWS SDK für Java](migration-s3-client.md)
+ [S3-Übertragungsmanager](migration-s3-transfer-manager.md) (TransferManager)
+ [DynamoDB-Objektzuordnung](migration-ddb-mapper.md) (Dynamo) DBMapper
+ [EC2 Metadaten-Hilfsprogramm](migration-imds.md) () EC2 MetadataUtils
+ [Kellner](migration-waiters.md) () AmazonDynamo DBWaiters
+ [IAM Policy Builder](migration-iam-policy-builder.md) (Richtlinie)
+ [CloudFront vorsignieren](migration-cloudfront-presigning.md) (CloudFrontUrlSigner,) CloudFrontCookieSigner
+ [S3-Ereignisbenachrichtigungen](migration-s3-event-notification.md) (S3EventNotification)
+ Veröffentlichung von SDK-Metriken ([1.x-Dokumentation](https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/generating-sdk-metrics.html), [2.x-Dokumentation](metrics.md))
+ [Nicht unterstützte Codemuster](migration-tool-unsupported-patterns.md) — Detaillierte Beispiele für gängige Codemuster, die eine manuelle Migration erfordern

# Nicht unterstützte Codemuster des Migrationstools
<a name="migration-tool-unsupported-patterns"></a>

Das Migrationstool konvertiert den größten Teil des v1-Codes automatisch in den v2-Code. Einige Codemuster erfordern jedoch eine manuelle Migration. Dieses Thema enthält detaillierte Beispiele für die häufigsten nicht unterstützten Muster und zeigt Ihnen, wie Sie sie manuell konvertieren können.

Die folgende Liste von Mustern erhebt keinen Anspruch auf Vollständigkeit. Wenn Ihr Code nach der Ausführung des Migrationstools nicht kompiliert werden kann, folgen Sie den [step-by-stepMigrationsanweisungen](migration-steps.md), um den verbleibenden v1-Code manuell zu migrieren.

## Fordern Sie Objektkonstruktoren mit Parametern an
<a name="request-pojo-constructors"></a>

Auf Anfrage POJOs (außer Amazon S3) transformiert das Migrationstool nur Setter-Methoden. Das Tool unterstützt keine Konstruktoren mit Parametern.

**Unterstütztes Muster: Objekt mithilfe von Setter anfordern (keine Konstruktorparameter)**

Vorher (ursprünglicher v1-Code):

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

Nachher (Ergebnis des Migrationstools):

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

**Nicht unterstütztes Muster: Objektkonstruktor mit Parametern anfordern**

Das Migrationstool kann Konstruktoren mit folgenden Parametern nicht konvertieren:

Vor der manuellen Migration, aber nach dem Migrationstool:

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

Das Migrationstool wandelt den Import in Version 2 um, der Konstruktorcode bleibt jedoch unverändert und erfordert manuelle Updates, um das Builder-Muster verwenden zu können.

Nach der manuellen Migration:

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

## Service-Client-Methoden mit individuellen Parametern
<a name="service-client-method-overloads"></a>

Das Migrationstool kann keine Service-Client-Methoden konvertieren, die einzelne Parameter anstelle von Anforderungsobjekten verwenden (außer Amazon S3).

Vorher (v1-Code):

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

Nachher (Ergebnis des Migrationstools — wird nicht kompiliert):

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

Sie müssen die Methodenargumente manuell aktualisieren, um ein Anforderungsobjekt zu verwenden:

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

## Timeout-Methoden anfordern
<a name="request-pojo-timeout-configuration"></a>

Das Migrationstool konvertiert keine Methoden, die Timeouts für Anforderungsobjekte festlegen.

Vorher (v1-Code):

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

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

Nachher (Ergebnis des Migrationstools — wird nicht kompiliert):

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

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

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

Sie müssen manuell migrieren, um die Methode von v2 zu verwenden: `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();
```

## Bedienen Sie Client-Konstruktoren mit Parametern
<a name="service-client-constructors-with-args"></a>

Das Migrationstool konvertiert leere Service-Client-Konstruktoren, kann jedoch keine Konstruktoren konvertieren, die Parameter wie Anmeldeinformationen oder Konfiguration akzeptieren.

Vorher (v1-Code):

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

Nachher (Ergebnis des Migrationstools — wird nicht kompiliert):

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

Sie müssen den Service-Client-Konstruktor manuell aktualisieren, um das Builder-Muster zu verwenden:

```
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-stepMigrationsanweisungen mit Beispiel
<a name="migration-steps"></a>

Dieser Abschnitt enthält eine step-by-step Anleitung zur Migration Ihrer Anwendung, die derzeit das SDK for Java v1.x verwendet, auf das SDK for Java 2.x. Der erste Teil bietet einen Überblick über die Schritte, gefolgt von einem detaillierten Beispiel für eine Migration.

Die hier beschriebenen Schritte beschreiben die Migration eines normalen Anwendungsfalls, bei dem die Anwendung AWS-Services mithilfe modellgesteuerter Service-Clients aufruft. Wenn Sie Code migrieren müssen, der eine höhere Ebene APIs wie [S3 Transfer Manager](migration-s3-transfer-manager.md) oder [CloudFrontPresigning](migration-cloudfront-presigning.md) verwendet, finden Sie weitere Informationen im Abschnitt unter dem [Was ist der Unterschied zwischen AWS SDK für Java 1.x und 2.x](migration-whats-different.md) Inhaltsverzeichnis.



Der hier beschriebene Ansatz ist ein Vorschlag. Sie können andere Techniken verwenden und die Codebearbeitungsfunktionen Ihrer IDE nutzen, um dasselbe Ergebnis zu erzielen. 

## Übersicht über die Schritte
<a name="migration-steps-overview"></a>

### 1. Fügen Sie zunächst das SDK for Java 2.x BOM hinzu
<a name="migration-steps-overview-step1"></a>

Indem Sie das Maven BOM (Bill of Materials) -Element für das SDK for Java 2.x zu Ihrer POM-Datei hinzufügen, stellen Sie sicher, dass alle benötigten v2-Abhängigkeiten aus derselben Version stammen. Ihr POM kann sowohl v1- als auch v2-Abhängigkeiten enthalten. Auf diese Weise können Sie Ihren Code inkrementell migrieren, anstatt ihn auf einmal zu ändern.

#### SDK for Java 2.x BOM
<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>
```

Sie finden die [neueste Version](https://central.sonatype.com/artifact/software.amazon.awssdk/bom) im Maven Central Repository.

### 2. Suchen Sie in Dateien nach Anweisungen zum Import der Klasse V1
<a name="migration-steps-overview-step2"></a>

Wenn Sie die Dateien in Ihrer Anwendung nach SERVICE\$1 durchsuchen, die in v1-Importen IDs verwendet wurden, finden Sie den eindeutigen Namen SERVICE\$1IDs , der verwendet wird. Eine SERVICE\$1ID ist ein kurzer, eindeutiger Name für eine. AWS-Service Zum Beispiel `cognitoidentity` die SERVICE\$1ID für Amazon Cognito Identity.

### 3. Ermitteln Sie die Maven-Abhängigkeiten der Version 2 anhand der V1-Importanweisungen
<a name="migration-steps-overview-step3"></a>

Nachdem Sie alle eindeutigen v1-SERVICE\$1 gefunden habenIDs, können Sie das entsprechende Maven-Artefakt für die v2-Abhängigkeit ermitteln, indem Sie auf verweisen. [Zuordnungen von Paketnamen zu Maven-ArtifactID-Zuordnungen](#migration-serviceid-artifactid-mapping)

### 4. Fügen Sie der POM-Datei v2-Abhängigkeitselemente hinzu
<a name="migration-steps-overview-step4"></a>

Aktualisieren Sie die Maven-POM-Datei mit den in Schritt 3 festgelegten Abhängigkeitselementen.

### 5. Wechseln Sie in den Java-Dateien schrittweise von den v1-Klassen zu v2-Klassen
<a name="migration-steps-overview-step5"></a>

Wenn Sie v1-Klassen durch v2-Klassen ersetzen, nehmen Sie die erforderlichen Änderungen vor, um die v2-API zu unterstützen, z. B. die Verwendung von Buildern anstelle von Konstruktoren und die Verwendung flüssiger Getter und Setter.

### 6. Entfernen Sie v1-Maven-Abhängigkeiten aus dem POM und v1-Importen aus Dateien
<a name="migration-steps-overview-step6"></a>

Nachdem Sie Ihren Code zur Verwendung von v2-Klassen migriert haben, entfernen Sie alle übrig gebliebenen v1-Importe aus Dateien und alle Abhängigkeiten aus Ihrer Build-Datei.

### 7. Refaktorieren Sie den Code, um v2-API-Verbesserungen zu verwenden
<a name="migration-steps-overview-step7"></a>

Nachdem der Code erfolgreich kompiliert und die Tests bestanden hat, können Sie die Vorteile von v2-Verbesserungen nutzen, z. B. die Verwendung eines anderen HTTP-Clients oder von Paginatoren, um den Code zu vereinfachen. Dieser Schritt ist optional.

## Beispiel für eine Migration
<a name="migration-steps-example"></a>

In diesem Beispiel migrieren wir eine Anwendung, die das SDK for Java v1 verwendet und auf mehrere AWS-Services zugreift. In Schritt 5 gehen wir die folgende v1-Methode detailliert durch. Dies ist eine Methode in einer Klasse, die acht Methoden enthält, und es gibt 32 Klassen in der Anwendung.

### v1-Methode zur Migration
<a name="v1-snippet-collapsed"></a>

Im Folgenden sind nur die v1-SDK-Importe aus der Java-Datei aufgeführt.

```
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. Fügen Sie v2 Maven BOM hinzu
<a name="migration-steps-example-step1"></a>

Fügen Sie dem POM die Maven-Stückliste für das SDK for Java 2.x zusammen mit allen anderen Abhängigkeiten in diesem Abschnitt hinzu. `dependencyManagement` Wenn Ihre POM-Datei die BOM für Version 1 des SDK enthält, lassen Sie sie vorerst stehen. Sie wird in einem späteren Schritt entfernt.

#### POM-Abhängigkeitsmanagement von Anfang an
<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. Suchen Sie in Dateien nach Importanweisungen der Klasse V1
<a name="migration-steps-example-step2"></a>

Durchsuchen Sie den Code der Anwendung nach eindeutigen Vorkommen von`import com.amazonaws.services`. Dies hilft uns dabei, die vom Projekt verwendeten v1-Abhängigkeiten zu ermitteln. Wenn in Ihrer Anwendung eine Maven-POM-Datei mit aufgelisteten V1-Abhängigkeiten vorhanden ist, können Sie stattdessen diese Informationen verwenden. 

In diesem Beispiel verwenden wir den Befehl [`ripgrep`(rg)](https://github.com/BurntSushi/ripgrep), um die Codebasis zu durchsuchen.

Führen Sie im Stammverzeichnis Ihrer Codebasis den folgenden `ripgrep` Befehl aus. Nachdem die `ripgrep` Importanweisungen gefunden wurden, werden sie über die Pipeline an die `uniq` Befehle`cut`, und `sort` übergeben, um den IDs SERVICE\$1 zu isolieren. 

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

Für diese Anwendung werden die folgenden SERVICE\$1 in der IDs Konsole protokolliert.

```
autoscaling
cloudformation
ec2
identitymanagement
```

Dies weist darauf hin, dass jeder der folgenden Paketnamen, die in `import` Anweisungen verwendet wurden, mindestens einmal vorkommt. Für unsere Zwecke spielen die einzelnen Klassennamen keine Rolle. Wir müssen nur die SERVICE\$1 findenIDs , die verwendet werden.

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

### 3. Ermitteln Sie die v2-Maven-Abhängigkeiten anhand der v1-Importanweisungen
<a name="migration-steps-example-step3"></a>

Der SERVICE\$1 IDs für Version 1, den wir aus Schritt 2 isoliert haben — zum Beispiel `autoscaling` und `cloudformation` — kann größtenteils derselben v2-SERVICE\$1ID zugeordnet werden. Da die v2-Maven-ArtifactID in den meisten Fällen mit der SERVICE\$1ID übereinstimmt, verfügen Sie über die Informationen, die Sie benötigen, um Ihrer POM-Datei Abhängigkeitsblöcke hinzuzufügen.

Die folgende Tabelle zeigt, wie wir die v2-Abhängigkeiten ermitteln können.


| v1 SERVICE\$1ID ist zugeordnet zu...Name des Pakets | v2 SERVICE\$1ID ist zugeordnet zu...Name des Pakets | v2 Maven-Abhängigkeit | 
| --- | --- | --- | 
|  **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>  | 
|  **automatische Skalierung** `com.amazonaws.services.autoscaling.*`  |  **automatische Skalierung** `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>  | 
| Identitätsmanagement\$1`com.amazonaws.services.identitymanagement.*` | ich bin\$1`software.amazon.awssdk.iam.*` |  <pre><dependency><br />  <groupId>software.amazon.awssdk</groupId><br />  <artifactId>iam</artifactId><br /></dependency></pre>  | 

\$1 Die `iam` Zuordnung `identitymanagement` zu ist eine Ausnahme, bei der sich die SERVICE\$1ID zwischen den Versionen unterscheidet. In den [Zuordnungen von Paketnamen zu Maven-ArtifactID-Zuordnungen](#migration-serviceid-artifactid-mapping) finden Sie Ausnahmen, falls Maven oder Gradle die v2-Abhängigkeit nicht auflösen können.

### 4. Fügen Sie der POM-Datei v2-Abhängigkeitselemente hinzu
<a name="migration-steps-example-step4"></a>

In Schritt 3 haben wir die vier Abhängigkeitsblöcke bestimmt, die der POM-Datei hinzugefügt werden müssen. Wir müssen keine Version hinzufügen, da wir die Stückliste in Schritt 1 angegeben haben. Nachdem die Importe hinzugefügt wurden, enthält unsere POM-Datei die folgenden Abhängigkeitselemente.

```
    ...
  <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. Wechseln Sie in den Java-Dateien schrittweise von den v1-Klassen zu v2-Klassen
<a name="migration-steps-example-step5"></a>

In der Methode, die wir migrieren, sehen wir
+ Ein EC2-Serviceclient von. `com.amazonaws.services.ec2.AmazonEC2Client`
+ Es wurden mehrere EC2-Modellklassen verwendet. Zum Beispiel `DescribeInstancesRequest` und. `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;
}
...
```

Unser Ziel ist es, alle v1-Importe durch v2-Importe zu ersetzen. Wir fahren mit einer Klasse nach der anderen fort.

#### a. Ersetzt die Importanweisung oder den Klassennamen
<a name="migration-example-step5-substep1"></a>

Wir sehen, dass der erste Parameter der `describeRunningInstances` Methode eine `AmazonEC2Client` v1-Instanz ist. Führen Sie eine der folgenden Aktionen aus:
+ Ersetzen Sie den Import für `com.amazonaws.services.ec2.AmazonEC2Client` durch `software.amazon.awssdk.services.ec2.Ec2Client` und wechseln Sie `AmazonEC2Client` zu`Ec2Client`.
+ Ändern Sie den Parametertyp in `Ec2Client` und lassen Sie uns von der IDE nach dem richtigen Import fragen. Unsere IDE fordert uns auf, die v2-Klasse zu importieren, da sich die Client-Namen unterscheiden — `AmazonEC2Client` und`Ec2Client`. Dieser Ansatz funktioniert nicht, wenn der Klassenname in beiden Versionen derselbe ist.

#### b. Ersetzen Sie v1-Modellklassen durch v2-Äquivalente
<a name="migration-example-step5-substep2"></a>

Wenn wir nach der Umstellung auf Version 2 `Ec2Client` eine IDE verwenden, werden in der folgenden Anweisung Kompilierungsfehler angezeigt.

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

Der Kompilierungsfehler resultiert aus der Verwendung einer Instanz von v1 `DescribeInstancesRequest` als Parameter für die `Ec2Client` `describeInstances` v2-Methode. Um das Problem zu beheben, geben Sie die folgenden Ersatz- oder Importanweisungen ein.


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

#### c. Ändern Sie v1-Konstruktoren in v2-Builder.
<a name="migration-example-step5-substep3"></a>

Wir sehen immer noch Kompilierungsfehler, da es [keine Konstruktoren für v2-Klassen](migration-whats-different.md#immutable-classes) gibt. Um das Problem zu beheben, nehmen Sie die folgende Änderung vor.


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

#### d. Ersetzen Sie `*Result` v1-Antwortobjekte durch `*Response` v2-Äquivalente
<a name="migration-example-step5-substep4"></a>

Ein konsistenter Unterschied zwischen v1 und v2 besteht darin, dass alle [Antwortobjekte in v2 mit `*Response` statt mit enden](migration-whats-different.md#model-classname-changes). `*Result` Ersetzen Sie den `DescribeInstancesResult` v1-Import durch den v2-Import,`DescribeInstancesResponse`.

#### d. Nehmen Sie API-Änderungen vor
<a name="migration-example-step5-substep5"></a>

Die folgende Aussage benötigt einige Änderungen.

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

In Version 2 verwenden [Setter-Methoden](migration-whats-different.md#setter-getter-methods) das `set` oder mit `prefix` nicht. Getter-Methoden mit dem Präfix `get` sind auch im SDK for Java 2.x weg

Modellklassen, wie die `request` Instanz, sind in Version 2 unveränderlich, daher müssen wir mit einem Builder eine neue `DescribeInstancesRequest` Klasse erstellen.

In Version 2 lautet die Anweisung wie folgt.

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

#### d. Wiederholen Sie den Vorgang, bis die Methode mit v2-Klassen kompiliert wurde
<a name="migration-example-step5-substep6"></a>

Fahren Sie mit dem Rest des Codes fort. Ersetzen Sie v1-Importe durch v2-Importe und beheben Sie die Kompilierungsfehler. Weitere Informationen finden Sie je nach Bedarf in der [v2-API-Referenz](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/ec2/package-summary.html) und der [Referenz Was ist anders](migration-whats-different.md).

Nachdem wir diese einzelne Methode migriert haben, haben wir den folgenden v2-Code.

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

Da wir eine einzelne Methode in einer Java-Datei mit acht Methoden migrieren, haben wir beim Durcharbeiten der Datei eine Mischung aus v1- und v2-Importen. Bei der Ausführung der Schritte haben wir die letzten sechs Importanweisungen hinzugefügt. 

Nachdem wir den gesamten Code migriert haben, wird es keine v1-Importanweisungen mehr geben.

### 6. Entfernen Sie v1-Maven-Abhängigkeiten aus dem POM und v1-Importe aus Dateien
<a name="migration-steps-example-step6"></a>

Nachdem wir den gesamten v1-Code in der Datei migriert haben, haben wir die folgenden v2-SDK-Importanweisungen.

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

Nachdem wir *alle* Dateien in unserer Anwendung migriert haben, benötigen wir die v1-Abhängigkeiten in unserer POM-Datei nicht mehr. Entfernen Sie die v1-BOM aus dem `dependencyManagement` Abschnitt, falls Sie sie verwenden, und alle v1-Abhängigkeitsblöcke.

### 7. Refaktorieren Sie den Code, um v2-API-Verbesserungen zu verwenden
<a name="migration-steps-example-step7"></a>

Für das Snippet, das wir migriert haben, können wir optional einen v2-Paginator verwenden und das SDK die tokenbasierten Anfragen nach weiteren Daten verwalten lassen.

Wir können die gesamte Klausel durch die folgende ersetzen. `do`

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

## Zuordnungen von Paketnamen zu Maven-ArtifactID-Zuordnungen
<a name="migration-serviceid-artifactid-mapping"></a>

Wenn Sie Ihr Maven- oder Gradle-Projekt von Version 1 des SDK for Java auf Version 2 migrieren, müssen Sie herausfinden, welche Abhängigkeiten Sie Ihrer Build-Datei hinzufügen müssen. Der in [step-by-stepMigrationsanweisungen mit Beispiel](#migration-steps) (Schritt 3) beschriebene Ansatz verwendet die Paketnamen in Importanweisungen als Ausgangspunkt, um die Abhängigkeiten (als ArtifactIDs) zu bestimmen, die zu Ihrer Build-Datei hinzugefügt werden sollen. 

Sie können die Informationen in diesem Thema verwenden, um die v1-Paketnamen den v2-ArtifactIDs zuzuordnen.

### Allgemeine Namenskonvention, die in Paketnamen und Maven-ArtifactIDs verwendet wird
<a name="migration-naming-convention"></a>

Die folgende Tabelle zeigt die allgemeine Benennungskonvention, die für eine bestimmte SERVICE\$1ID SDKs verwendet wird. Eine SERVICE\$1ID ist ein eindeutiger Bezeichner für eine. AWS-Service Beispielsweise ist `s3` und `cognitoidentity` ist die SERVICE\$1ID für den Amazon S3 S3-Service die SERVICE\$1ID für Amazon Cognito Identity.


| v1-Paketname (Import-Anweisung) | v1-Artefakt-ID | v2-Artefakt-ID | v2-Paketname (Importanweisung) | 
| --- | --- | --- | --- | 
| com.amazonaws.services.service\$1ID | aws-java-sdk-SERVICE\$1ID | SERVICE\$1ID | software.amazon.awssdk.services.service\$1id | 
|   | 
| Beispiel für Amazon Cognito Identity (SERVICE\$1ID:) cognitoidentity | 
| com.amazonaws.services. kognitive Identität | aws-java-sdk- kognitive Identität | kognitive Identität | software.amazon.awssdk.services. kognitive Identität | 

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

#### Innerhalb von Version 1
<a name="migration-serviceid-diffs-withinv1"></a>

In einigen Fällen unterscheidet sich die SERVICE\$1ID zwischen dem Paketnamen und der artifactId für denselben Dienst. Beispielsweise zeigt die Zeile CloudWatch Metrics der folgenden Tabelle, dass es sich um die SERVICE\$1ID im Paketnamen `metrics` handelt, aber `cloudwatchmetrics` um die SERVICE\$1ID der ArtifactID.

#### Innerhalb von Version 2
<a name="migration-serviceid-diffs-withinv2"></a>

Es gibt keine Unterschiede in der SERVICE\$1ID, die in Paketnamen und ArtifactIDs verwendet wird.

#### Zwischen v1 und v2
<a name="migration-serviceid-diffs-btwv1v2"></a>

Für die meisten Dienste entspricht die SERVICE\$1ID in Version 2 der SERVICE\$1ID von Version 1, sowohl in den Paketnamen als auch in den ArtifactIDs. Ein Beispiel hierfür ist die `cognitoedentity` SERVICE\$1ID, wie in der vorherigen Tabelle dargestellt. Einige SERVICE\$1 IDs unterscheiden sich jedoch zwischen den in der SDKs folgenden Tabelle aufgeführten.

Eine **fett gedruckte SERVICE\$1ID** in einer der v1-Spalten weist darauf hin, dass sie sich von der in Version 2 verwendeten SERVICE\$1ID unterscheidet.


| Service-Name | v1-Paketname | v1-Artefakt-ID | v2-Artefakt-ID | v2-Paketname | 
| --- | --- | --- | --- | --- | 
|  |  Alle Paketnamen beginnen mit dem`com.amazonaws.services`, was in der ersten Zeile angegeben ist.  |  Alle ArtifactIDs sind in Tags eingeschlossen, wie in der ersten Zeile gezeigt.  |  Alle ArtifactIDs sind in Tags eingeschlossen, wie in der ersten Zeile gezeigt.  |  Alle Paketnamen beginnen mit dem, was in `software.amazon.awssdk` der ersten Zeile angezeigt wird.  | 
|  | 
| API Gateway | com.amazonaws.services.apigateway | <artifactId>aws-java-sdk- API-Gateway</artifactId> | <artifactId>API-Gateway</artifactId> | software.amazon.awssdk.services.apigateway | 
| App-Registrierung | App-Registrierung | appregistrierung | ServicekatalogAppRegistry | Registrierung der ServicekatalogApp | 
| Application Discovery | Anwendungserkennung | Entdeckung | Entdeckung von Anwendungen | Anwendungserkennung | 
| Augmented AI KI-Laufzeit | erweiterte Air-Laufzeit | erhöhte Luftlaufzeit | Laufzeit von Sagemaker A2I | Sagemakera2i Laufzeit | 
| Certificate Manager | Zertifikatsmanager | acm | acm | acm | 
| CloudControl API | API für Cloud-Steuerung | Cloud-Control-API | Cloud-Steuerung | Cloud-Kontrolle | 
| CloudSearch | Cloudsearch v2 | clousearch | clousearch | clousearch | 
| CloudSearch Domäne | Cloudsearch-Domäne | Cloud-Suche | Cloudsearch-Domäne | Cloudsearch-Domäne | 
| CloudWatch Events | Cloudwatch-Ereignisse | Ereignisse | Cloudwatch-Ereignisse | Cloudwatch-Ereignisse | 
| CloudWatch Offensichtlich | Offensichtlich Cloudwatch | Cloudwatch offenbar | evidently | evidently | 
| CloudWatch Logs | logs | logs | CloudWatch-Protokolle | CloudWatch-Protokolle | 
| CloudWatch Metriken | Metriken | Cloudwatch-Metriken | cloudwatch | cloudwatch | 
| CloudWatch Rum | Cloudwatch Rum | cloudwatchrum | rum | rum | 
| Cognito-Identitätsanbieter | Cognitoidp | Kognitoidp | Anbieter von kognitiver Identität | Anbieter von Cognito Identity | 
| Kampagne Connect | Kampagne verbinden | Kampagne verbinden | Kampagnen verbinden | Kampagnen verbinden | 
| Connect Wisdom | verbinde Weisheit | Weisheit verbinden | wisdom | wisdom | 
| Database Migration Service | Datenbankmigrationsdienst | dms | Datenbank-Migration | Datenbankmigration | 
| DataZone | Datazone | Datenzone extern | Datenzone | Datenzone | 
| DynamoDB | Dynamo DBV 2 | dynamodb | dynamodb | dynamodb | 
| Elastisches Dateisystem | elastisches Dateisystem | efs | efs | efs | 
| Elastic Map Reduce | elasticmapreduce | emr | emr | emr | 
| Glue DataBrew | Klebe ein Gebräu | Gluedata Brew | databrew | databrew | 
| IAM Roles Anywhere | Ich bin überall Rollen | Ich bin überall Roles | rolesanywhere | rolesanywhere | 
| Identitätsverwaltung | Identitätsmanagement | iam | iam | iam | 
| IoT-Daten | IoT-Daten | iot | IoT-Datenebene | iotDatenebene | 
| Kinesis-Analytik | kinesisanalytics | kinesis | kinesisanalytics | kinesisanalytics | 
| Kinesis Firehose | Kinesis-Feuerwehrschlauch | kinesis | firehose | firehose | 
| Kinesis-Videosignalkanäle | Kinesis-Videosignalkanäle | Kinesis-Videosignalkanäle | Kinesis-Videosignalisierung | Kinesis-Videosignalisierung | 
| Lex | LEX Runtime | Lex | Lex Laufzeit | lexruntime | 
| Halten Sie Ausschau nach Visionen | Halte Ausschau nach Visionen | Halte Ausschau nach Visionen | lookoutvision | lookoutvision | 
| Mainframe-Modernisierung | Modernisierung von Mainframes | Modernisierung des Mainframes | m2 | m2 | 
| Marktmessung | Messung von Marktplätzen | Marketplace-Metering-Service | Marktplatzmessung | Marktplatzmessung | 
| Verwaltetes Grafana | verwaltete Grafana | verwaltete Grafana | grafana | grafana | 
| Mechanical Turk | Mturk | mechanischer Türkenquester | mturk | mturk | 
| Migration-Hub-Strategieempfehlungen | Strategieempfehlungen für den Migrationshub | Strategieempfehlungen für MigrationHubs | Strategie für einen Migrationshub | Strategie für einen Migrationshub | 
| Nimble Studio | flinkes Studio | flinkes Studio | nimble | nimble | 
| Privates 5G | privat 5g | privat 5g | private Netzwerke | private Netzwerke | 
| Prometheus | Prometheus | Prometheus | Verstärker | Verstärker | 
| Papierkorb | Papierkorb | Papierkorb | rbin | rbin | 
| Redshift-Daten-API | RedshiftData-API | RedshiftData-API | Redshiftdaten | Redshiftdaten | 
| Route 53 | 53 Domains weiterleiten | route53 | 53 Domänen weiterleiten | 53 Domänen weiterleiten | 
| Sage Maker Edge-Manager | Sagemaker Edge Manager | SagemakerEdgemanager | SagemakerEdge | SagemakerEdge | 
| Sicherheitstoken | Sicherheitstoken | sts | sts | sts | 
| Server-Migration | Servermigration | Servermigration | sms | sms | 
| Einfache E-Mail | einfache E-Mail | ses | ses | ses | 
| Einfache E-Mail V2 | einfache E-Mail v2 | sesv2 | sesv2 | sesv2 | 
| Einfaches Systemmanagement | einfache Systemverwaltung | ssm | ssm | ssm | 
| Einfacher Arbeitsablauf | einfacher Arbeitsablauf | einfacher Arbeitsablauf | swf | swf | 
| Step Functions | Schrittfunktionen | Schrittfunktionen | sfn | sfn | 