Visualizza ed esegui query sui metadati della VM

Ogni macchina virtuale (VM) archivia i propri metadati nelle directory su un server metadati. La tua VM ha automaticamente accesso API del server dei metadati senza alcuna autorizzazione aggiuntiva. Puoi utilizzare i metodi descritti nelle seguenti sezioni di questo documento per: visualizza ed esegui query sui valori dei metadati della VM:

Se si verificano errori durante l'accesso al server dei metadati, esamina Risoluzione dei problemi di accesso al server dei metadati.

Prima di iniziare

  • Per le VM Windows Server, utilizza PowerShell 3.0 o versioni successive. Ti consigliamo di utilizzare ctrl+v per incollare i blocchi di codice copiati.
  • Rivedi le nozioni di base su come vengono definiti i metadati della VM per Compute Engine. categorizzati e organizzati. Per ulteriori informazioni, vedi Informazioni sui metadati della VM.
  • Se non l'hai già fatto, configura l'autenticazione. Autenticazione è Il processo di verifica dell'identità per l'accesso ai servizi e alle API di Google Cloud. Per eseguire codice o esempi da un ambiente di sviluppo locale, puoi eseguire l'autenticazione Compute Engine come segue.

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. Installa Google Cloud CLI, quindi initialize eseguendo questo comando:

      gcloud init
    2. Set a default region and zone.
    3. Python

      Per utilizzare gli Python esempi in questa pagina in una località dell'ambiente di sviluppo, installare e inizializzare gcloud CLI quindi configura Credenziali predefinite dell'applicazione con le tue credenziali utente.

      1. Installa Google Cloud CLI.
      2. Per initialize gcloud CLI, esegui questo comando:

        gcloud init
      3. Crea credenziali di autenticazione locali per il tuo Account Google:

        gcloud auth application-default login

      Per ulteriori informazioni, vedi Set up authentication for a local development environment.

      REST

      Per utilizzare gli esempi di API REST in questa pagina in un ambiente di sviluppo locale, utilizzi le credenziali che fornisci a gcloud CLI.

        Installa Google Cloud CLI, quindi initialize eseguendo questo comando:

        gcloud init

      Per ulteriori informazioni, vedi Esegui l'autenticazione per l'utilizzo di REST nella documentazione sull'autenticazione di Google Cloud.

Ruoli obbligatori

Per visualizzare i metadati personalizzati sono necessari i ruoli e le autorizzazioni seguenti all'esterno della VM utilizzando la console Google Cloud, Google Cloud CLI o REST. Se esegui in modo programmatico query sui metadati dall'interno della VM, solo i ruoli e le autorizzazioni per la connessione alla VM.

Per ottenere le autorizzazioni necessarie per visualizzare i metadati personalizzati dall'esterno della VM, chiedi all'amministratore di concederti seguenti ruoli IAM:

Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso.

Questi ruoli predefiniti le autorizzazioni necessarie per visualizzare i metadati personalizzati dall'esterno della VM. Per vedere le autorizzazioni esatte obbligatorie, espandi la sezione Autorizzazioni obbligatorie:

Autorizzazioni obbligatorie

Per visualizzare i metadati personalizzati dall'esterno della VM sono necessarie le seguenti autorizzazioni:

  • Per visualizzare i metadati di progetto personalizzati: compute.projects.get del progetto
  • Per visualizzare i metadati di zona personalizzati: compute.instanceSettings.get sulle impostazioni dell'istanza nella zona richiesta del progetto
  • Per visualizzare i metadati personalizzati per un'istanza VM: compute.instances.get sulla VM
  • Se le VM utilizzano account di servizio: iam.serviceAccounts.actAs sugli account di servizio o sul progetto

Potresti anche riuscire a ottenere queste autorizzazioni con ruoli personalizzati e altri ruoli predefiniti.

Esegui query sui metadati a livello di programmazione

Dall'interno di una VM, puoi eseguire query in modo programmatico in modo predefinito o personalizzato i valori dei metadati utilizzando strumenti come lo strumento curl su Linux o Invoke-RestMethod su Windows.

