VM-Metadaten aufrufen und abfragen


Jede virtuelle Maschine (VM) speichert ihre Metadaten in Verzeichnissen auf einem Metadatenserver. Ihre VM hat automatisch ohne zusätzliche Autorisierung Zugriff auf diese Metadatenserver-API. Sie können die in den folgenden Abschnitten dieses Dokuments erläuterten Methoden verwenden, um VM-Metadatenwerte aufzurufen und abzufragen:

Hinweise

  • Verwenden Sie für Windows Server-VMs PowerShell 3.0 oder höher. Wir empfehlen, die kopierten Codeblöcke mit ctrl+v einzufügen.
  • Sehen Sie sich die Grundlagen dazu an, wie Sie VM-Metadaten für Compute Engine definieren, kategorisieren und anordnen können. Weitere Informationen finden Sie unter Informationen zu VM-Metadaten.
  • Richten Sie die Authentifizierung ein, falls Sie dies noch nicht getan haben. Bei der Authentifizierung wird Ihre Identität für den Zugriff auf Google Cloud-Dienste und APIs überprüft. Zur Ausführung von Code oder Beispielen aus einer lokalen Entwicklungsumgebung können Sie sich so bei Compute Engine authentifizieren.

    Wählen Sie den Tab für die Verwendung der Beispiele auf dieser Seite aus:

    Console

    Wenn Sie über die Google Cloud Console auf Google Cloud-Dienste und -APIs zugreifen, müssen Sie die Authentifizierung nicht einrichten.

    gcloud

    1. Installieren Sie die Google Cloud CLI und initialisieren Sie sie mit folgendem Befehl:

      gcloud init
    2. Legen Sie eine Standardregion und -zone fest.

    Python

    Wenn Sie die Python-Beispiele auf dieser Seite aus einer lokalen Entwicklungsumgebung heraus verwenden möchten, installieren und initialisieren Sie die gcloud CLI und richten dann die Standardanmeldedaten für Anwendungen mit Ihren Nutzeranmeldedaten ein.

    1. Installieren Sie die Google Cloud CLI.
    2. Führen Sie folgenden Befehl aus, um die gcloud CLI zu initialisieren:

      gcloud init
    3. Erstellen Sie lokale Anmeldedaten zur Authentifizierung für Ihr Google-Konto:

      gcloud auth application-default login

    Weitere Informationen: Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

    REST

    Verwenden Sie die von der gcloud CLI bereitgestellten Anmeldedaten, um die REST API-Beispiele auf dieser Seite in einer lokalen Entwicklungsumgebung zu verwenden.

      Installieren Sie die Google Cloud CLI und initialisieren Sie sie mit folgendem Befehl:

      gcloud init

Erforderliche Rollen

Die folgenden Rollen und Berechtigungen sind erforderlich, um benutzerdefinierte Metadaten von außerhalb der VM mithilfe der Google Cloud Console, der Google Cloud CLI oder REST aufzurufen. Wenn Sie die Metadaten programmatisch innerhalb der VM abfragen, benötigen Sie nur die Rollen und Berechtigungen zum Herstellen einer Verbindung zur VM.

Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Aufrufen benutzerdefinierter Metadaten von außerhalb der VM benötigen:

Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff verwalten.

Diese vordefinierten Rollen enthalten die Berechtigungen, die zum Aufrufen benutzerdefinierter Metadaten von außerhalb der VM erforderlich sind. Erweitern Sie den Abschnitt Erforderliche Berechtigungen, um die erforderlichen Berechtigungen anzuzeigen:

Erforderliche Berechtigungen

Die folgenden Berechtigungen sind erforderlich, um benutzerdefinierte Metadaten von außerhalb der VM aufzurufen:

  • Um benutzerdefinierte projektweite Metadaten aufzurufen: compute.projects.get für das Projekt
  • Um benutzerdefinierte projektzonale Metadaten aufzurufen: compute.instanceSettings.get für die Instanzeinstellungen in der erforderlichen Zone im Projekt
  • So rufen Sie benutzerdefinierte Metadaten für eine VM-Instanz auf: compute.instances.get auf der VM
  • Wenn Ihre VMs Dienstkonten verwenden: iam.serviceAccounts.actAs für die Dienstkonten oder das Projekt

Sie können diese Berechtigungen auch mit benutzerdefinierten Rollen oder anderen vordefinierten Rollen erhalten.

Metadaten programmatisch abfragen

Innerhalb einer VM können Sie entweder standardmäßige oder benutzerdefinierte Metadatenwerte programmatisch mit Tools wie curl unter Linux oder Invoke-RestMethod unter Windows abfragen.

Bestandteile einer Metadatenanfrage

In der folgenden Tabelle sind die wichtigsten Teile einer Metadatenabfrage zusammengefasst.

Komponenten Beschreibung
Stamm-URL

Alle Metadatenwerte werden als Subpfade unterhalb der folgenden Stamm-URLs definiert:

  • 
    http://metadata.google.internal/computeMetadata/v1
  • 
    http://169.254.169.254/v1
  • 
    http://metadata.goog/v1
Anfrageheader

Dieser Header weist darauf hin, dass eine Anfrage zum Aufruf von Metadatenwerten gesendet wurde und diese nicht unbeabsichtigt aus einer unsicheren Quelle kommen. Auf diese Weise kann der Metadatenserver Ihnen die entsprechenden Daten zurückgeben. Ohne diesen Header lehnt der Metadatenserver Ihre Anfrage ab.


Metadata-Flavor: Google

Einzelnen Metadateneintrag abfragen

Verwenden Sie die folgenden Befehle, um einen einzelnen Metadateneintrag abzufragen.

