

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

# Perubahan utilitas metadata EC2 dari versi 1 ke versi 2
<a name="migration-imds"></a>

Topik ini merinci perubahan utilitas metadata SDK for Java Amazon Elastic Compute Cloud (EC2) dari versi 1 (v1) ke versi 2 (v2).

## Perubahan tingkat tinggi
<a name="migration-imds-high-level-changes"></a>


****  

| Ubah | v1 | v2 | 
| --- | --- | --- | 
|    Ketergantungan 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>  | 
| Nama paket |  com.amazonaws.util  |  software.amazon.awssdk.imds  | 
| Pendekatan instantiasi |  Gunakan metode utilitas statis; tidak ada instantiasi: <pre>String localHostName = <br />           EC2MetadataUtils.getLocalHostName();</pre>  |  Gunakan metode pabrik statis: <pre>Ec2MetadataClient client = Ec2MetadataClient.create();</pre> Atau gunakan pendekatan pembangun: <pre>Ec2MetadataClient client = Ec2MetadataClient.builder()<br />    .endpointMode(EndpointMode.IPV6)<br />    .build();</pre>  | 
| Jenis klien | Hanya metode utilitas sinkron: EC2MetadataUtils |  Sinkron: `Ec2MetadataClient` Asinkron: `Ec2MetadataAsyncClient`  | 

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

3 Perhatikan deklarasi `apache-client` modul untuk v2. V2 dari utilitas metadata EC2 memerlukan implementasi `SdkHttpClient` antarmuka untuk klien metadata sinkron, atau antarmuka untuk klien metadata `SdkAsyncHttpClient` asinkron. [Konfigurasikan klien HTTP di AWS SDK for Java 2.x](http-configuration.md)Bagian ini menunjukkan daftar klien HTTP yang dapat Anda gunakan.

### Meminta metadata
<a name="migration-imds-fetching-changes"></a>

Di v1, Anda menggunakan metode statis yang tidak menerima parameter untuk meminta metadata untuk sumber daya EC2. Sebaliknya, Anda perlu menentukan jalur ke sumber daya EC2 sebagai parameter di v2. Tabel berikut menunjukkan pendekatan yang berbeda.


****  

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