Parti di una richiesta di metadati

La seguente tabella riassume le parti principali di una richiesta di query sui metadati.

Componenti Descrizione
URL di base

Tutti i valori dei metadati sono definiti come percorsi secondari i seguenti URL principali:

  • http://metadata.google.internal/computeMetadata/v1
  • http://169.254.169.254/computeMetadata/v1
  • http://metadata.goog/computeMetadata/v1
Intestazione della richiesta

Questa intestazione indica che la richiesta è stata inviata con l'intento il recupero di valori dei metadati, anziché involontariamente da un'origine non sicura, e consente al server dei metadati di restituire i dati richiesti. Se non fornisci questa intestazione, il server dei metadati rifiuta la tua richiesta.

Metadata-Flavor: Google

Eseguire query su una singola voce di metadati

Utilizza i comandi seguenti per eseguire query su una singola voce di metadati.

Linux

  1. Connettiti alla VM Linux.
  2. Dalla VM Linux, utilizza strumento curl per creare una query.

    • Per eseguire una query per una voce di metadati di un'istanza VM, esegui questo comando:

      curl "http://metadata.google.internal/computeMetadata/v1/instance/METADATA_KEY" -H "Metadata-Flavor: Google"
      
    • Per eseguire una query per una voce di metadati di progetto, esegui questo comando:

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

    Sostituisci METADATA_KEY con l'istanza o il progetto chiave di metadati per cui vuoi eseguire una query sul valore.

    Ad esempio, per eseguire una query sull'immagine di avvio per la VM, esegui questa query:

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

    L'output è simile al seguente:

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

Windows

  1. Connettiti alla tua VM Windows.
  2. Dalla VM Windows, utilizza Comando Invoke-RestMethod per creare una query.

    • Per eseguire una query per una voce di metadati di un'istanza VM, esegui questo comando:

      $value = (Invoke-RestMethod `
              -Headers @{'Metadata-Flavor' = 'Google'} `
              -Uri "http://metadata.google.internal/computeMetadata/v1/instance/METADATA_KEY")
      $value
      
    • Per eseguire una query per una voce di metadati di progetto, esegui questo comando:

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

    Sostituisci METADATA_KEY con l'istanza o il progetto chiave di metadati per cui vuoi eseguire una query sul valore.

    Ad esempio, per eseguire una query sull'immagine di avvio per la VM, esegui questa query:

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

    L'output è simile al seguente:

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

Query sulle schede delle directory dei metadati

Usa i comandi seguenti per eseguire query sugli elenchi delle directory dei metadati. Elenco di attività Le schede sono voci di metadati che contengono altre chiavi di metadati. Qualsiasi metadato che termina con una barra finale è un elenco di directory

Linux

  1. Connettiti alla VM Linux.

  2. Dalla VM Linux, esegui questi comandi:

    • Per eseguire una query sulla directory di metadati di un'istanza VM, esegui questo comando:

      curl "http://metadata.google.internal/computeMetadata/v1/instance/METADATA_DIRECTORY_NAME/" -H "Metadata-Flavor: Google"
      
    • Per eseguire una query per una directory di metadati di progetto, esegui questo comando:

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

    Sostituisci METADATA_DIRECTORY_NAME con il nome di l'istanza o la directory dei metadati di progetto per cui vuoi eseguire una query schede.

    Ad esempio, considera la voce disks/, che è una directory di dischi collegato alla VM. Per eseguire una query sulla voce disks/, completa la seguenti passaggi:

    1. Eseguire lo strumento curl nella directory dei dischi.

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

      L'output è simile al seguente:

      0/
      1/
      2/
      
    2. Se vuoi maggiori informazioni sulla directory 0/ del disco, puoi: interroga l'URL specifico di quella directory:

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

      L'output è simile al seguente:

      device-name
      index
      mode
      type
      
    3. Quindi per eseguire una query sul tipo di disco (type) per i dischi 0/, puoi eseguire questo comando:

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

      L'output è simile al seguente:

      PERSISTENT
      

Windows