Linux

  1. Stellen Sie eine Verbindung zu Ihrer Linux-VM her.
  2. Verwenden Sie in Ihrer Linux-VM das curl-Tool, um eine Abfrage zu stellen.

    • Führen Sie den folgenden Befehl aus, um einen Metadateneintrag einer VM-Instanz abzufragen:

      curl "http://metadata.google.internal/computeMetadata/v1/instance/METADATA_KEY" -H "Metadata-Flavor: Google"
      
    • Führen Sie den folgenden Befehl aus, um einen Projektmetadateneintrag abzufragen:

      curl "http://metadata.google.internal/computeMetadata/v1/project/METADATA_KEY" -H "Metadata-Flavor: Google"
      

    Ersetzen Sie METADATA_KEY durch den Instanz- oder Projektmetadatenschlüssel, den Sie abfragen möchten.

    Führen Sie beispielsweise die folgende Abfrage aus, um das Boot-Image für die VM abzufragen:

    user@myinst:~$ curl "http://metadata.google.internal/computeMetadata/v1/instance/image" -H "Metadata-Flavor: Google"
    

    Die Ausgabe sieht etwa so aus:

    projects/rhel-cloud/global/images/rhel-8-v20210122

Windows

  1. Stellen Sie eine Verbindung zu Ihrer Windows-VM her.
  2. Verwenden Sie in Ihrer Windows-VM den Befehl Invoke-RestMethod, um eine Abfrage zu stellen.

    • Führen Sie den folgenden Befehl aus, um einen Metadateneintrag einer VM-Instanz abzufragen:

      $value = (Invoke-RestMethod `
              -Headers @{'Metadata-Flavor' = 'Google'} `
              -Uri "http://metadata.google.internal/computeMetadata/v1/instance/METADATA_KEY")
      $value
      
    • Führen Sie den folgenden Befehl aus, um einen Projektmetadateneintrag abzufragen:

      $value = (Invoke-RestMethod `
              -Headers @{'Metadata-Flavor' = 'Google'} `
              -Uri "http://metadata.google.internal/computeMetadata/v1/project/METADATA_KEY")
      $value
      

    Ersetzen Sie METADATA_KEY durch den Instanz- oder Projektmetadatenschlüssel, den Sie abfragen möchten.

    Führen Sie beispielsweise die folgende Abfrage aus, um das Boot-Image für die VM abzufragen:

    PS C:\> 
    $value = (Invoke-RestMethod `
              -Headers @{'Metadata-Flavor' = 'Google'} `
              -Uri "http://metadata.google.internal/computeMetadata/v1/instance/image")
    $value
    

    Die Ausgabe sieht etwa so aus:

    projects/windows-cloud/global/images/windows-server-2019-dc-v20210112

Metadatenverzeichniseinträge abfragen

Verwenden Sie die folgenden Befehle, um Metadaten-Verzeichniseinträge abzufragen. Verzeichniseinträge sind Metadateneinträge, die andere Metadatenschlüssel enthalten. Alle Metadateneinträge, die mit einem Schrägstrich enden, sind Verzeichniseinträge.

Linux

  1. Stellen Sie eine Verbindung zu Ihrer Linux-VM her.

  2. Führen Sie in Ihrer Linux-VM die folgenden Befehle aus:

    • Führen Sie den folgenden Befehl aus, um das Metadatenverzeichnis einer VM-Instanz abzufragen:

      curl "http://metadata.google.internal/computeMetadata/v1/instance/METADATA_DIRECTORY_NAME/" -H "Metadata-Flavor: Google"
      
    • Führen Sie den folgenden Befehl aus, um ein Projektmetadatenverzeichnis abzufragen:

      curl "http://metadata.google.internal/computeMetadata/v1/project/METADATA_DIRECTORY_NAME/" -H "Metadata-Flavor: Google"
      

    Ersetzen Sie METADATA_DIRECTORY_NAME durch den Namen des Instanz- oder des Projektmetadatenverzeichnisses, für das Sie die Einträge abfragen möchten.

    Betrachten Sie beispielsweise den Eintrag disks/, bei dem es sich um ein Verzeichnis von Laufwerken handelt, die mit der VM verbunden sind. Führen Sie die folgenden Schritte aus, um den Eintrag disks/ abzufragen:

    1. Führen Sie den curl-Toolbefehl im Laufwerksverzeichnis aus.

      user@myinst:~$ curl "http://metadata.google.internal/computeMetadata/v1/instance/disks/" -H "Metadata-Flavor: Google"
      

      Die Ausgabe sieht etwa so aus:

      0/
      1/
      2/
      
    2. Wenn Sie weitere Informationen zum Verzeichnis 0/ des Laufwerks benötigen, können Sie die spezifische URL für dieses Verzeichnis abfragen:

      user@myinst:~$ curl "http://metadata.google.internal/computeMetadata/v1/instance/disks/0/" -H "Metadata-Flavor: Google"
      

      Die Ausgabe sieht etwa so aus:

      device-name
      index
      mode
      type
      
    3. Führen Sie Folgendes aus, um dann den Laufwerktyp (type) für die Laufwerke 0/ abzufragen:

      user@myinst:~$ curl "http://metadata.google.internal/computeMetadata/v1/instance/disks/0/type" -H "Metadata-Flavor: Google"
      

      Die Ausgabe sieht etwa so aus:

      PERSISTENT
      

Windows

