Melihat dan membuat kueri metadata VM


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

    1. Instal Google Cloud CLI, lalu initialize dengan menjalankan perintah berikut:

      gcloud init
    2. 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.

    1. Menginstal Google Cloud CLI.
    2. Untuk initialize gcloud CLI, jalankan perintah berikut:

      gcloud init
    3. 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:

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 di project
  • Untuk melihat metadata zona project kustom: compute.instanceSettings.get di setelan instance di zona yang diperlukan dalam project
  • Untuk melihat metadata kustom untuk instance VM: compute.instances.get di VM
  • Jika VM Anda menggunakan akun layanan: iam.serviceAccounts.actAs di akun layanan atau project

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:

  • 
    http://metadata.google.internal/computeMetadata/v1
  • 
    http://169.254.169.254/computeMetadata/v1
  • 
    http://metadata.goog/computeMetadata/v1
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

  1. Hubungkan ke VM Linux Anda.
  2. 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

  1. Hubungkan ke VM Windows Anda.
  2. 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

  1. Hubungkan ke VM Linux Anda.

  2. 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 entri disks/, selesaikan langkah-langkah berikut:

    1. 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/
      
    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
      
    3. Kemudian, untuk mengkueri jenis disk (type) untuk disk 0/, 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:

  1. Hubungkan ke VM Windows Anda.

  2. 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 entri disks/, selesaikan langkah-langkah berikut:

    1. 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/
      
    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
      
    3. Kemudian, untuk mengkueri jenis disk (type) untuk disk 0/, 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

  1. Hubungkan ke VM Linux Anda.

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

  1. Hubungkan ke VM Windows Anda.

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

  1. Hubungkan ke VM Linux Anda.
  2. 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 atau json.

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

  1. Hubungkan ke VM Windows Anda.
  2. 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 atau json.

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

  1. Hubungkan ke VM Linux Anda.
  2. 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

  1. Hubungkan ke VM Windows Anda.
  2. 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")
      $value
      

    • Untuk 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 permintaan wait-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:

  1. Hubungkan ke VM Linux Anda.
  2. 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
  3. Anda kemudian dapat menggunakan nilai ETag tersebut dengan perintah alat curl dalam permintaan wait-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:

  1. Hubungkan ke VM Windows Anda.
  2. Buat permintaan ke kunci tersebut, lalu cetak header-nya. Pada Windows, gunakan perintahInvoke-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

  3. 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")
      $value
      

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

last_etag = "0"

while True:
    r = requests.get(
        url,
        params={"last_etag": last_etag, "wait_for_change": True},
        headers=METADATA_HEADERS,
    )

    # During maintenance the service can return a 503, so these should
    # be retried.
    if r.status_code == 503:
        time.sleep(1)
        continue
    r.raise_for_status()

    last_etag = r.headers["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

  1. Hubungkan ke VM Linux Anda.
  2. 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

  1. Hubungkan ke VM Windows Anda.
  2. 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 di seluruh project

Untuk melihat metadata kustom yang berlaku untuk semua VM di project Anda, gunakan salah satu metode berikut.

Konsol

  1. Di Konsol Google Cloud, buka halaman Metadata.

    Buka 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 Anda
  • ZONE: 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 Anda
  • ZONE: 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

  1. Di konsol Google Cloud, buka halaman Instance VM.

    Buka instance VM

  2. 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 metadata block-project-ssh-keys adalah TRUE di metadata instance.

      • Nilai Off menunjukkan bahwa nilai kunci metadata block-project-ssh-keys adalah FALSE, 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 berada
  • VM_NAME: nama VM

Langkah selanjutnya