La voce disks/ è una directory di dischi collegata alla VM. Per eseguire una query sulla voce relativa ai dischi, completa i seguenti passaggi:

  1. Connettiti alla tua VM Windows.

  2. Dalla VM Windows, esegui questi comandi:

    • Per eseguire una query sulla directory di metadati di un'istanza VM, esegui questo comando:

      $value = (Invoke-RestMethod `
              -Headers @{'Metadata-Flavor' = 'Google'} `
              -Uri "http://metadata.google.internal/computeMetadata/v1/instance/METADATA_DIRECTORY_NAME/")
      $value
      
    • Per eseguire una query per una directory di metadati di progetto, esegui questo comando:

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

    Sostituisci METADATA_DIRECTORY_NAME con il nome di l'istanza o la directory dei metadati di progetto per cui vuoi eseguire una query schede.

    Ad esempio, considera la voce disks/, che è una directory di dischi collegato alla VM. Per eseguire una query sulla voce disks/, completa la seguenti passaggi:

    1. Utilizza la Comando Invoke-RestMethod nella directory dei dischi.

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

      L'output è simile al seguente:

      0/
      1/
      2/
      
    2. Se vuoi maggiori informazioni sulla directory 0/ del disco, puoi eseguire una query URL specifico per la directory:

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

      L'output è simile al seguente:

      device-name
      index
      mode
      type
      
    3. Quindi per eseguire una query sul tipo di disco (type) per i dischi 0/, puoi eseguire questo comando:

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

      L'output è simile al seguente:

      PERSISTENT
      

Esegui query ricorrenti sulle schede delle directory

Se vuoi restituire tutti i contenuti di una directory, utilizza lo recursive=true parametro di query con la tua richiesta:

Linux

  1. Connettiti alla VM Linux.

  2. Dalla VM Linux, utilizza lo strumento curl. per eseguire una query.

    • Per eseguire query ricorsive sulle schede di una directory di metadati di un'istanza VM, esegui questo comando:

      curl "http://metadata.google.internal/computeMetadata/v1/instance/METADATA_DIRECTORY_NAME/?recursive=true" -H "Metadata-Flavor: Google"
      
    • Per eseguire query ricorsivamente sugli elenchi per una directory di metadati di progetto, esegui questo comando:

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

    Sostituisci METADATA_DIRECTORY_NAME con il nome dell'istanza o della directory dei metadati di progetto per eseguire una query ricorsiva sulle schede.

    Ad esempio, il comando seguente esegue query ricorsive sull'istanza di metadati per la directory disks/.

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

    L'output è simile al seguente:

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

    Per impostazione predefinita, i contenuti ricorsi vengono restituiti in formato JSON. Se vuoi restituiscono questi contenuti in formato di testo, aggiungi il parametro di query alt=text:

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

    L'output è simile al seguente:

      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. Connettiti alla tua VM Windows.

  2. Dalla VM Windows, utilizza Comando Invoke-RestMethod per creare una query.

    • Per eseguire query ricorsive sulle schede di una directory di metadati di un'istanza VM, esegui questo comando:

      $value = (Invoke-RestMethod `
                -Headers @{'Metadata-Flavor' = 'Google'} `
                -Uri "http://metadata.google.internal/computeMetadata/v1/instance/METADATA_DIRECTORY_NAME/?recursive=true")
      $value
      
    • Per eseguire query ricorsivamente sugli elenchi per una directory di metadati di progetto, esegui questo comando:

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

    Sostituisci METADATA_DIRECTORY_NAME con il nome dell'istanza o della directory dei metadati di progetto per eseguire una query ricorsiva sulle schede.

    Ad esempio, il comando seguente esegue query ricorsive sull'istanza di metadati per la directory disks/.

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

    L'output è simile al seguente:

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

    Per impostazione predefinita, i contenuti ricorsi vengono restituiti in formato JSON. Se vuoi restituiscono questi contenuti in formato di testo, aggiungi il parametro di query 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
    

    L'output è simile al seguente:

    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
    

Formatta l'output delle query