Der Eintrag disks/ ist ein Verzeichnis von Laufwerken, das an die VM angehängt ist. Führen Sie die folgenden Schritte aus, um den Laufwerkeintrag abzufragen:

  1. Stellen Sie eine Verbindung zu Ihrer Windows-VM her.

  2. Führen Sie in Ihrer Windows-VM die folgenden Befehle aus:

    • Führen Sie den folgenden Befehl aus, um das Metadatenverzeichnis einer VM-Instanz abzufragen:

      $value = (Invoke-RestMethod `
              -Headers @{'Metadata-Flavor' = 'Google'} `
              -Uri "http://metadata.google.internal/computeMetadata/v1/instance/METADATA_DIRECTORY_NAME/")
      $value
      
    • Führen Sie den folgenden Befehl aus, um ein Projektmetadatenverzeichnis abzufragen:

      $value = (Invoke-RestMethod `
              -Headers @{'Metadata-Flavor' = 'Google'} `
              -Uri "http://metadata.google.internal/computeMetadata/v1/project/METADATA_DIRECTORY_NAME/")
      $value
      

    Ersetzen Sie METADATA_DIRECTORY_NAME durch den Namen des Instanz- oder des Projektmetadatenverzeichnisses, für das Sie die Einträge abfragen möchten.

    Betrachten Sie beispielsweise den Eintrag disks/, bei dem es sich um ein Verzeichnis von Laufwerken handelt, die mit der VM verbunden sind. Führen Sie die folgenden Schritte aus, um den Eintrag disks/ abzufragen:

    1. Führen Sie den Invoke-RestMethod-Befehl im Laufwerksverzeichnis aus.

      PS C:\> 
      $value = (Invoke-RestMethod `
                -Headers @{'Metadata-Flavor' = 'Google'} `
                -Uri "http://metadata.google.internal/computeMetadata/v1/instance/disks/")
      $value
      

      Die Ausgabe sieht etwa so aus:

      0/
      1/
      2/
      
    2. Wenn Sie weitere Informationen zum Verzeichnis 0/ des Laufwerks benötigen, können Sie die spezifische URL für dieses Verzeichnis abfragen:

      PS C:\> 
      $value = (Invoke-RestMethod `
                -Headers @{'Metadata-Flavor' = 'Google'} `
                -Uri "http://metadata.google.internal/computeMetadata/v1/instance/disks/0/")
      $value
      

      Die Ausgabe sieht etwa so aus:

      device-name
      index
      mode
      type
      
    3. Führen Sie Folgendes aus, um dann den Laufwerktyp (type) für die Laufwerke 0/ abzufragen:

      PS C:\> 
      $value = (Invoke-RestMethod `
                -Headers @{'Metadata-Flavor' = 'Google'} `
                -Uri "http://metadata.google.internal/computeMetadata/v1/instance/disks/0/type")
      $value
      

      Die Ausgabe sieht etwa so aus:

      PERSISTENT
      

Verzeichniseinträge rekursiv abfragen

Wenn Sie alle Inhalte in einem Verzeichnis zurückgeben möchten, verwenden Sie den Abfrageparameter recursive=true mit Ihrer Anfrage:

Linux

  1. Stellen Sie eine Verbindung zu Ihrer Linux-VM her.

  2. Verwenden Sie in Ihrer Linux-VM das curl-Tool, um eine Abfrage zu stellen.

    • Führen Sie den folgenden Befehl aus, um die Einträge für das Metadatenverzeichnis einer VM-Instanz rekursiv abzufragen:

      curl "http://metadata.google.internal/computeMetadata/v1/instance/METADATA_DIRECTORY_NAME/?recursive=true" -H "Metadata-Flavor: Google"
      
    • Führen Sie den folgenden Befehl aus, um die Einträge für das Metadatenverzeichnis eines Projekts rekursiv abzufragen:

      curl "http://metadata.google.internal/computeMetadata/v1/project/METADATA_DIRECTORY_NAME/?recursive=true" -H "Metadata-Flavor: Google"
      

    Ersetzen Sie METADATA_DIRECTORY_NAME durch den Namen des Instanz- oder des Projektmetadatenverzeichnisses, für das Sie die Einträge rekursiv abfragen möchten.

    Mit dem folgenden Befehl werden beispielsweise die Instanzmetadateneinträge für das Verzeichnis disks/ rekursiv abgefragt.

      user@myinst:~$ curl "http://metadata.google.internal/computeMetadata/v1/instance/disks/?recursive=true" -H "Metadata-Flavor: Google"
      

    Die Ausgabe sieht in etwa so aus:

      [{"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"}]
      

    Standardmäßig werden rekursive Inhalte im JSON-Format angezeigt. Wenn Sie diese Inhalte im Textformat zurückgeben möchten, hängen Sie den Abfrageparameter alt=text an:

      user@myinst:~$ curl "http://metadata.google.internal/computeMetadata/v1/instance/disks/?recursive=true&alt=text" -H "Metadata-Flavor: Google"
      

    Die Ausgabe sieht etwa so aus:

      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. Stellen Sie eine Verbindung zu Ihrer Windows-VM her.

  2. Verwenden Sie in Ihrer Windows-VM den Befehl Invoke-RestMethod, um eine Abfrage zu stellen.

    • Führen Sie den folgenden Befehl aus, um die Einträge für das Metadatenverzeichnis einer VM-Instanz rekursiv abzufragen:

      $value = (Invoke-RestMethod `
                -Headers @{'Metadata-Flavor' = 'Google'} `
                -Uri "http://metadata.google.internal/computeMetadata/v1/instance/METADATA_DIRECTORY_NAME/?recursive=true")
      $value
      
    • Führen Sie den folgenden Befehl aus, um die Einträge für das Metadatenverzeichnis eines Projekts rekursiv abzufragen:

      $value = (Invoke-RestMethod `
                -Headers @{'Metadata-Flavor' = 'Google'} `
                -Uri "http://metadata.google.internal/computeMetadata/v1/project/METADATA_DIRECTORY_NAME/?recursive=true")
      $value
      

    Ersetzen Sie METADATA_DIRECTORY_NAME durch den Namen des Instanz- oder des Projektmetadatenverzeichnisses, für das Sie die Einträge rekursiv abfragen möchten.

    Mit dem folgenden Befehl werden beispielsweise die Instanzmetadateneinträge für das Verzeichnis disks/ rekursiv abgefragt.

    PS C:\> 
    $value = (Invoke-RestMethod `
              -Headers @{'Metadata-Flavor' = 'Google'} `
              -Uri "http://metadata.google.internal/computeMetadata/v1/instance/disks/?recursive=true")
    $value
    

    Die Ausgabe sieht in etwa so aus:

    [{"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"}]
    

    Standardmäßig werden rekursive Inhalte im JSON-Format angezeigt. Wenn Sie diese Inhalte im Textformat zurückgeben möchten, hängen Sie den Abfrageparameter alt=text an:

    PS C:\> 
    $value = (Invoke-RestMethod `
              -Headers @{'Metadata-Flavor' = 'Google'} `
              -Uri "http://metadata.google.internal/computeMetadata/v1/instance/disks/?recursive=true&alt=text")
    $value
    

    Die Ausgabe sieht etwa so aus:

    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
    

