

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.

# Änderungen im EC2-Metadaten-Hilfsprogramm von Version 1 zu Version 2
<a name="migration-imds"></a>

In diesem Thema werden die Änderungen im Metadaten-Hilfsprogramm SDK for Java Amazon Elastic Compute Cloud (EC2) von Version 1 (v1) auf Version 2 (v2) beschrieben.

## Änderungen auf hoher Ebene
<a name="migration-imds-high-level-changes"></a>


****  

| Änderungen | v1 |   v2 | 
| --- | --- | --- | 
|    Maven-Abhängigkeiten  |  <pre><dependencyManagement><br />    <dependencies><br />        <dependency><br />            <groupId>com.amazonaws</groupId><br />            <artifactId>aws-java-sdk-bom</artifactId><br />            <version>1.12.5871</version><br />            <type>pom</type><br />            <scope>import</scope><br />        </dependency><br />    </dependencies><br /></dependencyManagement><br /><dependencies><br />    <dependency><br />        <groupId>com.amazonaws</groupId><br />        <artifactId>aws-java-sdk-core</artifactId><br />    </dependency><br /></dependencies></pre>  |  <pre><dependencyManagement><br />    <dependencies><br />        <dependency><br />            <groupId>software.amazon.awssdk</groupId><br />            <artifactId>bom</artifactId><br />            <version>2.27.212</version><br />            <type>pom</type><br />            <scope>import</scope><br />        </dependency><br />    </dependencies><br /></dependencyManagement><br /><dependencies><br />    <dependency><br />        <groupId>software.amazon.awssdk</groupId><br />        <artifactId>imds</artifactId><br />    </dependency><br />    <dependency><br />        <groupId>software.amazon.awssdk</groupId><br />        <artifactId>apache-client3</artifactId><br />    </dependency><br /></dependencies></pre>  | 
| Package name |  com.amazonaws.util  |  software.amazon.awssdk.imds  | 
| Instanziierungsansatz |  Verwenden Sie statische Hilfsmethoden; keine Instanziierung: <pre>String localHostName = <br />           EC2MetadataUtils.getLocalHostName();</pre>  |  Verwenden Sie eine statische Factory-Methode: <pre>Ec2MetadataClient client = Ec2MetadataClient.create();</pre> Oder verwenden Sie einen Builder-Ansatz: <pre>Ec2MetadataClient client = Ec2MetadataClient.builder()<br />    .endpointMode(EndpointMode.IPV6)<br />    .build();</pre>  | 
| Arten von Kunden | Nur synchrone Hilfsmethoden: EC2MetadataUtils |  Synchron: `Ec2MetadataClient` Asynchron: `Ec2MetadataAsyncClient`  | 

