Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Bekerja dengan metadata instans Amazon EC2
Klien Java SDK untuk Layanan Metadata Instans Amazon EC2 (klien metadata) memungkinkan aplikasi Anda mengakses metadata pada instans EC2 lokal mereka. Klien metadata bekerja dengan instance lokal IMDSv2 (Instance Metadata Service v2) dan menggunakan permintaan berorientasi sesi.
Dua kelas klien tersedia di SDK. SinkronEc2MetadataClient
adalah untuk memblokir operasi, dan Ec2MetadataAsyncClient
Memulai
Untuk menggunakan klien metadata, tambahkan artefakimds
Maven ke proyek Anda. Anda juga membutuhkan kelas untukSdkHttpClient
(atauSdkAsyncHttpClient
untuk varian asinkron) pada classpath.
Berikut Maven XMLmenunjukkan potongan ketergantungan untuk menggunakan sinkron UrlConnectionHttpClient
<dependencyManagement> <dependencies> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>bom</artifactId> <version>
VERSION
</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>imds</artifactId> </dependency> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>url-connection-client</artifactId> </dependency> <!-- other dependencies --> </dependencies>
Cari repositori pusat Mavenbom
artefak.
Untuk menggunakan klien HTTP asynchronous, ganti potongan dependensi untukurl-connection-client
artefak. Misalnya, cuplikan berikut membawa NettyNioAsyncHttpClient
<dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>netty-nio-client</artifactId> </dependency>
Menggunakan klien metadata
Instantiate klien metadata
Anda dapat instantiate sebuah instance dari sinkronEc2MetadataClient
ketika hanya satu implementasiSdkHttpClient
antarmuka hadir pada classpath. Untuk melakukannya, panggilEc2MetadataClient#create()
metode statis seperti yang ditunjukkan dalam potongan berikut.
Ec2MetadataClient client = Ec2MetadataClient.create(); // 'Ec2MetadataAsyncClient#create' is the asynchronous version.
Jika aplikasi Anda memiliki beberapa implementasiSdkHttpClient
atauSdkHttpAsyncClient
antarmuka, Anda harus menentukan implementasi untuk metadata klien untuk digunakan seperti yang ditunjukkan padaKlien HTTP yang dapat dikonfigurasi bagian.
catatan
Untuk sebagian besar klien layanan, seperti Amazon S3, SDK for Java secara otomatis menambahkan implementasiSdkHttpClient
atauSdkHttpAsyncClient
antarmuka. Jika klien metadata Anda menggunakan implementasi yang sama, makaEc2MetadataClient#create()
akan bekerja. Jika Anda memerlukan implementasi yang berbeda, Anda harus menentukannya saat membuat klien metadata.
Kirim permintaan
Untuk mengambil metadata contoh, instantiateEC2MetadataClient
kelas dan memanggilget
metode dengan parameter path yang menentukan kategori metadata instance.
Contoh berikut mencetak nilai yang terkait denganami-id
kunci ke konsol.
Ec2MetadataClient client = Ec2MetadataClient.create(); Ec2MetadataResponse response = client.get("/latest/meta-data/ami-id"); System.out.println(response.asString()); client.close(); // Closes the internal resources used by the Ec2MetadataClient class.
Jika jalan tidak valid,get
metode ini akan melempar eksepsi.
Gunakan kembali instance klien yang sama untuk beberapa permintaan, tetapi hubungiclose
klien ketika tidak lagi diperlukan untuk melepaskan sumber daya. Setelah metode close dipanggil, instance klien tidak dapat digunakan lagi.
Mengurai Tanggapan
EC2 contoh metadata dapat output dalam format yang berbeda. Teks biasa dan JSON adalah format yang paling umum digunakan. Klien metadata menawarkan cara untuk bekerja dengan format tersebut.
Seperti contoh berikut menunjukkan, menggunakanasString
metode untuk mendapatkan data sebagai string Java. Anda juga dapat menggunakanasList
metode untuk memisahkan respons teks biasa yang mengembalikan beberapa baris.
Ec2MetadataClient client = Ec2MetadataClient.create(); Ec2MetadataResponse response = client.get("/latest/meta-data/"); String fullResponse = response.asString(); List<String> splits = response.asList();
Jika responsnya ada di JSON, gunakanEc2MetadataResponse#asDocument
metode ini untuk mengurai respons JSON menjadi instance Document
Document fullResponse = response.asDocument();
Pengecualian akan dilemparkan jika format metadata tidak dalam JSON. Jika respons berhasil diurai, Anda dapat menggunakan API dokumen
Konfigurasi klien metadata
Percobaan ulang
Anda dapat mengkonfigurasi klien metadata dengan mekanisme coba lagi. Jika Anda melakukannya, maka klien dapat secara otomatis mencoba kembali permintaan yang gagal karena alasan yang tidak terduga. Secara default, klien mencoba ulang tiga kali pada permintaan gagal dengan waktu backoff eksponensial antara upaya.
Jika kasus penggunaan Anda memerlukan mekanisme percobaan ulang yang berbeda, Anda dapat menyesuaikan klien menggunakanretryPolicy
metode pada pembangunnya. Misalnya, contoh berikut menunjukkan klien sinkron yang dikonfigurasi dengan penundaan tetap dua detik antara upaya dan lima upaya coba lagi.
BackoffStrategy fixedBackoffStrategy = FixedDelayBackoffStrategy.create(Duration.ofSeconds(2)); Ec2MetadataClient client = Ec2MetadataClient.builder() .retryPolicy(retryPolicyBuilder -> retryPolicyBuilder.numRetries(5) .backoffStrategy(fixedBackoffStrategy)) .build();
Ada beberapa BackoffStrategies
Anda juga dapat menonaktifkan mekanisme percobaan ulang sepenuhnya, seperti yang ditunjukkan cuplikan berikut.
Ec2MetadataClient client = Ec2MetadataClient.builder() .retryPolicy(Ec2MetadataRetryPolicy.none()) .build();
MenggunakanEc2MetadataRetryPolicy#none()
menonaktifkan kebijakan coba ulang default sehingga klien metadata mencoba tidak ada percobaan ulang.
Versi IP
Secara default, klien metadata menggunakan titik akhir IPV4 dihttp://169.254.169.254
. Untuk mengubah klien untuk menggunakan versi IPV6, gunakan salah satuendpointMode
atauendpoint
metode pembangun. Hasil pengecualian jika kedua metode dipanggil pada pembangun.
Contoh berikut ini menunjukkan kedua opsi IPV6.
Ec2MetadataClient client = Ec2MetadataClient.builder() .endpointMode(EndpointMode.IPV6) .build();
Ec2MetadataClient client = Ec2MetadataClient.builder() .endpoint(URI.create("http://[fd00:ec2::254]")) .build();
Fitur kunci
Klien asinkron
Untuk menggunakan versi non-blocking klien, instantiate instance dariEc2MetadataAsyncClient
kelas. Kode dalam contoh berikut membuat klien asynchronous dengan pengaturan default dan menggunakanget
metode untuk mengambil nilai untukami-id
kunci.
Ec2MetadataAsyncClient asyncClient = Ec2MetadataAsyncClient.create(); CompletableFuture<Ec2MetadataResponse> response = asyncClient.get("/latest/meta-data/ami-id");
Yangjava.util.concurrent.CompletableFuture
dikembalikan olehget
metode selesai ketika respon kembali. Contoh berikut mencetakami-id
metadata ke konsol.
response.thenAccept(metadata -> System.out.println(metadata.asString()));
Klien HTTP yang dapat dikonfigurasi
Pembangun untuk setiap klien metadata memilikihttpClient
metode yang dapat Anda gunakan untuk memasok klien HTTP yang disesuaikan.
Contoh berikut menunjukkan kode untukUrlConnectionHttpClient
contoh kustom.
SdkHttpClient httpClient = UrlConnectionHttpClient.builder() .socketTimeout(Duration.ofMinutes(5)) .proxyConfiguration(proxy -> proxy.endpoint(URI.create("http://proxy.example.net:8888")))) .build(); Ec2MetadataClient metaDataClient = Ec2MetadataClient.builder() .httpClient(httpClient) .build(); // Use the metaDataClient instance. metaDataClient.close(); // Close the instance when no longer needed.
Contoh berikut menunjukkan kode untukNettyNioAsyncHttpClient
instance kustom dengan klien metadata asinkron.
SdkAsyncHttpClient httpAsyncClient = NettyNioAsyncHttpClient.builder() .connectionTimeout(Duration.ofMinutes(5)) .maxConcurrency(100) .build(); Ec2MetadataAsyncClient asyncMetaDataClient = Ec2MetadataAsyncClient.builder() .httpClient(httpAsyncClient) .build(); // Use the asyncMetaDataClient instance. asyncMetaDataClient.close(); // Close the instance when no longer needed.
HTTPklienTopik dalam panduan ini memberikan rincian tentang cara mengkonfigurasi klien HTTP yang tersedia di SDK for Java.
Caching Token
Karena klien metadata menggunakan IMDSv2, semua permintaan dikaitkan dengan sesi. Sesi didefinisikan oleh token yang memiliki kedaluwarsa, yang dikelola klien metadata untuk Anda. Setiap permintaan metadata secara otomatis menggunakan kembali token hingga kedaluwarsa.
Secara default-nya, token berlangsung selama enam jam (21.600 detik). Kami sarankan Anda menyimpan time-to-live default-nya, kecuali kasus penggunaan spesifik Anda memerlukan konfigurasi lanjutan.
Jika diperlukan, konfigurasikan durasi dengan menggunakan metodetokenTtl
pembangun. Misalnya, kode dalam cuplikan berikut membuat klien dengan durasi sesi lima menit.
Ec2MetadataClient client = Ec2MetadataClient.builder() .tokenTtl(Duration.ofMinutes(5)) .build();
Jika Anda menghilangkan panggilantokenTtl
metode pada builder, durasi default 21.600 digunakan sebagai gantinya.