Ausgabe der Abfrage formatieren

Standardmäßig besitzt jeder Endpunkt ein vordefiniertes Format für die Antwort. Einige Endpunkte können JSON-Daten zurückgeben, während andere die Daten als String darstellen. Sie können das Standardformat für Daten mit den Abfrageparametern alt=json oder alt=text ändern, die Daten als JSON-String oder als Klartextdarstellung zurückgeben.

Linux

  1. Stellen Sie eine Verbindung zu Ihrer Linux-VM her.
  2. Verwenden Sie in Ihrer Linux-VM das curl-Tool, um eine Abfrage zu stellen.

    • Führen Sie den folgenden Befehl aus, um das Datenformat der Abfrageantwort für den Metadateneintrag einer VM-Instanz zu ändern:

      curl "http://metadata.google.internal/computeMetadata/v1/instance/METADATA_KEY?alt=DATA_FORMAT" -H "Metadata-Flavor: Google"
      
    • Führen Sie den folgenden Befehl aus, um das Datenformat der Abfrageantwort für einen Projektmetadateneintrag zu ändern:

      curl "http://metadata.google.internal/computeMetadata/v1/project/METADATA_KEY?alt=DATA_FORMAT" -H "Metadata-Flavor: Google"
      

    Ersetzen Sie Folgendes:

    • METADATA_KEY: der Instanz- oder Projektmetadatenschlüssel, für den Sie den Wert abfragen möchten.
    • DATA_FORMAT: das Format, in dem die Abfrageantwortdaten abgerufen werden sollen, z. B. text oder json.

Beispiel

Der Schlüssel tags gibt beispielsweise Daten automatisch im JSON-Format zurück. Sie können stattdessen Daten im Textformat zurückgeben, indem Sie den Abfrageparameter alt=text angeben.

Standardsuchanfrage

  user@myinst:~$ curl "http://metadata.google.internal/computeMetadata/v1/instance/tags" -H "Metadata-Flavor: Google"
  

Die Ausgabe sieht etwa so aus:

  ["http-server", "db-client", "app-server", "mysql-server"]
  

Abfrage mit Formatierung

  user@myinst:~$ curl "http://metadata.google.internal/computeMetadata/v1/instance/tags?alt=text" -H "Metadata-Flavor: Google"
  

Die Ausgabe sieht etwa so aus:

  http-server
  db-client
  app-server
  mysql-server

Windows

  1. Stellen Sie eine Verbindung zu Ihrer Windows-VM her.
  2. Verwenden Sie in Ihrer Windows-VM den Befehl Invoke-RestMethod, um eine Abfrage zu stellen.

    • Führen Sie den folgenden Befehl aus, um das Datenformat der Abfrageantwort für den Metadateneintrag einer VM-Instanz zu ändern:

      $value = (Invoke-RestMethod `
                -Headers @{'Metadata-Flavor' = 'Google'} `
                -Uri "http://metadata.google.internal/computeMetadata/v1/instance/METADATA_KEY?alt=DATA_FORMAT")
      $value
      
    • Führen Sie den folgenden Befehl aus, um das Datenformat der Abfrageantwort für einen Projektmetadateneintrag zu ändern:

      $value = (Invoke-RestMethod `
                -Headers @{'Metadata-Flavor' = 'Google'} `
                -Uri "http://metadata.google.internal/computeMetadata/v1/project/METADATA_KEY?alt=DATA_FORMAT")
      $value
      

    Ersetzen Sie Folgendes:

    • METADATA_KEY: der Instanz- oder Projektmetadatenschlüssel, für den Sie den Wert abfragen möchten.
    • DATA_FORMAT: das Format, in dem die Abfrageantwortdaten abgerufen werden sollen, z. B. text oder json.

Beispiel

Der Schlüssel tags gibt beispielsweise Daten automatisch im JSON-Format zurück. Sie können stattdessen Daten im Textformat zurückgeben, indem Sie den Abfrageparameter alt=text angeben.

Standardsuchanfrage

  PS C:> 
  $value = (Invoke-RestMethod -Headers @{'Metadata-Flavor' = 'Google'}
            -Uri "http://metadata.google.internal/computeMetadata/v1/instance/tags")
  $value
  

Die Ausgabe sieht etwa so aus:

  ["http-server", "db-client", "app-server", "mysql-server"]
  

Abfrage mit Formatierung

  PS C:> 
  $value = (Invoke-RestMethod -Headers @{'Metadata-Flavor' = 'Google'}
            -Uri "http://metadata.google.internal/computeMetadata/v1/instance/tags?alt=text")
  $value
  

Die Ausgabe sieht etwa so aus:

  http-server
  db-client
  app-server
  mysql-server

Metadatenänderungen mit dem wait-for-change-Feature abfragen

Da sich Metadatenwerte ändern können, während Ihre VM ausgeführt wird, kann der Metadatenserver mithilfe des Features wait-for-change über Metadatenänderungen informiert werden. Bei dieser Option gibt die Anfrage nur dann eine Ausgabe zurück, wenn sich die angegebenen Metadaten geändert haben.

Sie können dieses Feature für benutzerdefinierte oder serverdefinierte Metadaten verwenden. Sobald sich also etwas an Ihrer VM oder Ihrem Projekt ändert, oder jemand einen benutzerdefinierten Metadateneintrag aktualisiert, können Sie programmatisch auf die Änderung reagieren.

Sie können beispielsweise eine Anfrage für den Schlüssel tags ausführen, sodass die Anfrage nur zurückgegeben wird, wenn sich der Inhalt der Metadaten der Tags geändert hat. Wird die Anfrage zurückgegeben, beinhaltet sie den neuen Wert des Metadatenschlüssels.

Mit dem Feature wait-for-change können Sie auch einen Abgleich mit Ihrer Anfrage durchführen und Zeitlimits festlegen.