Lihat [kategori metadata instance](https://docs.aws.amazon.com//AWSEC2/latest/UserGuide/instancedata-data-categories.html) untuk menemukan jalur yang perlu Anda berikan untuk meminta sepotong metadata. 

**catatan**  
Ketika Anda menggunakan klien metadata instance di v2, Anda harus bertujuan untuk menggunakan klien yang sama untuk semua permintaan untuk mengambil metadata.

 

## Perubahan perilaku
<a name="migration-imds-behavior-changes"></a>

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

Pada EC2, Layanan Metadata Instance (IMDS) yang berjalan secara lokal mengembalikan beberapa metadata sebagai string berformat JSON. Salah satu contohnya adalah metadata dinamis dari dokumen [identitas instance](https://docs.aws.amazon.com//AWSEC2/latest/UserGuide/instance-identity-documents.html).

API v1 berisi metode terpisah untuk setiap bagian metadata identitas instance, sedangkan API v2 secara langsung mengembalikan string JSON. Untuk bekerja dengan string JSON, Anda dapat menggunakan [Document API](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/core/document/package-summary.html) untuk mengurai respons dan menavigasi struktur JSON.

Tabel berikut membandingkan bagaimana Anda mengambil metadata dari dokumen identitas instance di v1 dan v2.


****  

| Kasus penggunaan | v1 | v2 | 
| --- | --- | --- | 
| Ambil Wilayah |  <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>  | 
| Ambil id 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>  | 
| Ambil jenis 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>  | 

### Perbedaan resolusi titik akhir
<a name="migration-imds-behavior-endpoint-res"></a>

Tabel berikut menunjukkan lokasi yang diperiksa SDK untuk menyelesaikan titik akhir IMDS. Lokasi tercantum dalam prioritas menurun.


****  

| v1 | v2 | 
| --- | --- | 
| Properti sistem: com.amazonaws.sdk.ec2MetadataServiceEndpointOverride | Metode konfigurasi pembangun klien: endpoint(...) | 
| Variabel lingkungan: AWS\$1EC2\$1METADATA\$1SERVICE\$1ENDPOINT | Properti sistem: aws.ec2MetadataServiceEndpoint | 
| Nilai Default: http://169.254.169.254 | File konfigurasi: \$1.aws/config dengan pengaturan ec2\$1metadata\$1service\$1endpoint | 
|  | Nilai yang terkait dengan diselesaikan endpoint-mode  | 
|  | Nilai default: http://169.254.169.254 | 

### Resolusi titik akhir di v2
<a name="migration-imds-behavior-endpoint-res2"></a>

Saat Anda secara eksplisit menetapkan titik akhir dengan menggunakan pembuat, nilai titik akhir tersebut diprioritaskan di atas semua pengaturan lainnya. Ketika kode berikut dijalankan, properti `aws.ec2MetadataServiceEndpoint` sistem dan `ec2_metadata_service_endpoint` pengaturan file konfigurasi diabaikan jika ada.

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

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

Dengan v2, Anda dapat menentukan mode titik akhir untuk mengonfigurasi klien metadata agar menggunakan nilai titik akhir default untuk atau. IPv4 IPv6 Mode titik akhir tidak tersedia untuk v1. Nilai default yang digunakan untuk IPv4 adalah `http://169.254.169.254` dan `http://[fd00:ec2::254]` untuk IPv6.

Tabel berikut menunjukkan berbagai cara yang dapat Anda atur mode endpoint dalam urutan prioritas menurun.


****  

|  |  | Kemungkinan nilai | 
| --- | --- | --- | 
| Metode konfigurasi pembangun klien: endpointMode(...) |  <pre>Ec2MetadataClient client = Ec2MetadataClient<br />  .builder()<br />  .endpointMode(EndpointMode.IPV4)<br />  .build();</pre>  | EndpointMode.IPV4, EndpointMode.IPV6 | 
| Properti sistem | aws.ec2MetadataServiceEndpointMode | IPv4, IPv6 (kasus tidak masalah) | 
| Berkas Config: \$1.aws/config | Setelan ec2\$1metadata\$1service\$1endpoint | IPv4, IPv6 (kasus tidak masalah) | 
| Tidak ditentukan dengan cara sebelumnya | IPv4 digunakan |  | 

#### Bagaimana SDK menyelesaikan `endpoint` atau di v2 `endpoint-mode`
<a name="migration-imds-behavior-endpoint-res2-which"></a>

1. SDK menggunakan nilai yang Anda tetapkan dalam kode pada pembuat klien dan mengabaikan pengaturan eksternal apa pun. Karena SDK melempar pengecualian jika keduanya `endpoint` dan `endpointMode` dipanggil pada pembuat klien, SDK menggunakan nilai titik akhir dari metode mana pun yang Anda gunakan.

1. Jika Anda tidak menetapkan nilai dalam kode, SDK melihat ke konfigurasi eksternal—pertama untuk properti sistem dan kemudian untuk pengaturan dalam file konfigurasi. 

   1. SDK pertama-tama memeriksa nilai titik akhir. Jika nilai ditemukan, itu digunakan. 

   1. Jika SDK masih belum menemukan nilai, SDK akan mencari pengaturan mode titik akhir.

1. Terakhir, jika SDK tidak menemukan pengaturan eksternal dan Anda belum mengonfigurasi klien metadata dalam kode, SDK menggunakan nilai. IPv4 `http://169.254.169.254`

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

Amazon EC2 mendefinisikan dua pendekatan untuk mengakses metadata instans:
+ Layanan Metadata Instance Versi 1 (IMDSv1) — Pendekatan permintaan/respons
+ Layanan Metadata Instance Versi 2 (IMDSv2) — Pendekatan berorientasi sesi

Tabel berikut membandingkan bagaimana Java SDKs bekerja dengan IMDS.


****  

| v1 | v2 | 
| --- | --- | 
| IMDSv2 digunakan secara default | Selalu menggunakan IMDSv2 | 
| Mencoba mengambil token sesi untuk setiap permintaan dan kembali IMDSv1 jika gagal mengambil token sesi | Menyimpan token sesi dalam cache internal yang digunakan kembali untuk beberapa permintaan | 

SDK for Java 2.x IMDSv2 hanya mendukung dan tidak kembali ke. IMDSv1

## Perbedaan konfigurasi
<a name="migration-imds-config-diffs"></a>

Tabel berikut mencantumkan opsi konfigurasi yang berbeda.


****  

| Konfigurasi | v1 | v2 | 
| --- | --- | --- | 
| Percobaan ulang | Konfigurasi tidak tersedia | Dapat dikonfigurasi melalui metode pembangun retryPolicy(...) | 
| HTTP | Batas waktu koneksi dapat dikonfigurasi melalui variabel AWS\$1METADATA\$1SERVICE\$1TIMEOUT lingkungan. Defaultnya adalah 1 detik. | Konfigurasi tersedia dengan meneruskan klien HTTP ke metode pembangunhttpClient(...). Batas waktu koneksi default untuk klien HTTP adalah 2 detik. | 

### Contoh konfigurasi HTTP v2
<a name="migration-imds-http-conf-v2-ex"></a>

Contoh berikut menunjukkan bagaimana Anda dapat mengkonfigurasi klien metadata. Contoh ini mengkonfigurasi batas waktu koneksi dan menggunakan klien HTTP Apache.

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

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