1 [Letzte Version](https://central.sonatype.com/artifact/com.amazonaws/aws-java-sdk-bom). 2 [Letzte Version](https://central.sonatype.com/artifact/software.amazon.awssdk/bom).

3 Beachten Sie die Deklaration des `apache-client` Moduls für v2. V2 des EC2-Metadaten-Dienstprogramms erfordert eine Implementierung der `SdkHttpClient` Schnittstelle für den synchronen Metadaten-Client oder der `SdkAsyncHttpClient` Schnittstelle für den asynchronen Metadaten-Client. Der [Konfigurieren Sie HTTP-Clients in der AWS SDK for Java 2.x](http-configuration.md) Abschnitt zeigt die Liste der HTTP-Clients, die Sie verwenden können.

### Metadaten anfordern
<a name="migration-imds-fetching-changes"></a>

In Version 1 verwenden Sie statische Methoden, die keine Parameter akzeptieren, um Metadaten für eine EC2-Ressource anzufordern. Im Gegensatz dazu müssen Sie in v2 den Pfad zur EC2-Ressource als Parameter angeben. Die folgende Tabelle zeigt die verschiedenen Ansätze.


****  

| v1 |   v2 | 
| --- | --- | 
|  <pre>String userMetaData = EC2MetadataUtils.getUserData();</pre>  |  <pre>Ec2MetadataClient client = Ec2MetadataClient.create();<br />Ec2MetadataResponse response = <br />                client.get("/latest/user-data");<br />String userMetaData = <br />                response.asString();</pre>  | 

Den Pfad, den Sie angeben müssen, um [Metadaten anzufordern, finden Sie in den Kategorien der Instanz-Metadaten](https://docs.aws.amazon.com//AWSEC2/latest/UserGuide/instancedata-data-categories.html). 

**Anmerkung**  
Wenn Sie in Version 2 einen Instanz-Metadaten-Client verwenden, sollten Sie versuchen, für alle Anfragen zum Abrufen von Metadaten denselben Client zu verwenden.

 

## Verhaltensänderungen
<a name="migration-imds-behavior-changes"></a>

### JSON-Daten
<a name="migration-imds-behavior-json"></a>

Auf EC2 gibt der lokal ausgeführte Instance Metadata Service (IMDS) einige Metadaten als Zeichenketten im JSON-Format zurück. Ein solches Beispiel sind die dynamischen Metadaten eines [Instanz-Identdokuments](https://docs.aws.amazon.com//AWSEC2/latest/UserGuide/instance-identity-documents.html).

Die v1-API enthält separate Methoden für jeden Teil der Instanzidentitätsmetadaten, wohingegen die v2-API die JSON-Zeichenfolge direkt zurückgibt. Um mit der JSON-Zeichenfolge zu arbeiten, können Sie die [Dokument-API](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/core/document/package-summary.html) verwenden, um die Antwort zu analysieren und in der JSON-Struktur zu navigieren.

In der folgenden Tabelle wird verglichen, wie Sie Metadaten eines Instanzidentitätsdokuments in Version 1 und Version 2 abrufen.


****  

| Anwendungsfall | v1 |   v2 | 
| --- | --- | --- | 
| Rufen Sie die Region ab |  <pre>InstanceInfo instanceInfo = <br />        EC2MetadataUtils.getInstanceInfo();<br />String region = instanceInfo.getRegion();</pre>  |  <pre>Ec2MetadataResponse response = <br />    client.get("/latest/dynamic/instance-identity/document");<br />Document instanceInfo = response.asDocument();<br />String region = instanceInfo.asMap().get("region").asString();</pre>  | 
| Rufen Sie die Instanz-ID ab |  <pre>InstanceInfo instanceInfo = <br />        EC2MetadataUtils.getInstanceInfo();<br />String instanceId = instanceInfo.instanceId;</pre>  |  <pre>Ec2MetadataResponse response = <br />    client.get("/latest/dynamic/instance-identity/document");<br />Document instanceInfo = response.asDocument();<br />String instanceId = instanceInfo.asMap().get("instanceId").asString();</pre>  | 
| Rufen Sie den Instanztyp ab |  <pre>InstanceInfo instanceInfo = <br />        EC2MetadataUtils.getInstanceInfo();<br />String instanceType = instanceInfo.instanceType();</pre>  |  <pre>Ec2MetadataResponse response = <br />    client.get("/latest/dynamic/instance-identity/document");<br />Document instanceInfo = response.asDocument();<br />String instanceType = instanceInfo.asMap().get("instanceType").asString();</pre>  | 

### Unterschiede bei der Auflösung von Endpunkten
<a name="migration-imds-behavior-endpoint-res"></a>

Die folgende Tabelle zeigt die Speicherorte, nach denen das SDK sucht, um den Endpunkt nach IMDS aufzulösen. Die Standorte sind mit absteigender Priorität aufgeführt.


****  

| v1 |   v2 | 
| --- | --- | 
| Systemeigenschaft: com.amazonaws.sdk.ec2MetadataServiceEndpointOverride | Konfigurationsmethode für den Client Builder: endpoint(...) | 
| Umgebungsvariable: AWS\$1EC2\$1METADATA\$1SERVICE\$1ENDPOINT | Systemeigenschaft: aws.ec2MetadataServiceEndpoint | 
| Standardwert: http://169.254.169.254 | Konfigurationsdatei: \$1.aws/config mit der ec2\$1metadata\$1service\$1endpoint Einstellung | 
|  | Wert, der mit „gelöst“ verknüpft ist endpoint-mode  | 
|  | Standardwert: http://169.254.169.254 | 

### Endpunktauflösung in Version 2
<a name="migration-imds-behavior-endpoint-res2"></a>

Wenn Sie mithilfe des Builders explizit einen Endpunkt festlegen, hat dieser Endpunktwert Vorrang vor allen anderen Einstellungen. Wenn der folgende Code ausgeführt wird, werden die `aws.ec2MetadataServiceEndpoint` Systemeigenschaft und die `ec2_metadata_service_endpoint` Einstellung der Konfigurationsdatei ignoriert, sofern sie existieren.

```
Ec2MetadataClient client = Ec2MetadataClient
  .builder()
  .endpoint(URI.create("endpoint.to.use"))
  .build();
```

#### Endpoint-Modus
<a name="migration-imds-behavior-endpoint-mode"></a>

Mit v2 können Sie einen Endpunktmodus angeben, um den Metadaten-Client so zu konfigurieren, dass er die Standard-Endpunktwerte für oder verwendet. IPv4 IPv6 Der Endpunktmodus ist für Version 1 nicht verfügbar. Der für verwendete Standardwert IPv4 ist `http://169.254.169.254` und `http://[fd00:ec2::254]` für. IPv6

Die folgende Tabelle zeigt die verschiedenen Möglichkeiten, wie Sie den Endpunktmodus nach absteigender Priorität einstellen können.


****  

|  |  | Mögliche Werte | 
| --- | --- | --- | 
| Client-Builder-Konfigurationsmethode: endpointMode(...) |  <pre>Ec2MetadataClient client = Ec2MetadataClient<br />  .builder()<br />  .endpointMode(EndpointMode.IPV4)<br />  .build();</pre>  | EndpointMode.IPV4, EndpointMode.IPV6 | 
| Systemeigenschaft | aws.ec2MetadataServiceEndpointMode | IPv4, IPv6 (Groß- und Kleinschreibung spielt keine Rolle) | 
| Konfigurationsdatei: \$1.aws/config | ec2\$1metadata\$1service\$1endpoint-Einstellung | IPv4, IPv6 (Groß- und Kleinschreibung spielt keine Rolle) | 
| Auf die vorherigen Arten nicht angegeben | IPv4 wird verwendet |  | 

#### Wie das SDK auflöst `endpoint` oder `endpoint-mode` in v2
<a name="migration-imds-behavior-endpoint-res2-which"></a>

1. Das SDK verwendet den Wert, den Sie im Code auf dem Client Builder festgelegt haben, und ignoriert alle externen Einstellungen. Da das SDK bei beiden eine Ausnahme auslöst `endpoint` und `endpointMode` im Client Builder aufgerufen wird, verwendet das SDK den Endpunktwert der von Ihnen verwendeten Methode.

1. Wenn Sie keinen Wert im Code festlegen, sucht das SDK nach einer externen Konfiguration — zuerst nach Systemeigenschaften und dann nach einer Einstellung in der Konfigurationsdatei. 

   1. Das SDK sucht zunächst nach einem Endpunktwert. Wenn ein Wert gefunden wird, wird er verwendet. 

   1. Wenn das SDK immer noch keinen Wert gefunden hat, sucht das SDK nach Einstellungen für den Endpunktmodus.

1. Wenn das SDK schließlich keine externen Einstellungen findet und Sie den Metadaten-Client nicht im Code konfiguriert haben, verwendet das SDK den IPv4 Wert von`http://169.254.169.254`.

### IMDSv2
<a name="migration-imds-behavior-imdsv2"></a>

Amazon EC2 definiert zwei Ansätze für den Zugriff auf Instance-Metadaten:
+ Instance-Metadaten-Service Version 1 (IMDSv1) — Anforderungs-/Antwort-Ansatz
+ Instanz-Metadatendienst Version 2 (IMDSv2) — Sitzungsorientierter Ansatz

In der folgenden Tabelle wird verglichen, wie Java mit SDKs IMDS funktioniert.


****  

| v1 |   v2 | 
| --- | --- | 
| IMDSv2 wird standardmäßig verwendet | Benutzt immer IMDSv2 | 
| Versucht, für jede Anfrage ein Sitzungstoken abzurufen, und greift darauf zurück, IMDSv1 wenn ein Sitzungstoken nicht abgerufen werden kann | Speichert ein Sitzungstoken in einem internen Cache, der für mehrere Anfragen wiederverwendet wird | 

Das SDK for Java 2.x unterstützt nur IMDSv2 und greift nicht darauf IMDSv1 zurück.

## Unterschiede in der Konfiguration
<a name="migration-imds-config-diffs"></a>

In der folgenden Tabelle sind die unterschiedlichen Konfigurationsoptionen aufgeführt.


****  

| Konfiguration | v1 |   v2 | 
| --- | --- | --- | 
| Erneute Versuche | Konfiguration nicht verfügbar | Konfigurierbar über die Builder-Methode retryPolicy(...) | 
| HTTP | Verbindungs-Timeout, konfigurierbar über die AWS\$1METADATA\$1SERVICE\$1TIMEOUT Umgebungsvariable. Die Standardeinstellung ist 1 Sekunde. | Die Konfiguration ist verfügbar, indem ein HTTP-Client an die Builder-Methode übergeben wirdhttpClient(...). Das Standard-Verbindungstimeout für HTTP-Clients beträgt 2 Sekunden. | 

### Beispiel für eine v2-HTTP-Konfiguration
<a name="migration-imds-http-conf-v2-ex"></a>

Das folgende Beispiel zeigt, wie Sie den Metadaten-Client konfigurieren können. In diesem Beispiel wird das Verbindungstimeout konfiguriert und der Apache HTTP-Client verwendet.

```
SdkHttpClient httpClient = ApacheHttpClient.builder()
    .connectionTimeout(Duration.ofSeconds(1))
    .build();

Ec2MetadataClient imdsClient = Ec2MetadataClient.builder()
    .httpClient(httpClient)
    .build();
```