Beachten Sie bei der Arbeit mit dem Feature wait-for-change Folgendes:

  • Sie können eine wait-for-change-Anfrage nur für einen Metadatenendpunkt oder rekursiv für den Inhalt eines Verzeichnisses ausführen. Sie können keine wait-for-change-Anfrage für einen Verzeichniseintrag ausführen. Wenn Sie dies versuchen, kann der Metadatenserver Ihre Anfrage nicht ausführen und gibt den Fehler 400 (ungültige Anfrage) zurück.

  • Sie können keine wait-for-change-Anfrage für ein Dienstkonto-Token ausführen. Wenn Sie versuchen, eine wait-for-change-Anfrage an die URL des Dienstkonto-Tokens zu senden, schlägt die Anfrage sofort fehl und gibt den Fehler 400 (ungültige Anfrage) zurück.

Zum Ausführen einer wait-for-change-Anfrage fragen Sie einen Metadatenschlüssel ab und hängen den Abfrageparameter ?wait_for_change=true an:

Linux

  1. Stellen Sie eine Verbindung zu Ihrer Linux-VM her.
  2. Verwenden Sie in Ihrer Linux-VM das curl-Tool, um eine Abfrage zu stellen.

    • Führen Sie den folgenden Befehl aus, um eine wait-for-change-Anfrage für den Metadateneintrag einer VM-Instanz durchzuführen:

      curl "http://metadata.google.internal/computeMetadata/v1/instance/METADATA_KEY?wait_for_change=true" -H "Metadata-Flavor: Google"
      
    • Führen Sie den folgenden Befehl aus, um eine wait-for-change-Anfrage für einen Projektmetadateneintrag durchzuführen:

      curl "http://metadata.google.internal/computeMetadata/v1/project/METADATA_KEY" -H "Metadata-Flavor: Google"
      

    Ersetzen Sie METADATA_KEY durch den Instanz- oder Projektmetadatenschlüssel, den Sie abfragen möchten.

    Wenn der angegebene Metadatenschlüssel verändert wurde, gibt die Anfrage den neuen Wert zurück.

Beispiele

In diesem Beispiel wurde eine Anfrage an setInstanceTags method gerichtet und gibt neue Werte zurück:

  user@myinst:~$ curl "http://metadata.google.internal/computeMetadata/v1/instance/tags?wait_for_change=true" -H "Metadata-Flavor: Google"
  

Die Ausgabe sieht in etwa so aus:

  http-server
  db-client
  

Sie können auch eine wait-for-change-Anfrage rekursiv für den Inhalt eines Verzeichnisses durchführen:

  user@myinst:~$ curl "http://metadata.google.internal/computeMetadata/v1/instance/attributes/?recursive=true&wait_for_change=true" -H "Metadata-Flavor: Google"
  

Der Metadatenserver gibt die neuen Inhalte an, sollte es Veränderungen gegeben haben:

  {"foo":"bar","baz":"bat"}
  

Windows

  1. Stellen Sie eine Verbindung zu Ihrer Windows-VM her.
  2. Verwenden Sie in Ihrer Windows-VM den Befehl Invoke-RestMethod, um eine Abfrage zu stellen.

      PS C:> 
      $value = (Invoke-RestMethod -Headers @{'Metadata-Flavor' = 'Google'}
                -Uri "http://metadata.google.internal/computeMetadata/v1/METADATA_KEY?wait_for_change=true")
      $value
      

    • Führen Sie den folgenden Befehl aus, um eine wait-for-change-Anfrage für den Metadateneintrag einer VM-Instanz durchzuführen:

      $value = (Invoke-RestMethod `
              -Headers @{'Metadata-Flavor' = 'Google'} `
              -Uri "http://metadata.google.internal/computeMetadata/v1/instance/METADATA_KEY?wait_for_change=true")
      $value
      
    • Führen Sie den folgenden Befehl aus, um eine wait-for-change-Anfrage für einen Projektmetadateneintrag durchzuführen:

      $value = (Invoke-RestMethod `
              -Headers @{'Metadata-Flavor' = 'Google'} `
              -Uri "http://metadata.google.internal/computeMetadata/v1/project/METADATA_KEY?wait_for_change=true")
      $value
      

    Ersetzen Sie METADATA_KEY durch den Instanz- oder Projektmetadatenschlüssel, für den Sie eine wait-for-change-Anfrage durchführen möchten.

    Wenn der angegebene Metadatenschlüssel verändert wurde, gibt die Anfrage den neuen Wert zurück.

Beispiele

Wenn der angegebene Metadatenschlüssel verändert wurde, gibt die Anfrage den neuen Wert zurück. In diesem Beispiel wurde eine Anfrage an setInstanceTags method gerichtet und gibt neue Werte zurück:

  PS C:> 
  $value = (Invoke-RestMethod -Headers @{'Metadata-Flavor' = 'Google'}
            -Uri "http://metadata.google.internal/computeMetadata/v1/instance/tags?wait_for_change=true")
  $value
  

Die Ausgabe sieht in etwa so aus:

  http-server
  db-client
  

Sie können auch eine wait-for-change-Anfrage rekursiv für die Inhalte eines Verzeichnisses durchführen:

  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
  

Der Metadatenserver gibt die neuen Inhalte an, sollte es Veränderungen gegeben haben:

  {"foo":"bar","baz":"bat"}
  

ETags verwenden

Wenn Sie eine einfache wait-for-change-Abfrage senden, gibt der Metadatenserver eine Antwort zurück, wenn sich im Inhalt dieser Metadaten etwas geändert hat. Jedoch gibt es immer einen Wettlauf zwischen der Aktualisierung von Metadaten und einer wait-for-change-Anfrage. Deswegen lohnt es sich, eine verlässliche Methode zu haben, um herauszufinden, ob Sie den neuesten Metadatenwert erhalten.

Dafür haben wir Ihnen den last_etag-Anfrageparameter zur Verfügung gestellt, der Ihren ETag-Wert mit dem vergleicht, der auf dem Metadatenserver gespeichert ist. Wenn die ETag-Werte übereinstimmen, wird die Anfrage wait-for-change akzeptiert. Stimmen die ETag-Werte nicht überein, dann bedeutet das, dass sich seit dem letzten Aufruf des ETag-Werts etwas verändert hat. Der Metadatenserver sendet diesen neuen Wert sofort zurück.