Per impostazione predefinita, ogni endpoint ha un formato predefinito per la risposta. Alcuni endpoint potrebbe restituire dati in formato JSON per impostazione predefinita, mentre altri endpoint potrebbero restituire come stringa. Puoi eseguire l'override della specifica predefinita per il formato dei dati utilizzando i parametri di ricerca alt=json o alt=text, che restituiscono i dati in JSON in formato stringa o come rappresentazione di testo normale.

Linux

  1. Connettiti alla VM Linux.
  2. Dalla VM Linux, utilizza lo strumento curl. per eseguire una query.

    • Modificare il formato dei dati di risposta alla query per i metadati di un'istanza VM esegui questo comando:

      curl "http://metadata.google.internal/computeMetadata/v1/instance/METADATA_KEY?alt=DATA_FORMAT" -H "Metadata-Flavor: Google"
      
    • Per modificare il formato dei dati di risposta alla query per un metadato di progetto esegui questo comando:

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

    Sostituisci quanto segue:

    • METADATA_KEY: l'istanza o il progetto chiave di metadati per cui vuoi eseguire una query sul valore.
    • DATA_FORMAT: il formato in cui vuoi i dati delle risposte alla query, ad esempio text o json.

Esempio

Ad esempio, la chiave tags restituisce automaticamente i dati in formato JSON. Puoi restituire dati in formato testo specificando il parametro di query alt=text.

Query predefinita

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

L'output è simile al seguente:

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

Query con formattazione

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

L'output è simile al seguente:

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

Windows

  1. Connettiti alla tua VM Windows.
  2. Dalla VM Windows, utilizza Comando Invoke-RestMethod per creare una query.

    • Modificare il formato dei dati di risposta alla query per i metadati di un'istanza VM esegui questo comando:

      $value = (Invoke-RestMethod `
                -Headers @{'Metadata-Flavor' = 'Google'} `
                -Uri "http://metadata.google.internal/computeMetadata/v1/instance/METADATA_KEY?alt=DATA_FORMAT")
      $value
      
    • Per modificare il formato dei dati di risposta alla query per un metadato di progetto esegui questo comando:

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

    Sostituisci quanto segue:

    • METADATA_KEY: l'istanza o il progetto chiave di metadati per cui vuoi eseguire una query sul valore.
    • DATA_FORMAT: il formato in cui vuoi i dati delle risposte alla query, ad esempio text o json.

Esempio

Ad esempio, la chiave tags restituisce automaticamente i dati in formato JSON. Puoi restituire dati in formato testo specificando il parametro di query alt=text.

Query predefinita

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

L'output è simile al seguente:

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

Query con formattazione

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

L'output è simile al seguente:

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

Eseguire query sulle modifiche ai metadati utilizzando la funzionalità wait-for-change

Dato che i valori dei metadati possono cambiare mentre la VM è in esecuzione, al server di metadati possono essere avvisate delle modifiche apportate ai metadati utilizzando Funzionalità wait-for-change. Con questa opzione, la richiesta restituisce solo quando i metadati specificati sono stati modificati.

Puoi utilizzare questa funzione sui metadati personalizzati o su quelli definiti dal server. Pertanto, se cambia qualcosa nella VM o nel progetto o se qualcuno aggiorna di metadati, puoi reagire in modo programmatico alla modifica.

Ad esempio, puoi eseguire una sulla chiave tags, in modo che venga restituita solo se i contenuti i metadati dei tag sono stati modificati. Quando la richiesta viene restituita, fornisce il nuovo della chiave di metadati.

La funzionalità wait-for-change ti consente anche di corrispondere alla tua richiesta e impostare timeout.

Quando utilizzi la funzionalità wait-for-change, considera quanto segue:

  • Puoi eseguire una richiesta wait-for-change solo su un dell'endpoint di metadati o in modo ricorsivo sui contenuti di una directory. Non puoi esegui una richiesta wait-for-change su un elenco di directory. Se provi a farlo, il server dei metadati non riesce a soddisfare la tua richiesta e restituisce un Errore 400 Richiesta non valida.

  • Non puoi eseguire una richiesta wait-for-change per un servizio token dell'account. Se provi a inviare una richiesta wait-for-change al servizio l'URL del token dell'account, la richiesta non riesce immediatamente e restituisce un Errore 400 Richiesta non valida.

