

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

# Modifications apportées à l'utilitaire de métadonnées EC2 de la version 1 à la version 2
<a name="migration-imds"></a>

Cette rubrique décrit les modifications apportées à l'utilitaire de métadonnées Amazon Elastic Compute Cloud (EC2) du SDK pour Java, de la version 1 (v1) à la version 2 (v2).

## Changements de haut niveau
<a name="migration-imds-high-level-changes"></a>


****  

| Modifier | v1 |   v2 | 
| --- | --- | --- | 
|    Dépendances de Maven  |  <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>  | 
| Nom du package |  com.amazonaws.util  |  software.amazon.awssdk.imds  | 
| Approche d'instanciation |  Utilisez des méthodes utilitaires statiques ; pas d'instanciation : <pre>String localHostName = <br />           EC2MetadataUtils.getLocalHostName();</pre>  |  Utilisez une méthode d'usine statique : <pre>Ec2MetadataClient client = Ec2MetadataClient.create();</pre> Ou utilisez une approche de constructeur : <pre>Ec2MetadataClient client = Ec2MetadataClient.builder()<br />    .endpointMode(EndpointMode.IPV6)<br />    .build();</pre>  | 
| Types de clients | Méthodes utilitaires synchrones uniquement : EC2MetadataUtils |  Synchrone : `Ec2MetadataClient` Asynchrone : `Ec2MetadataAsyncClient`  | 