Linux-VMs

Führen Sie die folgenden Schritte aus, um den aktuellen ETag-Wert für einen Metadatenschlüssel abzurufen:

  1. Stellen Sie eine Verbindung zu Ihrer Linux-VM her.
  2. Stellen Sie eine Anfrage an diesen Schlüssel und drucken Sie die Header. Verwenden Sie dazu das curl-Tool mit dem Flag -v:

    • Führen Sie den folgenden Befehl aus, um das aktuelle ETag für den Metadateneintrag einer VM-Instanz abzurufen:

      curl -v "http://metadata.google.internal/computeMetadata/v1/instance/METADATA_KEY" -H "Metadata-Flavor: Google"
      
    • Führen Sie den folgenden Befehl aus, um das aktuelle ETag für einen Projektmetadateneintrag abzurufen:

      curl -v "http://metadata.google.internal/computeMetadata/v1/project/METADATA_KEY" -H "Metadata-Flavor: Google"
      

    Ersetzen Sie METADATA_KEY durch den Instanz- oder Projektmetadatenschlüssel, für den Sie den Wert abfragen möchten.

    Mit dem folgenden Befehl wird beispielsweise der aktuelle ETag-Wert für den Metadatenschlüssel tags der Instanz abgerufen.

      user@myinst:~$ curl -v "http://metadata.google.internal/computeMetadata/v1/instance/tags" -H "Metadata-Flavor: Google"
      

    Die Ausgabe sieht in etwa so aus:

    * 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. Sie können diesen ETag-Wert dann zusammen mit dem curl-Toolbefehl in der wait-for-change-Anfrage verwenden:

    • Führen Sie den folgenden Befehl aus, um den ETag-Wert für die wait-for-change-Anfrage von Instanzmetadaten zu verwenden:

      curl "http://metadata.google.internal/computeMetadata/v1/instance/METADATA_KEY?wait_for_change=true&last_etag=ETAG" -H "Metadata-Flavor: Google"
      
    • Führen Sie den folgenden Befehl aus, um den ETag-Wert für die wait-for-change-Anfrage von Projektmetadaten zu verwenden:

      curl "http://metadata.google.internal/computeMetadata/v1/project/METADATA_KEY?wait_for_change=true&last_etag=ETAG" -H "Metadata-Flavor: Google"
      

    Ersetzen Sie Folgendes:

    • METADATA_KEY: der Instanz- oder Projektmetadatenschlüssel, für den Sie den Wert abfragen möchten.
    • ETAG: der ETag-Wert für den Metadatenschlüssel.

    In diesem Beispiel verwendet der folgende Befehl den ETag-Wert für den Schlüssel tags und fragt den Metadateneintrag der Instanz ab.

      user@myinst:~$ curl "http://metadata.google.internal/computeMetadata/v1/instance/tags?wait_for_change=true&last_etag=411261ca6c9e654e" -H "Metadata-Flavor: Google"
      

    Der Metadatenserver überprüft diesen ETag-Wert und gibt die neuen Inhalte Ihres Metadatenschlüssels zurück, sollte er sich ändern.

Windows-VMs

