Setiap virtual machine (VM) menyimpan metadata-nya di direktori pada server metadata. VM Anda otomatis memiliki akses ke API server metadata ini tanpa otorisasi tambahan. Anda dapat menggunakan metode yang dijelaskan di bagian dokumen berikut ini untuk melihat dan membuat kueri nilai metadata VM:
Sebelum memulai
- Untuk VM Windows Server, gunakan PowerShell 3.0 atau yang lebih baru.
Sebaiknya gunakan
ctrl+v
untuk menempelkan blok kode yang disalin. - Tinjau dasar-dasar cara metadata VM untuk Compute Engine ditentukan, dikategorikan, dan diatur. Untuk mengetahui informasi lebih lanjut, baca artikel Tentang metadata VM.
-
Siapkan autentikasi, jika Anda belum melakukannya.
Autentikasi adalah proses verifikasi identitas Anda untuk akses ke layanan dan API Google Cloud.
Untuk menjalankan kode atau contoh dari lingkungan pengembangan lokal, Anda dapat melakukan autentikasi ke Compute Engine sebagai berikut.
Pilih tab untuk melihat bagaimana Anda berencana menggunakan contoh di halaman ini:
Konsol
Saat menggunakan Konsol Google Cloud untuk mengakses API dan layanan Google Cloud, Anda tidak perlu menyiapkan autentikasi.
gcloud
-
Instal Google Cloud CLI, lalu initialize dengan menjalankan perintah berikut:
gcloud init
- Menetapkan region dan zona default.
Python
Untuk menggunakan contoh Python di halaman ini dari lingkungan pengembangan lokal, instal dan lakukan inisialisasi gcloud CLI, lalu siapkan Kredensial Default Aplikasi dengan kredensial pengguna Anda.
- Menginstal Google Cloud CLI.
-
Untuk initialize gcloud CLI, jalankan perintah berikut:
gcloud init
-
Buat kredensial autentikasi lokal untuk Akun Google Anda:
gcloud auth application-default login
Untuk informasi selengkapnya, lihat Siapkan autentikasi untuk lingkungan pengembangan lokal.
REST
Untuk menggunakan contoh REST API di halaman ini dalam lingkungan pengembangan lokal, gunakan kredensial yang Anda berikan ke gcloud CLI.
Instal Google Cloud CLI, lalu initialize dengan menjalankan perintah berikut:
gcloud init
-
Peran yang diperlukan
Peran dan izin berikut diperlukan untuk melihat metadata kustom dari luar VM dengan menggunakan Konsol Google Cloud, Google Cloud CLI, atau REST. Jika Anda membuat kueri metadata secara terprogram dari dalam VM, Anda hanya memerlukan peran dan izin untuk terhubung ke VM.
Untuk mendapatkan izin yang diperlukan untuk melihat metadata kustom dari luar VM, minta administrator untuk memberi Anda peran IAM berikut:
-
Compute Instance Admin (v1) (
roles/compute.instanceAdmin.v1
) di VM atau project -
Jika VM Anda menggunakan akun layanan:
Service Account User (
roles/iam.serviceAccountUser
) pada akun layanan atau project
Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Mengelola akses.
Peran yang telah ditetapkan ini berisi izin yang diperlukan untuk melihat metadata kustom dari luar VM. Untuk melihat izin yang benar-benar diperlukan, perluas bagian Izin yang diperlukan:
Izin yang diperlukan
Izin berikut diperlukan untuk melihat metadata kustom dari luar VM:
-
Untuk melihat metadata kustom tingkat project:
compute.projects.get
-
Untuk melihat metadata zona project kustom:
compute.instanceSettings.get
-
Untuk melihat metadata kustom untuk instance VM:
compute.instances.get
-
Jika VM Anda menggunakan akun layanan:
iam.serviceAccounts.actAs
Anda mung juga bisa mendapatkan izin ini dengan peran khusus atau peran bawaanlainnya.
Mengkueri metadata secara terprogram
Dari dalam VM, Anda dapat mengkueri nilai metadata default atau kustom
secara terprogram menggunakan alat seperti alat curl
di Linux atau Invoke-RestMethod
di Windows.
Bagian dari permintaan metadata
Tabel berikut merangkum bagian-bagian utama permintaan kueri metadata.
Komponen | Deskripsi |
---|---|
URL root | Semua nilai metadata didefinisikan sebagai sub-jalur di bawah URL root berikut:
|
Header permintaan |
Header ini menunjukkan bahwa permintaan dikirim dengan tujuan mengambil nilai metadata, bukan secara tidak sengaja dari sumber yang tidak aman, dan memungkinkan server metadata menampilkan data yang Anda minta. Jika Anda tidak memberikan header ini, server metadata akan menolak permintaan Anda. Metadata-Flavor: Google |
Mengkueri satu entri metadata
Gunakan perintah berikut untuk membuat kueri entri metadata tunggal.
Linux
- Hubungkan ke VM Linux Anda.
Dari VM Linux, gunakan alat
curl
untuk membuat kueri.Untuk membuat kueri entri metadata instance VM, jalankan perintah berikut:
curl "http://metadata.google.internal/computeMetadata/v1/instance/METADATA_KEY" -H "Metadata-Flavor: Google"
Untuk membuat kueri entri metadata project, jalankan perintah berikut:
curl "http://metadata.google.internal/computeMetadata/v1/project/METADATA_KEY" -H "Metadata-Flavor: Google"
Ganti
METADATA_KEY
dengan kunci metadata instance atau project yang ingin Anda kueri nilainya.Misalnya, untuk mengkueri boot image untuk VM, jalankan kueri berikut:
user@myinst:~$ curl "http://metadata.google.internal/computeMetadata/v1/instance/image" -H "Metadata-Flavor: Google"
Outputnya mirip dengan hal berikut ini:
projects/rhel-cloud/global/images/rhel-8-v20210122
Windows
- Hubungkan ke VM Windows Anda.
Dari VM Windows, gunakan perintah
Invoke-RestMethod
untuk membuat kueri.Untuk membuat kueri entri metadata instance VM, jalankan perintah berikut:
$value = (Invoke-RestMethod ` -Headers @{'Metadata-Flavor' = 'Google'} ` -Uri "http://metadata.google.internal/computeMetadata/v1/instance/METADATA_KEY") $value
Untuk membuat kueri entri metadata project, jalankan perintah berikut:
$value = (Invoke-RestMethod ` -Headers @{'Metadata-Flavor' = 'Google'} ` -Uri "http://metadata.google.internal/computeMetadata/v1/project/METADATA_KEY") $value
Ganti
METADATA_KEY
dengan kunci metadata instance atau project yang ingin Anda kueri nilainya.Misalnya, untuk mengkueri boot image untuk VM, jalankan kueri berikut:
PS C:\> $value = (Invoke-RestMethod ` -Headers @{'Metadata-Flavor' = 'Google'} ` -Uri "http://metadata.google.internal/computeMetadata/v1/instance/image") $value
Outputnya mirip dengan hal berikut ini:
projects/windows-cloud/global/images/windows-server-2019-dc-v20210112
Mengkueri listingan direktori metadata
Gunakan perintah berikut untuk membuat kueri listingan direktori metadata. Listingan direktori adalah entri metadata yang berisi kunci metadata lainnya. Setiap entri metadata yang diakhiri dengan garis miring adalah daftar direktori
Linux
Hubungkan ke VM Linux Anda.
Dari VM Linux, jalankan perintah berikut:
Untuk membuat kueri direktori metadata instance VM, jalankan perintah berikut:
curl "http://metadata.google.internal/computeMetadata/v1/instance/METADATA_DIRECTORY_NAME/" -H "Metadata-Flavor: Google"
Untuk membuat kueri direktori metadata project, jalankan perintah berikut:
curl "http://metadata.google.internal/computeMetadata/v1/project/METADATA_DIRECTORY_NAME/" -H "Metadata-Flavor: Google"
Ganti
METADATA_DIRECTORY_NAME
dengan nama direktori metadata project atau instance yang ingin Anda buat kueri listingannya.Misalnya, pertimbangkan entri
disks/
, yang merupakan direktori disk yang terpasang pada VM. Untuk membuat kueri entridisks/
, selesaikan langkah-langkah berikut:Jalankan perintah alat
curl
di direktori disk.user@myinst:~$ curl "http://metadata.google.internal/computeMetadata/v1/instance/disks/" -H "Metadata-Flavor: Google"
Outputnya mirip dengan hal berikut ini:
0/ 1/ 2/
Jika ingin mengetahui informasi lebih lanjut tentang direktori
0/
disk, Anda dapat mengkueri URL khusus untuk direktori tersebut:user@myinst:~$ curl "http://metadata.google.internal/computeMetadata/v1/instance/disks/0/" -H "Metadata-Flavor: Google"
Outputnya mirip dengan hal berikut ini:
device-name index mode type
Kemudian, untuk mengkueri jenis disk (
type
) untuk disk0/
, Anda dapat menjalankan perintah berikut:user@myinst:~$ curl "http://metadata.google.internal/computeMetadata/v1/instance/disks/0/type" -H "Metadata-Flavor: Google"
Outputnya mirip dengan hal berikut ini:
PERSISTENT
Windows
Entri disks/
adalah direktori disk yang terpasang pada VM.
Untuk mengkueri entri disk, selesaikan langkah-langkah berikut:
Hubungkan ke VM Windows Anda.
Dari VM Windows Anda, jalankan perintah berikut:
Untuk membuat kueri direktori metadata instance VM, jalankan perintah berikut:
$value = (Invoke-RestMethod ` -Headers @{'Metadata-Flavor' = 'Google'} ` -Uri "http://metadata.google.internal/computeMetadata/v1/instance/METADATA_DIRECTORY_NAME/") $value
Untuk membuat kueri direktori metadata project, jalankan perintah berikut:
$value = (Invoke-RestMethod ` -Headers @{'Metadata-Flavor' = 'Google'} ` -Uri "http://metadata.google.internal/computeMetadata/v1/project/METADATA_DIRECTORY_NAME/") $value
Ganti
METADATA_DIRECTORY_NAME
dengan nama direktori metadata project atau instance yang ingin Anda buat kueri listingannya.Misalnya, pertimbangkan entri
disks/
, yang merupakan direktori disk yang terpasang pada VM. Untuk membuat kueri entridisks/
, selesaikan langkah-langkah berikut:Gunakan perintah
Invoke-RestMethod
pada direktori disk.PS C:\> $value = (Invoke-RestMethod ` -Headers @{'Metadata-Flavor' = 'Google'} ` -Uri "http://metadata.google.internal/computeMetadata/v1/instance/disks/") $value
Outputnya mirip dengan hal berikut ini:
0/ 1/ 2/
Jika ingin mengetahui informasi lebih lanjut tentang direktori
0/
disk, Anda dapat mengkueri URL khusus untuk direktori tersebut:PS C:\> $value = (Invoke-RestMethod ` -Headers @{'Metadata-Flavor' = 'Google'} ` -Uri "http://metadata.google.internal/computeMetadata/v1/instance/disks/0/") $value
Outputnya mirip dengan hal berikut ini:
device-name index mode type
Kemudian, untuk mengkueri jenis disk (
type
) untuk disk0/
, Anda dapat menjalankan perintah berikut:PS C:\> $value = (Invoke-RestMethod ` -Headers @{'Metadata-Flavor' = 'Google'} ` -Uri "http://metadata.google.internal/computeMetadata/v1/instance/disks/0/type") $value
Outputnya mirip dengan yang berikut ini:
PERSISTENT
Mengkueri listingan direktori secara berulang
Jika Anda ingin menampilkan semua konten dalam direktori, gunakan parameter kueri recursive=true
dengan permintaan Anda:
Linux
Hubungkan ke VM Linux Anda.
Dari VM Linux, gunakan alat
curl
untuk membuat kueri.Untuk membuat kueri listingan secara berulang untuk direktori metadata instance VM, jalankan perintah berikut:
curl "http://metadata.google.internal/computeMetadata/v1/instance/METADATA_DIRECTORY_NAME/?recursive=true" -H "Metadata-Flavor: Google"
Untuk membuat kueri listingan secara berulang untuk direktori metadata project, jalankan perintah berikut:
curl "http://metadata.google.internal/computeMetadata/v1/project/METADATA_DIRECTORY_NAME/?recursive=true" -H "Metadata-Flavor: Google"
Ganti
METADATA_DIRECTORY_NAME
dengan nama direktori metadata atau project yang ingin Anda kueri listingan secara rekursif.Misalnya, perintah berikut secara berulang mengkueri listingan metadata instance untuk direktori
disks/
.user@myinst:~$ curl "http://metadata.google.internal/computeMetadata/v1/instance/disks/?recursive=true" -H "Metadata-Flavor: Google"
Outputnya mirip dengan hal berikut ini:
[{"deviceName":"boot","index":0,"mode":"READ_WRITE","type":"PERSISTENT"}, {"deviceName":"persistent-disk-1","index":1,"mode":"READ_WRITE","type":"PERSISTENT"}, {"deviceName":"persistent-disk-2","index":2,"mode":"READ_ONLY","type":"PERSISTENT"}]
Secara default, konten rekursif ditampilkan dalam format JSON. Jika Anda ingin menampilkan konten ini dalam format teks, tambahkan parameter kueri
alt=text
:user@myinst:~$ curl "http://metadata.google.internal/computeMetadata/v1/instance/disks/?recursive=true&alt=text" -H "Metadata-Flavor: Google"
Outputnya mirip dengan hal berikut ini:
0/device-name boot 0/index 0 0/mode READ_WRITE 0/type PERSISTENT 1/device-name persistent-disk-1 1/index 1 1/mode READ_WRITE 1/type PERSISTENT 2/device-name persistent-disk-1 2/index 2 2/mode READ_ONLY 2/type PERSISTENT
Windows
Hubungkan ke VM Windows Anda.
Dari VM Windows, gunakan perintah
Invoke-RestMethod
untuk membuat kueri.Untuk membuat kueri listingan secara berulang untuk direktori metadata instance VM, jalankan perintah berikut:
$value = (Invoke-RestMethod ` -Headers @{'Metadata-Flavor' = 'Google'} ` -Uri "http://metadata.google.internal/computeMetadata/v1/instance/METADATA_DIRECTORY_NAME/?recursive=true") $value
Untuk membuat kueri listingan secara berulang untuk direktori metadata project, jalankan perintah berikut:
$value = (Invoke-RestMethod ` -Headers @{'Metadata-Flavor' = 'Google'} ` -Uri "http://metadata.google.internal/computeMetadata/v1/project/METADATA_DIRECTORY_NAME/?recursive=true") $value
Ganti
METADATA_DIRECTORY_NAME
dengan nama direktori metadata atau project yang ingin Anda kueri listingan secara rekursif.Misalnya, perintah berikut secara berulang mengkueri listingan metadata instance untuk direktori
disks/
.PS C:\> $value = (Invoke-RestMethod ` -Headers @{'Metadata-Flavor' = 'Google'} ` -Uri "http://metadata.google.internal/computeMetadata/v1/instance/disks/?recursive=true") $value
Outputnya mirip dengan hal berikut ini:
[{"deviceName":"boot","index":0,"mode":"READ_WRITE","type":"PERSISTENT"}, {"deviceName":"persistent-disk-1","index":1,"mode":"READ_WRITE","type":"PERSISTENT"}, {"deviceName":"persistent-disk-2","index":2,"mode":"READ_ONLY","type":"PERSISTENT"}]
Secara default, konten rekursif ditampilkan dalam format JSON. Jika Anda ingin menampilkan konten ini dalam format teks, tambahkan parameter kueri
alt=text
:PS C:\> $value = (Invoke-RestMethod ` -Headers @{'Metadata-Flavor' = 'Google'} ` -Uri "http://metadata.google.internal/computeMetadata/v1/instance/disks/?recursive=true&alt=text") $value
Outputnya mirip dengan hal berikut ini:
0/device-name boot 0/index 0 0/mode READ_WRITE 0/type PERSISTENT 1/device-name persistent-disk-1 1/index 1 1/mode READ_WRITE 1/type PERSISTENT 2/device-name persistent-disk-1 2/index 2 2/mode READ_ONLY 2/type PERSISTENT
Memformat output kueri
Secara default, setiap endpoint memiliki format respons yang telah ditentukan. Beberapa endpoint mungkin menampilkan data dalam format JSON secara default, sementara endpoint lainnya mungkin menampilkan data sebagai string. Anda dapat mengganti spesifikasi format data default menggunakan parameter kueri alt=json
atau alt=text
, yang masing-masing menampilkan data dalam format string JSON atau sebagai representasi teks biasa.
Linux
- Hubungkan ke VM Linux Anda.
Dari VM Linux, gunakan alat
curl
untuk membuat kueri.Untuk mengubah format data respons kueri untuk entri metadata instance VM, jalankan perintah berikut:
curl "http://metadata.google.internal/computeMetadata/v1/instance/METADATA_KEY?alt=DATA_FORMAT" -H "Metadata-Flavor: Google"
Untuk mengubah format data respons kueri untuk entri metadata project, jalankan perintah berikut:
curl "http://metadata.google.internal/computeMetadata/v1/project/METADATA_KEY?alt=DATA_FORMAT" -H "Metadata-Flavor: Google"
Ganti kode berikut:
METADATA_KEY
: kunci metadata instance atau project yang ingin Anda kueri nilainya.DATA_FORMAT
: format yang Anda inginkan dengan data respons kueri—misalnya,text
ataujson
.
Contoh
Misalnya, kunci tags
otomatis menampilkan data dalam format JSON. Sebagai gantinya, Anda dapat menampilkan data dalam format teks, dengan menentukan parameter kueri alt=text
.
Kueri default
user@myinst:~$ curl "http://metadata.google.internal/computeMetadata/v1/instance/tags" -H "Metadata-Flavor: Google"
Outputnya mirip dengan yang berikut ini:
["http-server", "db-client", "app-server", "mysql-server"]
Kueri dengan pemformatan
user@myinst:~$ curl "http://metadata.google.internal/computeMetadata/v1/instance/tags?alt=text" -H "Metadata-Flavor: Google"
Outputnya mirip dengan hal berikut ini:
http-server db-client app-server mysql-server
Windows
- Hubungkan ke VM Windows Anda.
Dari VM Windows, gunakan perintah
Invoke-RestMethod
untuk membuat kueri.Untuk mengubah format data respons kueri untuk entri metadata instance VM, jalankan perintah berikut:
$value = (Invoke-RestMethod ` -Headers @{'Metadata-Flavor' = 'Google'} ` -Uri "http://metadata.google.internal/computeMetadata/v1/instance/METADATA_KEY?alt=DATA_FORMAT") $value
Untuk mengubah format data respons kueri untuk entri metadata project, jalankan perintah berikut:
$value = (Invoke-RestMethod ` -Headers @{'Metadata-Flavor' = 'Google'} ` -Uri "http://metadata.google.internal/computeMetadata/v1/project/METADATA_KEY?alt=DATA_FORMAT") $value
Ganti kode berikut:
METADATA_KEY
: kunci metadata instance atau project yang ingin Anda kueri nilainya.DATA_FORMAT
: format yang Anda inginkan dengan data respons kueri—misalnya,text
ataujson
.
Contoh
Misalnya, kunci tags
otomatis menampilkan data dalam format JSON. Sebagai gantinya, Anda dapat menampilkan data dalam format teks, dengan menentukan parameter kueri alt=text
.
Kueri default
PS C:>
$value = (Invoke-RestMethod -Headers @{'Metadata-Flavor' = 'Google'}
-Uri "http://metadata.google.internal/computeMetadata/v1/instance/tags")
$value
Outputnya mirip dengan yang berikut ini:
["http-server", "db-client", "app-server", "mysql-server"]
Kueri dengan pemformatan
PS C:>
$value = (Invoke-RestMethod -Headers @{'Metadata-Flavor' = 'Google'}
-Uri "http://metadata.google.internal/computeMetadata/v1/instance/tags?alt=text")
$value
Outputnya mirip dengan hal berikut ini:
http-server db-client app-server mysql-server
Mengkueri perubahan metadata menggunakan fitur wait-for-change
Mengingat bahwa nilai metadata dapat berubah saat VM berjalan, server metadata dapat diberi tahu tentang perubahan metadata menggunakan fitur wait-for-change
. Dengan opsi ini, permintaan hanya menampilkan
output saat metadata yang Anda tentukan telah berubah.
Anda dapat menggunakan fitur ini pada metadata kustom atau metadata yang ditentukan server. Jadi, jika ada perubahan pada VM atau project Anda, atau jika seseorang memperbarui entri metadata kustom, Anda dapat bereaksi secara terprogram terhadap perubahan tersebut.
Misalnya, Anda dapat membuat
permintaan pada kunci tags
sehingga permintaan hanya ditampilkan jika konten
metadata tag telah berubah. Saat ditampilkan, permintaan akan memberikan nilai baru
dari kunci metadata tersebut.
Fitur wait-for-change
juga memungkinkan Anda mencocokkan permintaan dan
menyetel waktu tunggu.
Saat menggunakan fitur wait-for-change
, pertimbangkan hal berikut:
Anda hanya dapat melakukan permintaan
wait-for-change
di endpoint metadata atau secara berulang pada konten direktori. Anda tidak dapat melakukan permintaanwait-for-change
pada listingan direktori. Jika Anda mencoba melakukannya, server metadata akan menggagalkan permintaan Anda dan menampilkan error 400 Invalid Request.Anda tidak dapat membuat permintaan
wait-for-change
untuk token akun layanan. Jika Anda mencoba membuat permintaanwait-for-change
ke URL token akun layanan, permintaan akan langsung gagal dan menampilkan error 400 Invalid Request.
Untuk membuat permintaan wait-for-change
, buat kueri kunci metadata dan tambahkan parameter kueri ?wait_for_change=true
:
Linux
- Hubungkan ke VM Linux Anda.
Dari VM Linux, gunakan alat
curl
untuk membuat kueri.Untuk membuat permintaan
wait-for-change
bagi entri metadata instance VM, jalankan perintah berikut:curl "http://metadata.google.internal/computeMetadata/v1/instance/METADATA_KEY?wait_for_change=true" -H "Metadata-Flavor: Google"
Untuk membuat permintaan
wait-for-change
bagi entri metadata project, jalankan perintah berikut:curl "http://metadata.google.internal/computeMetadata/v1/project/METADATA_KEY" -H "Metadata-Flavor: Google"
Ganti
METADATA_KEY
dengan kunci metadata instance atau project yang ingin Anda kueri nilainya.Setelah ada perubahan pada kunci metadata yang ditentukan, kueri akan ditampilkan dengan nilai baru.
Contoh
Dalam contoh ini, jika permintaan dibuat ke setInstanceTags method
, permintaan akan ditampilkan dengan nilai baru:
user@myinst:~$ curl "http://metadata.google.internal/computeMetadata/v1/instance/tags?wait_for_change=true" -H "Metadata-Flavor: Google"
Outputnya mirip dengan hal berikut ini:
http-server db-client
Anda juga dapat melakukan permintaan wait-for-change
secara berulang pada
konten direktori:
user@myinst:~$ curl "http://metadata.google.internal/computeMetadata/v1/instance/attributes/?recursive=true&wait_for_change=true" -H "Metadata-Flavor: Google"
Server metadata menampilkan konten baru jika ada perubahan:
{"foo":"bar","baz":"bat"}
Windows
- Hubungkan ke VM Windows Anda.
Dari VM Windows, gunakan perintah
Invoke-RestMethod
untuk membuat kueri.PS C:> $value = (Invoke-RestMethod
-Headers @{'Metadata-Flavor' = 'Google'}
-Uri "http://metadata.google.internal/computeMetadata/v1/METADATA_KEY?wait_for_change=true") $valueUntuk membuat permintaan
wait-for-change
bagi entri metadata instance VM, jalankan perintah berikut:$value = (Invoke-RestMethod ` -Headers @{'Metadata-Flavor' = 'Google'} ` -Uri "http://metadata.google.internal/computeMetadata/v1/instance/METADATA_KEY?wait_for_change=true") $value
Untuk membuat permintaan
wait-for-change
bagi entri metadata project, jalankan perintah berikut:$value = (Invoke-RestMethod ` -Headers @{'Metadata-Flavor' = 'Google'} ` -Uri "http://metadata.google.internal/computeMetadata/v1/project/METADATA_KEY?wait_for_change=true") $value
Ganti
METADATA_KEY
dengan kunci metadata instance atau project yang ingin Anda lakukan permintaanwait-for-change
.Setelah ada perubahan pada kunci metadata yang ditentukan, kueri akan ditampilkan dengan nilai baru.
Contoh
Setelah ada perubahan pada kunci metadata yang ditentukan, kueri akan ditampilkan dengan nilai baru. Dalam contoh ini, jika permintaan dibuat ke setInstanceTags method
, permintaan tersebut akan ditampilkan dengan nilai baru:
PS C:>
$value = (Invoke-RestMethod -Headers @{'Metadata-Flavor' = 'Google'}
-Uri "http://metadata.google.internal/computeMetadata/v1/instance/tags?wait_for_change=true")
$value
Outputnya mirip dengan hal berikut ini:
http-server db-client
Anda juga dapat melakukan permintaan wait-for-change
secara berulang pada konten
direktori:
PS C:>
$value = (Invoke-RestMethod -Headers @{'Metadata-Flavor' = 'Google'}
-Uri "http://metadata.google.internal/computeMetadata/v1/instance/attributes?recursive=true&wait_for_change=true")
$value
Server metadata menampilkan konten baru jika ada perubahan:
{"foo":"bar","baz":"bat"}
Menggunakan ETag
Saat Anda mengirimkan kueri wait-for-change
sederhana, server metadata akan menampilkan respons jika ada sesuatu yang berubah dalam konten metadata tersebut. Namun,
ada kondisi race yang melekat antara update metadata dan
permintaan wait-for-change
yang dikeluarkan, jadi sebaiknya miliki cara yang andal untuk mengetahui
bahwa Anda mendapatkan nilai metadata terbaru.
Untuk mengatasinya, Anda bisa menggunakan parameter kueri last_etag
yang membandingkan nilai ETag yang Anda berikan dengan nilai ETag yang disimpan di server metadata. Jika nilai ETag sesuai, permintaan wait-for-change
akan diterima. Jika nilai ETag tidak sesuai, hal ini menunjukkan bahwa konten metadata telah berubah sejak terakhir kali Anda mengambil nilai ETag, dan server metadata akan segera ditampilkan dengan nilai terbaru ini.
VM Linux
Guna mendapatkan nilai ETag saat ini untuk kunci metadata, selesaikan langkah-langkah berikut:
- Hubungkan ke VM Linux Anda.
Buat permintaan ke kunci tersebut, lalu cetak header-nya. Untuk melakukannya, gunakan alat
curl
dengan flag-v
:Guna mendapatkan ETag saat ini untuk entri metadata instance VM, jalankan perintah berikut:
curl -v "http://metadata.google.internal/computeMetadata/v1/instance/METADATA_KEY" -H "Metadata-Flavor: Google"
Guna mendapatkan ETag saat ini untuk entri metadata project, jalankan perintah berikut:
curl -v "http://metadata.google.internal/computeMetadata/v1/project/METADATA_KEY" -H "Metadata-Flavor: Google"
Ganti
METADATA_KEY
dengan kunci metadata instance atau project yang ingin Anda kueri nilainya.Sebagai contoh, perintah berikut akan mendapatkan nilai ETag saat ini untuk kunci metadata instance
tags
.user@myinst:~$ curl -v "http://metadata.google.internal/computeMetadata/v1/instance/tags" -H "Metadata-Flavor: Google"
Outputnya mirip dengan hal berikut ini:
* About to connect() to metadata port 80 (#0) * Trying 169.254.169.254... connected * Connected to metadata (169.254.169.254) port 80 (#0) > GET /computeMetadata/v1/instance/tags HTTP/1.1 > User-Agent: curl/7.19.7 (x86_64-pc-linux-gnu) libcurl/7.19.7 OpenSSL/0.9.8k zlib/1.2.3.3 libidn/1.15 > Host: metadata > Accept: */* > < HTTP/1.1 200 OK < Content-Type: application/text < ETag: 411261ca6c9e654e < Date: Wed, 13 Feb 2013 22:43:45 GMT < Server: Metadata Server for VM < Content-Length: 26 < X-XSS-Protection: 1; mode=block < X-Frame-Options: SAMEORIGIN < http-server db-client
Anda kemudian dapat menggunakan nilai ETag tersebut dengan perintah alat
curl
dalam permintaanwait-for-change
:Untuk menggunakan nilai ETag untuk permintaan
wait-for-change
metadata instance, jalankan perintah berikut:curl "http://metadata.google.internal/computeMetadata/v1/instance/METADATA_KEY?wait_for_change=true&last_etag=ETAG" -H "Metadata-Flavor: Google"
Agar dapat menggunakan nilai ETag untuk permintaan
wait-for-change
metadata project, jalankan perintah berikut:curl "http://metadata.google.internal/computeMetadata/v1/project/METADATA_KEY?wait_for_change=true&last_etag=ETAG" -H "Metadata-Flavor: Google"
Ganti kode berikut:
METADATA_KEY
: kunci metadata instance atau project yang ingin Anda kueri nilainya.ETAG
: nilai ETag untuk kunci metadata.
Dalam contoh ini, perintah berikut menggunakan nilai ETag untuk kunci
tags
dan kueri untuk entri metadata instance.user@myinst:~$ curl "http://metadata.google.internal/computeMetadata/v1/instance/tags?wait_for_change=true&last_etag=411261ca6c9e654e" -H "Metadata-Flavor: Google"
Server metadata sesuai dengan nilai ETag yang ditentukan. Jika nilai tersebut berubah, permintaan akan ditampilkan dengan konten baru kunci metadata Anda.
VM Windows
Guna mendapatkan nilai ETag saat ini untuk kunci metadata, selesaikan langkah-langkah berikut:
- Hubungkan ke VM Windows Anda.
Buat permintaan ke kunci tersebut, lalu cetak header-nya. Pada Windows, gunakan perintah
Invoke-WebRequest
.Guna mendapatkan ETag saat ini untuk entri metadata instance VM, jalankan perintah berikut:
$value = (Invoke-WebRequest -Headers @{'Metadata-Flavor' = 'Google'} ` -Uri http://metadata.google.internal/computeMetadata/v1/instance/METADATA_KEY) $value.Headers.ETag
Guna mendapatkan ETag saat ini untuk entri metadata project, jalankan perintah berikut:
$value = (Invoke-WebRequest -Headers @{'Metadata-Flavor' = 'Google'} ` -Uri http://metadata.google.internal/computeMetadata/v1/project/METADATA_KEY) $value.Headers.ETag
Ganti
METADATA_KEY
dengan kunci metadata instance atau project yang ingin Anda kueri nilainya.Sebagai contoh, perintah berikut akan mendapatkan nilai ETag saat ini untuk kunci metadata instance
tags
.PS C:> $value = (Invoke-WebRequest -Headers @{'Metadata-Flavor' = 'Google'} ` -Uri http://metadata.google.internal/computeMetadata/v1/instance/tags)
$value.Headers.ETag
Outputnya mirip dengan hal berikut ini:
* About to connect() to metadata port 80 (#0) * Trying 169.254.169.254... connected * Connected to metadata (169.254.169.254) port 80 (#0) > GET /computeMetadata/v1/instance/tags HTTP/1.1 > User-Agent: curl/7.19.7 (x86_64-pc-linux-gnu) libcurl/7.19.7 OpenSSL/0.9.8k zlib/1.2.3.3 libidn/1.15 > Host: metadata > Accept: / > < HTTP/1.1 200 OK < Content-Type: application/text < ETag: 411261ca6c9e654e < Date: Wed, 13 Feb 2013 22:43:45 GMT < Server: Metadata Server for VM < Content-Length: 26 < X-XSS-Protection: 1; mode=block < X-Frame-Options: SAMEORIGIN < http-server db-client
Anda kemudian bisa menggunakan nilai ETag tersebut dalam permintaan
wait-for-change
:Untuk menggunakan nilai ETag untuk permintaan
wait-for-change
metadata instance, jalankan perintah berikut:$value = (Invoke-RestMethod ` -Headers @{'Metadata-Flavor' = 'Google'} ` -Uri "http://metadata.google.internal/computeMetadata/v1/instance/METADATA_KEY?wait_for_change=true&last_etag=ETAG") $value
Agar dapat menggunakan nilai ETag untuk permintaan
wait-for-change
metadata project, jalankan perintah berikut:$value = (Invoke-RestMethod ` -Headers @{'Metadata-Flavor' = 'Google'} ` -Uri "http://metadata.google.internal/computeMetadata/v1/project/METADATA_KEY?wait_for_change=true&last_etag=ETAG") $value
Ganti kode berikut:
METADATA_KEY
: kunci metadata instance atau project yang ingin Anda kueri nilainya.ETAG
: nilai ETag untuk kunci metadata.
Dalam contoh ini, perintah berikut menggunakan nilai ETag untuk kunci
tags
dan kueri untuk entri metadata instance.PS C:> $value = (Invoke-RestMethod
-Headers @{'Metadata-Flavor' = 'Google'}
-Uri "http://metadata.google.internal/computeMetadata/v1/instance/tags?wait_for_change=true&last_etag=411261ca6c9e654e") $valueServer metadata sesuai dengan nilai ETag yang ditentukan. Jika nilai tersebut berubah, permintaan akan ditampilkan dengan konten baru kunci metadata Anda.
Python
Contoh Python berikut menunjukkan cara mengamati perubahan di server metadata secara terprogram.
Contoh ini menetapkan ETag awal ke 0
. Server metadata tidak akan menampilkan respons dengan 0
sebagai nilai ETag. Jika 0
ditentukan sebagai ETag terakhir dalam permintaan, server metadata akan merespons ETag dan nilai saat ini. Tindakan ini akan menghemat sedikit kode yang diperlukan untuk mendapatkan nilai awal dan ETag.
Menyetel waktu tunggu
Jika Anda ingin waktu permintaan wait-for-change
habis setelah beberapa detik tertentu, Anda dapat menyetel parameter timeout_sec
. Parameter timeout_sec
membatasi waktu tunggu permintaan ke jumlah detik yang Anda tentukan, dan saat permintaan mencapai batas tersebut, parameter akan menampilkan konten kunci metadata saat ini.
Saat Anda menyetel parameter timeout_sec
, permintaan akan selalu ditampilkan setelah jumlah detik yang ditentukan, terlepas dari apakah nilai metadata benar-benar berubah atau tidak. Anda hanya dapat menyetel nilai bilangan bulat sebagai waktu tunggu.
Linux
- Hubungkan ke VM Linux Anda.
Dari VM Linux, gunakan alat
curl
untuk membuat kueri.Untuk melakukan permintaan
wait-for-change
dengan nilai waktu tunggu untuk entri metadata instance VM, jalankan perintah berikut:curl "http://metadata.google.internal/computeMetadata/v1/instance/METADATA_KEY?wait_for_change=true&timeout_sec=TIMEOUT" -H "Metadata-Flavor: Google"
Untuk melakukan permintaan
wait-for-change
dengan nilai waktu tunggu untuk entri metadata project, jalankan perintah berikut:curl "http://metadata.google.internal/computeMetadata/v1/project/METADATA_KEY?wait_for_change=true&timeout_sec=TIMEOUT" -H "Metadata-Flavor: Google"
Ganti kode berikut:
METADATA_KEY
: kunci metadata instance atau project yang ingin Anda kueri nilainya.TIMEOUT
: nilai waktu tunggu.
Misalnya, perintah berikut menjalankan permintaan wait-for-change
yang
disetel ke waktu habis setelah 360 detik:
user@myinst:~$ curl "http://metadata.google.internal/computeMetadata/v1/instance/tags?wait_for_change=true&timeout_sec=360" -H "Metadata-Flavor: Google"
Windows
- Hubungkan ke VM Windows Anda.
Dari VM Windows, gunakan perintah
Invoke-RestMethod
untuk membuat kueri.Untuk melakukan permintaan
wait-for-change
dengan nilai waktu tunggu untuk entri metadata instance VM, jalankan perintah berikut:$value = (Invoke-RestMethod ` -Headers @{'Metadata-Flavor' = 'Google'} ` -Uri "http://metadata.google.internal/computeMetadata/v1/instance/METADATA_KEY?wait_for_change=true&timeout_sec=TIMEOUT") $value
Untuk melakukan permintaan
wait-for-change
dengan nilai waktu tunggu untuk entri metadata project, jalankan perintah berikut:$value = (Invoke-RestMethod ` -Headers @{'Metadata-Flavor' = 'Google'} ` -Uri "http://metadata.google.internal/computeMetadata/v1/project/METADATA_KEY?wait_for_change=true&timeout_sec=TIMEOUT") $value
Ganti kode berikut:
METADATA_KEY
: kunci metadata instance atau project yang ingin Anda kueri nilainya.TIMEOUT
: nilai waktu tunggu.
Misalnya, perintah berikut menjalankan permintaan wait-for-change
yang
disetel ke waktu habis setelah 360 detik:
PS C:>
$value = (Invoke-RestMethod -Headers @{'Metadata-Flavor' = 'Google'}
-Uri "http://metadata.google.internal/computeMetadata/v1/instance/tags?wait_for_change=true&timeout_sec=360")
$value
Kode status
Saat Anda membuat permintaan wait-for-change
, server metadata akan menampilkan kode status HTTP standar untuk menunjukkan keberhasilan atau kegagalan. Jika terjadi error, kondisi jaringan dapat menyebabkan server metadata gagal memenuhi permintaan Anda dan menampilkan kode error. Dalam hal ini, Anda harus mendesain aplikasi yang fault-tolerant serta dapat mengenali dan menangani error ini.
Status yang mungkin ditampilkan server metadata adalah:
Status | Deskripsi |
---|---|
HTTP 200 |
Berhasil! Nilai telah diubah, atau Anda mencapai timeout_sec yang ditentukan dan permintaan
berhasil ditampilkan.
|
Error 400 |
Permintaan Anda tidak valid. Perbaiki kueri Anda dan coba lagi permintaan tersebut. |
Error 404 |
Nilai metadata yang Anda tentukan sudah tidak ada. Server metadata juga menampilkan error ini jika metadata dihapus saat Anda menunggu perubahan. |
Error 503 |
Terjadi error server sementara atau peristiwa pemeliharaan sementara. Coba lagi permintaan tersebut. |
Batasan
Setiap permintaan yang berisi header
X-Forwarded-For
akan ditolak secara otomatis oleh server metadata. Header ini umumnya menunjukkan bahwa permintaan melalui proxy dan mungkin bukan permintaan yang dibuat oleh pengguna yang diberi otorisasi. Untuk alasan keamanan, semua permintaan tersebut ditolak.Saat Anda menggunakan perintah
curl
untuk mengambil metadata dari server, perhatikan bahwa beberapa karakter yang dienkode tidak didukung di jalur permintaan. Karakter yang dienkode hanya didukung di jalur kueri.Misalnya, permintaan berikut mungkin tidak berfungsi:
curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/123456789-compute%40developer.gserviceaccount.com/?query_path=https%3A%2F%2Flocalhost%3A8200%2Fexample%2Fquery&another_param=true" -H "Metadata-Flavor: Google"
Agar permintaan ini berfungsi, Anda harus mengganti karakter terenkode yang tidak didukung di jalur permintaan (
%40
) dengan nilai setara yang diterima (@
).curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/1234567898-compute@developer.gserviceaccount.com/?query_path=https%3A%2F%2Flocalhost%3A8200%2Fexample%2Fquery&another_param=true" -H "Metadata-Flavor: Google"
Tabel berikut merangkum karakter yang dienkode yang tidak didukung di jalur permintaan.
Karakter yang dienkode Nilai yang diterima %21 !
%24 $
%27 '
%28 (
%29 )
%2A *
%2C ,
%40 @
Melihat metadata kustom untuk VM Anda
Anda dapat melihat nilai metadata kustom untuk VM Compute Engine dengan salah satu cara berikut:
- Melihat metadata tingkat project
- Melihat metadata zona project (Pratinjau)
- Melihat metadata instance
Melihat metadata di seluruh project
Untuk melihat metadata kustom yang berlaku untuk semua VM di project Anda, gunakan salah satu metode berikut.
Konsol
Di Konsol Google Cloud, buka halaman Metadata.
- Dari tab Metadata, Anda dapat meninjau sebagian besar metadata project kustom, kecuali metadata kunci SSH.
- Dari tab Kunci SSH, Anda dapat meninjau semua metadata kunci SSH level project.
gcloud
Gunakan perintah gcloud compute project-info describe
untuk membuat kueri metadata di seluruh project:
gcloud compute project-info describe --flatten="commonInstanceMetadata[]"
Outputnya mirip dengan hal berikut ini:
--- fingerprint: HcSFdS_1_1I= items: - key: ssh-keys value: USERNAME:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDWZ... kind: compute#metadata
REST
Untuk mengkueri metadata project, buat permintaan GET
ke
metode project.get
.
Ganti PROJECT_ID
dengan project ID Anda.
GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID
Outputnya mirip dengan hal berikut ini:
"kind": "compute#project", "id": "XXXXXXX", "creationTimestamp": "2018-12-10T08:34:33.616-08:00", "name": "YOUR_PROJECT", "commonInstanceMetadata": { "kind": "compute#metadata", "fingerprint": "XXXXXCdg=", "items": [ { "key": "enable-guest-attributes", "value": "TRUE" }, { "key": "enable-os-inventory", "value": "true" }, { "key": "enable-osconfig", "value": "TRUE" }, { "key": "enable-oslogin", "value": "TRUE" }, { "key": "sshKeys", "value": "XXXXX" } ] }, ...
Melihat metadata zona project
Untuk melihat metadata kustom yang berlaku pada semua instance VM di zona tertentu dalam suatu project, gunakan salah satu metode berikut.
gcloud
Untuk membuat kueri metadata zona project kustom, gunakan perintah gcloud beta compute project-zonal-metadata describe
.
gcloud beta compute project-zonal-metadata describe \ --zone=ZONE \ --project=PROJECT_ID
Ganti kode berikut:
PROJECT_ID
: project ID AndaZONE
: zona tempat Anda ingin melihat metadata zona project.
Outputnya mirip dengan hal berikut ini:
{ "fingerprint": "VlRIl8dx9vk=", "metadata": { items: { "key-1": "value-1", "key-2": "value-2" } } }
REST
Untuk membuat kueri metadata zona project kustom, buat permintaan GET
ke metode instanceSettings().get
GET https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/instanceSettings
Ganti kode berikut:
PROJECT_ID
: project ID AndaZONE
: zona tempat Anda ingin melihat metadata zona project.
Outputnya mirip dengan hal berikut ini:
{ "fingerprint": "VlRIl8dx9vk=", "metadata": { items: { "key-1": "value-1", "key-2": "value-2" } } }
Melihat metadata instance
Untuk melihat metadata yang berlaku pada satu VM di project Anda, gunakan salah satu metode berikut.
Konsol
- Di konsol Google Cloud, buka halaman Instance VM.
Klik nama VM yang ingin Anda lihat metadatanya.
Kunci SSH untuk VM ini. Di bagian Keamanan dan akses, lihat kolom Kunci SSH.
Nilai
None
menunjukkan tidak ada kunci SSH yang disimpan di metadata instance.Nilai apa pun lainnya menunjukkan bahwa ada kunci SSH yang disimpan di metadata instance.
Kunci SSH untuk project. Di bagian Keamanan dan akses, lihat kolom Memblokir kunci SSH di seluruh project.
Nilai
On
menunjukkan bahwa nilai kunci metadatablock-project-ssh-keys
adalahTRUE
di metadata instance.Nilai
Off
menunjukkan bahwa nilai kunci metadatablock-project-ssh-keys
adalahFALSE
, atau kunci tidak ditetapkan.
Semua metadata kustom lainnya. Lihat bagian Metadata kustom. Anda akan melihat semua kunci dan nilai metadata kustom, selain metadata kunci SSH.
gcloud
Gunakan perintah gcloud compute instances describe
untuk mengkueri metadata instance:
gcloud compute instances describe VM_NAME --flatten="metadata[]"
Ganti VM_NAME
dengan nama VM yang ingin Anda cari metadatanya.
Outputnya mirip dengan hal berikut ini:
--- fingerprint: MTgTJ5m-Cjs= items: - key: enable-oslogin value: 'true' kind: compute#metadata
REST
Untuk membuat kueri metadata untuk VM tertentu, kirim permintaan GET
ke
metode instances.get
.
GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME
Outputnya mirip dengan hal berikut ini:
...... "metadata": { "kind": "compute#metadata", "fingerprint": "XXXXXXVo=", "items": [ { "key": "enable-oslogin", "value": "true" } ] },....
Ganti kode berikut:
PROJECT_ID
: project ID Anda.ZONE
: zona tempat VM beradaVM_NAME
: nama VM
Langkah selanjutnya
- Pelajari Metadata VM lebih lanjut.
- Pelajari cara menetapkan metadata kustom.
- Pelajari cara menetapkan dan mengkueri atribut tamu.