1 [Dernière version](https://central.sonatype.com/artifact/com.amazonaws/aws-java-sdk-bom). 2 [Dernière version](https://central.sonatype.com/artifact/software.amazon.awssdk/bom).

3 Notez la déclaration du `apache-client` module pour la version 2. La version V2 de l'utilitaire de métadonnées EC2 nécessite une implémentation de l'`SdkHttpClient`interface pour le client de métadonnées synchrone ou de l'`SdkAsyncHttpClient`interface pour le client de métadonnées asynchrone. La [Configurez les clients HTTP dans AWS SDK for Java 2.x](http-configuration.md) section présente la liste des clients HTTP que vous pouvez utiliser.

### Demande de métadonnées
<a name="migration-imds-fetching-changes"></a>

Dans la version 1, vous utilisez des méthodes statiques qui n'acceptent aucun paramètre pour demander des métadonnées pour une ressource EC2. En revanche, vous devez spécifier le chemin d'accès à la ressource EC2 en tant que paramètre dans la version v2. Le tableau suivant présente les différentes approches.


****  

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

Reportez-vous aux [catégories de métadonnées de l'instance](https://docs.aws.amazon.com//AWSEC2/latest/UserGuide/instancedata-data-categories.html) pour trouver le chemin que vous devez fournir pour demander un élément de métadonnées. 

**Note**  
Lorsque vous utilisez un client de métadonnées d'instance dans la version 2, vous devez vous efforcer d'utiliser le même client pour toutes les demandes de récupération de métadonnées.

 

## Changements de comportement
<a name="migration-imds-behavior-changes"></a>

### Données JSON
<a name="migration-imds-behavior-json"></a>

Sur EC2, le service de métadonnées d'instance (IMDS) exécuté localement renvoie certaines métadonnées sous forme de chaînes au format JSON. Les métadonnées dynamiques d'un [document d'identité d'instance en sont un exemple](https://docs.aws.amazon.com//AWSEC2/latest/UserGuide/instance-identity-documents.html).

L'API v1 contient des méthodes distinctes pour chaque élément de métadonnées d'identité d'instance, tandis que l'API v2 renvoie directement la chaîne JSON. Pour utiliser la chaîne JSON, vous pouvez utiliser l'[API Document](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/core/document/package-summary.html) pour analyser la réponse et naviguer dans la structure JSON.

Le tableau suivant compare la manière dont vous récupérez les métadonnées d'un document d'identité d'instance dans les versions 1 et 2.


****  

| Cas d’utilisation | v1 |   v2 | 
| --- | --- | --- | 
| Récupérez la région |  <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>  | 
| Récupérez l'identifiant de l'instance |  <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>  | 
| Récupérez le type d'instance |  <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>  | 

### Différences de résolution des terminaux
<a name="migration-imds-behavior-endpoint-res"></a>

Le tableau suivant indique les emplacements que le SDK vérifie pour convertir le point de terminaison en IMDS. Les emplacements sont répertoriés par ordre de priorité décroissant.


****  

| v1 |   v2 | 
| --- | --- | 
| Propriété du système : com.amazonaws.sdk.ec2MetadataServiceEndpointOverride | Méthode de configuration du générateur de clients : endpoint(...) | 
| Variable d'environnement : AWS\$1EC2\$1METADATA\$1SERVICE\$1ENDPOINT | Propriété du système : aws.ec2MetadataServiceEndpoint | 
| Valeur par défaut: http://169.254.169.254 | Fichier de configuration : \$1.aws/config avec le ec2\$1metadata\$1service\$1endpoint paramètre | 
|  | Valeur associée à la résolution endpoint-mode  | 
|  | Valeur par défaut : http://169.254.169.254 | 

### Résolution du point de terminaison en version 2
<a name="migration-imds-behavior-endpoint-res2"></a>

Lorsque vous définissez explicitement un point de terminaison à l'aide du générateur, cette valeur de point de terminaison est prioritaire par rapport à tous les autres paramètres. Lorsque le code suivant s'exécute, la propriété `aws.ec2MetadataServiceEndpoint` système et le `ec2_metadata_service_endpoint` paramètre du fichier de configuration sont ignorés s'ils existent.

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

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

Avec la version v2, vous pouvez spécifier un mode de point de terminaison pour configurer le client de métadonnées afin qu'il utilise les valeurs de point de terminaison par défaut pour ou. IPv4 IPv6 Le mode Endpoint n'est pas disponible pour la version 1. La valeur par défaut utilisée pour IPv4 est `http://169.254.169.254` et `http://[fd00:ec2::254]` pour IPv6.

Le tableau suivant montre les différentes manières de définir le mode de point de terminaison par ordre décroissant de priorité.


****  

|  |  | Valeurs possibles | 
| --- | --- | --- | 
| Méthode de configuration du générateur de clients : endpointMode(...) |  <pre>Ec2MetadataClient client = Ec2MetadataClient<br />  .builder()<br />  .endpointMode(EndpointMode.IPV4)<br />  .build();</pre>  | EndpointMode.IPV4, EndpointMode.IPV6 | 
| Propriété du système | aws.ec2MetadataServiceEndpointMode | IPv4, IPv6 (le cas n'a pas d'importance) | 
| Fichier de configuration : \$1.aws/config | Paramètre ec2\$1metadata\$1service\$1endpoint | IPv4, IPv6 (le cas n'a pas d'importance) | 
| Non spécifié dans les méthodes précédentes | IPv4 est utilisé |  | 

#### Comment le SDK se résout `endpoint` ou `endpoint-mode` dans la version v2
<a name="migration-imds-behavior-endpoint-res2-which"></a>

1. Le SDK utilise la valeur que vous avez définie dans le code du générateur de clients et ignore les paramètres externes. Étant donné que le SDK génère une exception si les deux `endpoint` `endpointMode` sont appelés sur le générateur de clients, le SDK utilise la valeur du point de terminaison, quelle que soit la méthode que vous utilisez.

1. Si vous ne définissez aucune valeur dans le code, le SDK se tourne vers une configuration externe, d'abord pour les propriétés du système, puis pour un paramètre dans le fichier de configuration. 

   1. Le SDK vérifie d'abord la valeur d'un point de terminaison. Si une valeur est trouvée, elle est utilisée. 

   1. Si le SDK n'a toujours pas trouvé de valeur, il recherche les paramètres du mode endpoint.

1. Enfin, si le SDK ne trouve aucun paramètre externe et que vous n'avez pas configuré le client de métadonnées dans le code, le SDK utilise la IPv4 valeur de. `http://169.254.169.254`

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

Amazon EC2 définit deux approches pour accéder aux métadonnées des instances :
+ Service de métadonnées d'instance, version 1 (IMDSv1) — Approche de demande/réponse
+ Service de métadonnées d'instance version 2 (IMDSv2) — Approche axée sur les sessions

Le tableau suivant compare le fonctionnement de Java SDKs avec IMDS.


****  

| v1 |   v2 | 
| --- | --- | 
| IMDSv2 est utilisé par défaut | Utilise toujours IMDSv2 | 
| Tente de récupérer un jeton de session pour chaque demande et revient à zéro IMDSv1 si elle ne parvient pas à récupérer un jeton de session | Conserve un jeton de session dans un cache interne qui est réutilisé pour plusieurs demandes | 

Le SDK pour Java 2.x IMDSv2 ne prend en charge que. IMDSv1

## Différences de configuration
<a name="migration-imds-config-diffs"></a>

Le tableau suivant répertorie les différentes options de configuration.


****  

| Configuration | v1 |   v2 | 
| --- | --- | --- | 
| Nouvelles tentatives | Configuration non disponible | Configurable via la méthode du générateur retryPolicy(...) | 
| HTTP | Le délai d'expiration de la connexion est configurable via la variable d'AWS\$1METADATA\$1SERVICE\$1TIMEOUTenvironnement. La valeur par défaut est de 1 seconde. | Configuration disponible en passant un client HTTP à la méthode du générateurhttpClient(...). Le délai de connexion par défaut pour les clients HTTP est de 2 secondes. | 

### Exemple de configuration HTTP v2
<a name="migration-imds-http-conf-v2-ex"></a>

L'exemple suivant montre comment configurer le client de métadonnées. Cet exemple configure le délai d'expiration de la connexion et utilise le client HTTP Apache.

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

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