Führen Sie die folgenden Schritte aus, um den aktuellen ETag-Wert für einen Metadatenschlüssel abzurufen:

  1. Stellen Sie eine Verbindung zu Ihrer Windows-VM her.
  2. Stellen Sie eine Anfrage an diesen Schlüssel und drucken Sie die Header. Verwenden Sie unter Windows den Invoke-WebRequest-Befehl.

    • Führen Sie den folgenden Befehl aus, um das aktuelle ETag für den Metadateneintrag einer VM-Instanz abzurufen:

      $value = (Invoke-WebRequest -Headers @{'Metadata-Flavor' = 'Google'} `
      -Uri http://metadata.google.internal/computeMetadata/v1/instance/METADATA_KEY)
      
      $value.Headers.ETag
      
    • Führen Sie den folgenden Befehl aus, um das aktuelle ETag für einen Projektmetadateneintrag abzurufen:

      $value = (Invoke-WebRequest -Headers @{'Metadata-Flavor' = 'Google'} `
      -Uri http://metadata.google.internal/computeMetadata/v1/project/METADATA_KEY)
      
      $value.Headers.ETag
      

    Ersetzen Sie METADATA_KEY durch den Instanz- oder Projektmetadatenschlüssel, für den Sie den Wert abfragen möchten.

    Mit dem folgenden Befehl wird beispielsweise der aktuelle ETag-Wert für den Metadatenschlüssel tags der Instanz abgerufen.

      PS C:> 
      $value = (Invoke-WebRequest -Headers @{'Metadata-Flavor' = 'Google'} `
      -Uri http://metadata.google.internal/computeMetadata/v1/instance/tags)

    $value.Headers.ETag

    Die Ausgabe sieht in etwa so aus:

      * 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. Sie können den ETag-Wert dann in Ihrer wait-for-change-Anfrage verwenden:

    • Führen Sie den folgenden Befehl aus, um den ETag-Wert für die wait-for-change-Anfrage von Instanzmetadaten zu verwenden:

      $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
      
    • Führen Sie den folgenden Befehl aus, um den ETag-Wert für die wait-for-change-Anfrage von Projektmetadaten zu verwenden:

      $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
      

    Ersetzen Sie Folgendes:

    • METADATA_KEY: der Instanz- oder Projektmetadatenschlüssel, für den Sie den Wert abfragen möchten.
    • ETAG: der ETag-Wert für den Metadatenschlüssel.

    In diesem Beispiel verwendet der folgende Befehl den ETag-Wert für den Schlüssel tags und fragt den Metadateneintrag der Instanz ab.

      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
      

    Der Metadatenserver überprüft diesen ETag-Wert und gibt die neuen Inhalte Ihres Metadatenschlüssels zurück, sollte er sich ändern.

Python

Das folgende Beispiel für Python zeigt, wie Sie den Metadatenserver programmatisch auf Änderungen überwachen können.

In diesem Beispiel wird das Anfangs-ETag auf 0 gesetzt. Der Metadatenserver gibt keine Antwort mit 0 als ETag-Wert zurück. Wenn 0 in einer Anfrage als letztes ETag erscheint, antwortet der Metadatenserver mit dem aktuellen Wert und dem ETag. Dadurch wird ein Teil des Codes gespart, der zum Abrufen des Anfangswerts und des ETags erforderlich ist.

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

Zeitlimits festlegen

Wenn Sie möchten, dass Ihre wait-for-change-Anfrage nach einer bestimmten Anzahl von Sekunden abläuft, können Sie den Parameter timeout_sec festlegen. Der Parameter timeout_sec beschränkt die Wartezeit Ihrer Anfrage auf die von Ihnen angegebene Anzahl an Sekunden. Erreicht die Anfrage diesen Wert, ruft sie den aktuellen Inhalt des Metadatenschlüssels auf.

Wenn Sie den timeout_sec-Parameter einrichten, wird die Anfrage jeweils unabhängig davon, ob sich die Metadatenwerte verändert haben, nach Ablauf der Zeit zurückgegeben. Nur ganze Zahlen dürfen als Zeitlimit festgelegt werden.

Linux

  1. Stellen Sie eine Verbindung zu Ihrer Linux-VM her.
  2. Verwenden Sie in Ihrer Linux-VM das curl-Tool, um eine Abfrage zu stellen.

    • Führen Sie den folgenden Befehl aus, um eine wait-for-change-Anfrage mit einem Zeitüberschreitungswert für den Metadateneintrag einer VM-Instanz durchzuführen:

      curl "http://metadata.google.internal/computeMetadata/v1/instance/METADATA_KEY?wait_for_change=true&timeout_sec=TIMEOUT" -H "Metadata-Flavor: Google"
      
    • Führen Sie den folgenden Befehl aus, um eine wait-for-change-Anfrage mit einem Zeitüberschreitungswert für einen Projektmetadateneintrag durchzuführen:

      curl "http://metadata.google.internal/computeMetadata/v1/project/METADATA_KEY?wait_for_change=true&timeout_sec=TIMEOUT" -H "Metadata-Flavor: Google"
      

    Ersetzen Sie Folgendes:

    • METADATA_KEY: der Instanz- oder Projektmetadatenschlüssel, für den Sie den Wert abfragen möchten.
    • TIMEOUT: der Zeitüberschreitungswert.

Mit dem folgenden Befehl wird beispielsweise eine wait-for-change-Anfrage ausgeführt, die nach 360 Sekunden mit einer Zeitüberschreitung abläuft:

  user@myinst:~$ curl "http://metadata.google.internal/computeMetadata/v1/instance/tags?wait_for_change=true&timeout_sec=360" -H "Metadata-Flavor: Google"
  

Windows

  1. Stellen Sie eine Verbindung zu Ihrer Windows-VM her.
  2. Verwenden Sie in Ihrer Windows-VM den Befehl Invoke-RestMethod, um eine Abfrage zu stellen.

    • Führen Sie den folgenden Befehl aus, um eine wait-for-change-Anfrage mit einem Zeitüberschreitungswert für den Metadateneintrag einer VM-Instanz durchzuführen:

      $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
      
    • Führen Sie den folgenden Befehl aus, um eine wait-for-change-Anfrage mit einem Zeitüberschreitungswert für einen Projektmetadateneintrag durchzuführen:

      $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
      

    Ersetzen Sie Folgendes:

    • METADATA_KEY: der Instanz- oder Projektmetadatenschlüssel, für den Sie den Wert abfragen möchten.
    • TIMEOUT: der Zeitüberschreitungswert.

Mit dem folgenden Befehl wird beispielsweise eine wait-for-change-Anfrage ausgeführt, die nach 360 Sekunden mit einer Zeitüberschreitung abläuft:

  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
  

Statuscodes

Wenn Sie eine wait-for-change-Anfrage ausführen, gibt der Metadatenserver Standard-HTTP-Statuscodes zurück, um Erfolg oder Misserfolg anzuzeigen. Tritt ein Fehler auf, kann es sein, dass der Metadatenserver Ihre Anfrage abweist und Ihnen einen Fehlercode schickt. Geschieht dies, sollten Sie Ihre Anwendung so ändern, dass sie fehlertolerant ist und diese Art von Fehlern erkennen und mit ihnen umgehen kann.

Mögliche Statusanzeigen des Metadatenservers:

Status Beschreibung
HTTP 200 Fertig! Ein Wert wurde geändert oder der für timeout_sec angegebene Wert wurde erreicht und die Anfrage wurde erfolgreich beantwortet.
Error 400 Ihre Anfrage war ungültig. Bitte korrigieren Sie Ihre Anfrage und versuchen Sie es noch einmal.
Error 404 Der Metadatenwert, den Sie angegeben haben, existiert nicht mehr. Der Metadatenserver zeigt diesen Fehler an, wenn Ihre Metadaten gelöscht wurden, während Sie auf eine Veränderung warten.
Error 503 Ein temporärer Serverfehler oder ein temporäres Wartungsereignis ist aufgetreten. Wiederholen Sie die Anfrage.

Beschränkungen

  • Anfragen mit dem Header X-Forwarded-For werden automatisch vom Metadatenserver abgewiesen. Dieser Header zeigt normalerweise an, dass die Anfrage weitergeleitet wurde und eventuell nicht von einem autorisierten Nutzer stammt. Aus Sicherheitsgründen werden Anfragen dieser Art abgelehnt.

  • Wenn Sie den Befehl curl verwenden, um Metadaten vom Server abzurufen, beachten Sie, dass einige codierte Zeichen im Anfragepfad nicht unterstützt werden. Codierte Zeichen werden nur im Abfragepfad unterstützt.

    Die folgende Anforderung funktioniert beispielsweise eventuell nicht:

    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"

    Damit diese Anfrage funktioniert, ersetzen Sie das nicht unterstützte codierte Zeichen im Anfragepfad (%40) durch den entsprechenden zulässigen Wert (@).

    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"

    In der folgenden Tabelle sind die codierten Zeichen aufgeführt, die in Anfragepfaden nicht unterstützt werden.

    Codiertes Zeichen Zulässiger Wert
    %21
    
    !
    %24
    
    $
    %27
    
    '
    %28
    
    (
    %29
    
    )
    %2A
    
    *
    %2C
    
    ,
    %40
    
    @

Benutzerdefinierte Metadaten für Ihre VMs aufrufen

Sie können die benutzerdefinierten Metadatenwerte für Ihre Compute Engine-VMs auf eine der folgenden Arten aufrufen:

Projektweite Metadaten ansehen

Verwenden Sie eine der folgenden Methoden, um benutzerdefinierte Metadaten aufzurufen, die für alle VMs in Ihrem Projekt gelten.

Console

  1. Rufen Sie in der Google Cloud Console die Seite Metadaten auf.

    Zur Seite "Metadaten"

    • Auf dem Tab Metadaten können Sie die meisten Ihrer benutzerdefinierten Projektmetadaten mit Ausnahme von SSH-Schlüsselmetadaten überprüfen.
    • Auf dem Tab SSH-Schlüssel können Sie alle Metadaten Ihres SSH-Schlüssels auf Projektebene überprüfen.

gcloud

Verwenden Sie den Befehl gcloud compute project-info describe, um projektweite Metadaten abzufragen:

gcloud compute project-info describe --flatten="commonInstanceMetadata[]"

Die Ausgabe sieht in etwa so aus:

---
fingerprint: HcSFdS_1_1I=
items:
- key: ssh-keys
  value: USERNAME:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDWZ...
kind: compute#metadata

REST

Erstellen Sie zum Abfragen von Projektmetadaten eine GET-Anfrage an die project.get-Methode.

Ersetzen Sie dabei PROJECT_ID durch Ihre Projekt-ID.

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID

Die Ausgabe sieht in etwa so aus:

"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"
    }
  ]
}, ...

Zonale Projektmetadaten aufrufen

Verwenden Sie eine der folgenden Methoden, um benutzerdefinierte Metadaten aufzurufen, die für alle VM-Instanzen in einer bestimmten Zone in einem Projekt gelten.

gcloud

Verwenden Sie den Befehl gcloud beta compute project-zonal-metadata describe, um die benutzerdefinierten projektzonalen Metadaten abzufragen.

gcloud beta compute project-zonal-metadata describe \
    --zone=ZONE \
    --project=PROJECT_ID

Ersetzen Sie Folgendes:

  • PROJECT_ID: Ihre Projekt-ID.
  • ZONE: die Zone, für die Sie die projektzonalen Projektmetadaten aufrufen möchten.

Die Ausgabe sieht in etwa so aus:

{
  "fingerprint": "VlRIl8dx9vk=",
  "metadata": {
    items: {
      "key-1": "value-1",
      "key-2": "value-2"
    }
  }
}

REST

Senden Sie eine GET-Anfrage an die Methode instanceSettings().get, um die benutzerdefinierten projektzonalen Metadaten abzufragen.

GET https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/instanceSettings

Ersetzen Sie Folgendes:

  • PROJECT_ID: Ihre Projekt-ID.
  • ZONE: die Zone, für die Sie die projektzonalen Projektmetadaten aufrufen möchten.

Die Ausgabe sieht in etwa so aus:

{
  "fingerprint": "VlRIl8dx9vk=",
  "metadata": {
    items: {
      "key-1": "value-1",
      "key-2": "value-2"
    }
  }
}

Instanzmetadaten aufrufen

Verwenden Sie eine der folgenden Methoden, um Metadaten aufzurufen, die für eine einzelne VM in Ihrem Projekt gelten.

Console

  1. Rufen Sie in der Google Cloud Console die Seite VM-Instanzen auf.

    Zu „VM-Instanzen“

  2. Klicken Sie auf den Namen der VM, für die Sie Metadaten aufrufen möchten.

    • SSH-Schlüssel für diese VM. Sehen Sie sich im Abschnitt Sicherheit und Zugriff das Feld SSH-Schlüssel an.

      • Der Wert von None gibt an, dass keine SSH-Schlüssel in Instanzmetadaten gespeichert sind.

      • Jeder andere Wert gibt an, dass SSH-Schlüssel in Instanzmetadaten gespeichert sind.

    • SSH-Schlüssel für ein Projekt. Sehen Sie sich im Abschnitt Sicherheit und Zugriff das Feld Projektweite SSH-Schlüssel blockieren an.

      • Der Wert On gibt an, dass der Wert des Metadatenschlüssels block-project-ssh-keys in den Instanzmetadaten TRUE ist.

      • Der Wert von Off gibt an, dass der Metadatenschlüssel block-project-ssh-keys den Wert FALSE hat oder der Schlüssel nicht festgelegt ist.

    • Alle anderen benutzerdefinierten Metadaten. Rufen Sie den Abschnitt Benutzerdefinierte Metadaten auf. Sie sehen alle benutzerdefinierten Metadatenschlüssel und -werte außer SSH-Schlüsselmetadaten.

gcloud

Verwenden Sie den Befehl gcloud compute instances describe, um Instanzmetadaten abzufragen:

gcloud compute instances describe VM_NAME --flatten="metadata[]"

Ersetzen Sie VM_NAME durch den Namen der VM, für die Sie Metadaten suchen möchten.

Die Ausgabe sieht in etwa so aus:

---
fingerprint: MTgTJ5m-Cjs=
items:
- key: enable-oslogin
  value: 'true'
kind: compute#metadata

REST

Um Metadaten für eine bestimmte VM abzufragen, senden Sie eine GET-Anfrage an die instances.get-Methode.

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME

Die Ausgabe sieht in etwa so aus:

......
"metadata": {
"kind": "compute#metadata",
"fingerprint": "XXXXXXVo=",
"items": [
  {
    "key": "enable-oslogin",
    "value": "true"
  }
]
},....

Ersetzen Sie Folgendes:

  • PROJECT_ID: Ihre Projekt-ID
  • ZONE: die Zone, in der sich die VM befindet
  • VM_NAME: der Name der VM

Nächste Schritte