Per eseguire una richiesta wait-for-change, esegui una query su una chiave di metadati e aggiungi il token Parametro di query ?wait_for_change=true:

Linux

  1. Connettiti alla VM Linux.
  2. Dalla VM Linux, utilizza lo strumento curl. per eseguire una query.

    • Per eseguire una richiesta wait-for-change per una voce di metadati di un'istanza VM, esegui questo comando:

      curl "http://metadata.google.internal/computeMetadata/v1/instance/METADATA_KEY?wait_for_change=true" -H "Metadata-Flavor: Google"
      
    • Per eseguire una richiesta wait-for-change per una voce di metadati di progetto, esegui questo comando:

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

    Sostituisci METADATA_KEY con l'istanza o il progetto chiave di metadati per cui vuoi eseguire una query sul valore.

    Dopo una modifica alla chiave di metadati specificata, la query restituisce con il nuovo valore.

Esempi

In questo esempio, se viene effettuata una richiesta a setInstanceTags method, il valore richiesta restituisce con i nuovi valori:

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

L'output è simile al seguente:

  http-server
  db-client
  

Puoi anche eseguire una richiesta wait-for-change in modo ricorsivo contenuti di una directory:

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

In caso di modifiche, il server dei metadati restituisce i nuovi contenuti:

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

Windows

  1. Connettiti alla tua VM Windows.
  2. Dalla VM Windows, utilizza Comando Invoke-RestMethod per creare una query.

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

    • Per eseguire una richiesta wait-for-change per una voce di metadati di un'istanza VM, esegui questo comando:

      $value = (Invoke-RestMethod `
              -Headers @{'Metadata-Flavor' = 'Google'} `
              -Uri "http://metadata.google.internal/computeMetadata/v1/instance/METADATA_KEY?wait_for_change=true")
      $value
      
    • Per eseguire una richiesta wait-for-change per una voce di metadati di progetto, esegui questo comando:

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

    Sostituisci METADATA_KEY con l'istanza o il progetto chiave di metadati per cui vuoi eseguire una richiesta wait-for-change.

    Dopo una modifica alla chiave di metadati specificata, la query restituisce con il nuovo valore.

Esempi

Dopo una modifica alla chiave di metadati specificata, la query restituisce con il nuovo valore. In questo esempio, se viene effettuata una richiesta alla setInstanceTags method, la richiesta viene restituita con i nuovi valori:

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

L'output è simile al seguente:

  http-server
  db-client
  

Puoi anche eseguire una richiesta wait-for-change in modo ricorsivo sui contenuti di un directory:

  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
  

In caso di modifiche, il server dei metadati restituisce i nuovi contenuti:

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

Utilizzare gli ETag

Quando invii una query wait-for-change, il server dei metadati restituisce un la risposta se sono state apportate modifiche ai contenuti dei metadati. Tuttavia, esiste una race condition intrinseca tra un aggiornamento dei metadati e wait-for-change richiesta in fase di invio, pertanto è utile disporre di un modo affidabile che stai ricevendo il valore più recente dei metadati.

Per aiutarti, puoi utilizzare il parametro di query last_etag, che confronta il valore ETag fornito con il valore ETag salvato sul server dei metadati. Se se i valori dell'ETag corrispondono, la richiesta wait-for-change viene accettata. Se I valori ETag non corrispondono, questo indica che i contenuti dei metadati sono modificato dall'ultima volta che hai recuperato il valore ETag e i metadati che restituisce immediatamente l'ultimo valore.

VM Linux

Per ottenere il valore ETag corrente per una chiave di metadati, completa quanto segue passaggi:

  1. Connettiti alla VM Linux.
  2. Invia una richiesta alla chiave e stampa le intestazioni. A questo scopo, utilizza Strumento curl con il flag -v:

    • Per ottenere l'ETag corrente per una voce di metadati di un'istanza VM, esegui seguente comando:

      curl -v "http://metadata.google.internal/computeMetadata/v1/instance/METADATA_KEY" -H "Metadata-Flavor: Google"
      
    • Per ottenere l'ETag corrente per una voce di metadati di progetto, esegui seguente comando:

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

    Sostituisci METADATA_KEY con l'istanza oppure chiave dei metadati di progetto per cui vuoi eseguire una query sul valore.

    Ad esempio, il comando seguente ottiene il valore ETag corrente per il valore Chiave di metadati dell'istanza tags.

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

    L'output è simile al seguente:

    * 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. Puoi quindi utilizzare quel valore ETag con lo strumento curl. nella tua richiesta wait-for-change:

    • Per utilizzare il valore ETag per la richiesta di istanza wait-for-change per i metadati, esegui questo comando:

      curl "http://metadata.google.internal/computeMetadata/v1/instance/METADATA_KEY?wait_for_change=true&last_etag=ETAG" -H "Metadata-Flavor: Google"
      
    • Per utilizzare il valore ETag per la richiesta wait-for-change del progetto per i metadati, esegui questo comando:

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

    Sostituisci quanto segue:

    • METADATA_KEY: l'istanza o il progetto chiave di metadati per cui vuoi eseguire una query sul valore.
    • ETAG: il valore ETag per la chiave dei metadati.

    In questo esempio, il comando seguente utilizza il valore ETag per il parametro tags chiave e query per la voce dei metadati dell'istanza.

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

    Il server di metadati corrisponde al valore ETag specificato e se questo valore modifiche, la richiesta viene restituita con i nuovi contenuti della chiave dei metadati.

VM Windows

Per ottenere il valore ETag corrente per una chiave di metadati, completa quanto segue passaggi:

  1. Connettiti alla tua VM Windows.
  2. Invia una richiesta alla chiave e stampa le intestazioni. Su Windows, utilizza la Comando Invoke-WebRequest.

    • Per ottenere l'ETag corrente per una voce di metadati di un'istanza VM, esegui seguente comando:

      $value = (Invoke-WebRequest -Headers @{'Metadata-Flavor' = 'Google'} `
      -Uri http://metadata.google.internal/computeMetadata/v1/instance/METADATA_KEY)
      
      $value.Headers.ETag
      
    • Per ottenere l'ETag corrente per una voce di metadati di progetto, esegui seguente comando:

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

    Sostituisci METADATA_KEY con l'istanza oppure chiave dei metadati di progetto per cui vuoi eseguire una query sul valore.

    Ad esempio, il comando seguente ottiene il valore ETag corrente per il valore Chiave di metadati dell'istanza tags.

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

    $value.Headers.ETag

    L'output è simile al seguente:

      * 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. Potrai quindi utilizzare quel valore ETag nella richiesta wait-for-change:

    • Per utilizzare il valore ETag per la richiesta di istanza wait-for-change per i metadati, esegui questo comando:

      $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
      
    • Per utilizzare il valore ETag per la richiesta wait-for-change del progetto per i metadati, esegui questo comando:

      $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
      

    Sostituisci quanto segue:

    • METADATA_KEY: l'istanza o il progetto chiave di metadati per cui vuoi eseguire una query sul valore.
    • ETAG: il valore ETag per la chiave dei metadati.

    In questo esempio, il comando seguente utilizza il valore ETag per il parametro tags chiave e query per la voce dei metadati dell'istanza.

      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
      

    Il server di metadati corrisponde al valore ETag specificato e se questo valore modifiche, la richiesta viene restituita con i nuovi contenuti della chiave dei metadati.

Python

Il seguente esempio Python mostra come osservare in modo programmatico l'oggetto server di metadati per le modifiche.

In questo esempio, l'ETag iniziale è impostato su 0. Il server dei metadati non restituiscono una risposta con 0 come valore ETag. Quando 0 è specificato come l'ultimo ETag in una richiesta, il server metadati risponde con il valore corrente e ETag. Così facendo si risparmia una parte del codice necessario per ottenere il valore iniziale 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"]

Imposta timeout

Se vuoi che la tua richiesta wait-for-change scada dopo un determinato di secondi, puoi impostare il parametro timeout_sec. timeout_sec limita il tempo di attesa della richiesta al numero di secondi specificato, e quando la richiesta raggiunge questo limite, restituisce i contenuti attuali della chiave dei metadati.

Quando imposti il parametro timeout_sec, la richiesta viene sempre restituita dopo il di secondi specificato, indipendentemente dal fatto che il valore dei metadati abbia effettivamente è cambiato. È possibile impostare solo un valore intero per il timeout.

Linux

  1. Connettiti alla VM Linux.
  2. Dalla VM Linux, utilizza lo strumento curl. per eseguire una query.

    • Eseguire una richiesta wait-for-change con un valore di timeout per una VM. di metadati dell'istanza, esegui questo comando:

      curl "http://metadata.google.internal/computeMetadata/v1/instance/METADATA_KEY?wait_for_change=true&timeout_sec=TIMEOUT" -H "Metadata-Flavor: Google"
      
    • Per eseguire una richiesta wait-for-change con un valore di timeout per un dei metadati di progetto, esegui questo comando:

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

    Sostituisci quanto segue:

    • METADATA_KEY: l'istanza o il progetto chiave di metadati per cui vuoi eseguire una query sul valore.
    • TIMEOUT: il valore di timeout.

Ad esempio, il seguente comando esegue una richiesta wait-for-change che è impostato per scadere dopo 360 secondi:

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

Windows

  1. Connettiti alla tua VM Windows.
  2. Dalla VM Windows, utilizza Comando Invoke-RestMethod per creare una query.

    • Eseguire una richiesta wait-for-change con un valore di timeout per una VM. di metadati dell'istanza, esegui questo comando:

      $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
      
    • Per eseguire una richiesta wait-for-change con un valore di timeout per un dei metadati di progetto, esegui questo comando:

      $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
      

    Sostituisci quanto segue:

    • METADATA_KEY: l'istanza o il progetto chiave di metadati per cui vuoi eseguire una query sul valore.
    • TIMEOUT: il valore di timeout.

Ad esempio, il seguente comando esegue una richiesta wait-for-change che è impostato per scadere dopo 360 secondi:

  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
  

Codici di stato

Quando esegui una richiesta wait-for-change, il server dei metadati restituisce Codici di stato HTTP per indicare l'esito positivo o negativo. In caso di errori, condizioni di rete possono causare l'esito negativo della richiesta e la restituzione del server dei metadati un codice di errore. In questi casi, devi progettare l'applicazione in modo che a tolleranza di errore e in grado di riconoscere e gestire questi errori.

I possibili stati restituiti dal server di metadati sono:

Stato Descrizione
HTTP 200 Operazione riuscita. È stato modificato un valore oppure hai raggiunto il valore di timeout_sec specificato e la richiesta restituito correttamente.
Error 400 La tua richiesta non è valida. Correggi la query e riprova a inviare la richiesta.
Error 404 Il valore dei metadati specificato non esiste più. Il server dei metadati restituisce questo errore anche se i metadati vengono eliminati mentre sei in attesa di una modifica.
Error 503 Si è verificato un errore temporaneo del server o un evento di manutenzione temporaneo. Riprova a inviare la richiesta.

Limitazioni

  • Tutte le richieste che contengono l'intestazione X-Forwarded-For vengono rifiutate automaticamente dal server dei metadati. Questa intestazione in genere indica che la richiesta è stata inviata tramite proxy e potrebbe non essere una richiesta effettuata da un utente autorizzato. Per motivi di sicurezza, tutte le richieste di questo tipo sono rifiutate.

  • Quando utilizzi il comando curl per recuperare i metadati dal server, tieni presente che alcuni caratteri codificati non sono supportati nel percorso della richiesta. I caratteri codificati sono supportati solo nel percorso di query.

    Ad esempio, la seguente richiesta potrebbe non funzionare:

    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"

    Affinché questa richiesta funzioni, devi sostituire il carattere codificato non supportato nel percorso di richiesta (%40) con il valore accettato equivalente (@).

    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"

    La seguente tabella riassume i caratteri codificati che non sono supportati in un percorso di richiesta.

    Carattere codificato Valore accettato
    %21
    !
    %24
    $
    %27
    '
    %28
    (
    %29
    )
    %2A
    *
    %2C
    ,
    %40
    @

Visualizza i metadati personalizzati per le tue VM

Puoi visualizzare i valori dei metadati personalizzati per le tue VM di Compute Engine in uno dei nei seguenti modi:

Visualizza i metadati di progetto

Per visualizzare i metadati personalizzati che si applicano a tutte le VM nel progetto, utilizza una uno dei seguenti metodi.

Console

  1. Nella console Google Cloud, vai alla pagina Metadati.

    Vai alla pagina Metadati

    Nella pagina Metadati puoi vedere un elenco di tutti i metadati di progetto personalizzati per il tuo progetto.

gcloud

Utilizza la Comando gcloud compute project-info describe per eseguire query sui metadati di progetto:

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

L'output è simile al seguente:

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

REST

Per eseguire query sui metadati di progetto, crea una richiesta GET al Metodo project.get.

Sostituisci PROJECT_ID con l'ID progetto.

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

L'output è simile al seguente:

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

Visualizza metadati di zona

Per visualizzare i metadati personalizzati che si applicano a tutte le istanze VM in una zona specifica in un progetto, usa uno dei seguenti metodi.

gcloud

Per eseguire query sui metadati di zona personalizzati, utilizza Comando gcloud compute project-zonal-metadata describe.

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

Sostituisci quanto segue:

  • PROJECT_ID: il tuo ID progetto
  • ZONE: la zona per la quale vuoi visualizzare metadati di zona.

L'output è simile al seguente:

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

REST

Per eseguire query sui metadati di zona personalizzati, effettua una richiesta GET alla Metodo instanceSettings().get

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

Sostituisci quanto segue:

  • PROJECT_ID: il tuo ID progetto
  • ZONE: la zona per la quale vuoi visualizzare metadati di zona.

L'output è simile al seguente:

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

Visualizza i metadati dell'istanza

Per visualizzare i metadati che si applicano a una singola VM nel tuo progetto, utilizza uno dei utilizzando i seguenti metodi.

Console

  1. Nella console Google Cloud, vai alla pagina Istanze VM.

    Vai a Istanze VM

  2. Fai clic sul nome della VM di cui vuoi visualizzare i metadati.

    • Chiavi SSH per questa VM. Nella sezione Sicurezza e accesso, visualizza il campo Chiavi SSH.

      • Il valore None indica che non ci sono chiavi SSH archiviate nell'istanza metadati.

      • Qualsiasi altro valore indica che sono presenti chiavi SSH archiviate nell'istanza metadati.

    • Chiavi SSH per un progetto. Nella sezione Sicurezza e accesso, visualizza il campo Blocca chiavi SSH a livello di progetto.

      • Il valore On indica che il valore della chiave dei metadati block-project-ssh-keys è TRUE nei metadati dell'istanza.

      • Il valore Off indica che il valore della chiave dei metadati block-project-ssh-keys è FALSE o che la chiave non è impostata.

    • Tutti gli altri metadati personalizzati. Visualizza la sezione Metadati personalizzati. Vedrai tutte le chiavi e i valori dei metadati personalizzati, ad eccezione della chiave SSH metadati.

gcloud

Utilizza la Comando gcloud compute instances describe per eseguire query sui metadati dell'istanza:

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

Sostituisci VM_NAME con il nome della VM che vuoi trovare i metadati.

L'output è simile al seguente:

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

REST

Per eseguire query sui metadati per una VM specifica, invia una richiesta GET alla Metodo instances.get.

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

L'output è simile al seguente:

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

Sostituisci quanto segue:

  • PROJECT_ID: il tuo ID progetto
  • ZONE: la zona in cui si trova la VM
  • VM_NAME: il nome della VM

Passaggi successivi