Visualizza ed esegui query sui metadati della VM


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

Se riscontri errori durante l'accesso al server dei metadati, consulta Risolvere i 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.
  • Esamina le nozioni di base su come vengono definiti, classificati e organizzati i metadati delle VM per Compute Engine. Per ulteriori informazioni, consulta Informazioni sui metadati delle VM.
  • Se non l'hai ancora fatto, configura l'autenticazione. L'autenticazione è la procedura mediante la quale la tua identità viene verificata per l'accesso alle API e ai servizi Google Cloud. Per eseguire codice o esempi da un ambiente di sviluppo locale, puoi autenticarti su Compute Engine selezionando una delle seguenti opzioni:

    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. Install the Google Cloud CLI, then initialize it by running the following command:

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

      Per utilizzare gli Python esempi in questa pagina in un ambiente di sviluppo locale, installa e inizializza l'interfaccia alla gcloud CLI, quindi configura le Credenziali predefinite dell'applicazione con le tue credenziali utente.

      1. Install the Google Cloud CLI.
      2. To initialize the gcloud CLI, run the following command:

        gcloud init
      3. If you're using a local shell, then create local authentication credentials for your user account:

        gcloud auth application-default login

        You don't need to do this if you're using Cloud Shell.

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

      REST

      Per utilizzare gli esempi dell'API REST in questa pagina in un ambiente di sviluppo locale, utilizza le credenziali fornite a gcloud CLI.

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

      Per saperne di più, consulta Eseguire l'autenticazione per l'utilizzo di REST nella documentazione sull'autenticazione di Google Cloud.

Ruoli obbligatori

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

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

Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso a progetti, cartelle e organizzazioni.

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

Autorizzazioni obbligatorie

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

  • Per visualizzare i metadati del progetto personalizzati: compute.projects.get nel progetto
  • Per visualizzare i metadati di zona personalizzati: compute.instanceSettings.get nelle impostazioni dell'istanza nella zona richiesta del progetto
  • Per visualizzare i metadati personalizzati di 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 ottenere queste autorizzazioni con ruoli personalizzati o altri ruoli predefiniti.

Eseguire query sui metadati in modo programmatico

Puoi accedere a tutti i metadati eseguendo query sulle voci dei valori dei metadati programmaticamente da una VM Linux o Windows. All'interno della VM, puoi eseguire query programmatiche sui valori dei metadati in uno dei seguenti modi utilizzando strumenti come curl su Linux o Invoke-RestMethod su Windows:

Endpoint del server di metadati

Per eseguire query sui metadati in modo programmatico, all'interno di una VM sono disponibili i seguenti endpoint del server di metadati:

  • Per tutte le VM, puoi eseguire query sul server di metadati utilizzando l'endpoint HTTP (http://metadata.google.internal/computeMetadata/v1).
  • Per le VM schermate, puoi eseguire query sul server di metadati utilizzando una delle seguenti opzioni:

La maggior parte degli esempi in questo documento utilizza l'endpoint http. Tuttavia, puoi accedere a tutte le stesse voci di metadati indipendentemente dall'utilizzo dell'endpoint https o http.

Parti di una richiesta di metadati

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

Componenti Descrizione
URL di base

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

  • endpoint http:
    • http://metadata.google.internal/computeMetadata/v1
    • http://169.254.169.254/computeMetadata/v1
    • http://metadata.goog/computeMetadata/v1
  • Endpoint https (anteprima):
    • https://metadata.google.internal/computeMetadata/v1
      Questo è l'unico URL supportato durante la fase di anteprima.
Intestazione della richiesta

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

Metadata-Flavor: Google

Esegui una query su una singola voce di metadati

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

Linux

  1. Connettiti alla VM Linux.
  2. Dalla VM Linux, utilizza lo strumento curl per eseguire una query. Per eseguire una query per una voce di metadati di un'istanza VM o di un progetto, esegui il seguente comando:

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

    Sostituisci PATH_TO_METADATA_ENTRY con il percorso della chiave dei metadati del progetto o dell'istanza VM per cui vuoi eseguire una query sul valore. Se la chiave si trova in una sottodirectory della directory dell'istanza o del progetto, assicurati di includere anche la sottodirectory. Ad esempio:

    • Per visualizzare la chiave di metadati project-id, che è archiviata nei metadati del progetto, specifica project/project-id.
    • Per visualizzare la chiave di metadati image, che è archiviata nei metadati dell'istanza VM, specifica instance/image.
    • Per visualizzare il enable-oslogin che può essere memorizzato nella sottodirectory degli attributi dei metadati del progetto o dell'istanza VM, specifica project/attributes/enable-oslogin o instance/attributes/enable-oslogin a seconda del caso d'uso.

    Ad esempio, per eseguire una query sull'immagine di avvio della VM, esegui la seguente 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 VM Windows.
  2. Dalla VM Windows, utilizza il comando Invoke-RestMethod per eseguire una query. Per eseguire una query per una voce di metadati di un'istanza VM o di un progetto, esegui il seguente comando:

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

    Sostituisci PATH_TO_METADATA_ENTRY con il percorso della chiave dei metadati del progetto o dell'istanza VM per cui vuoi eseguire una query sul valore. Se la chiave si trova in una sottodirectory della directory dell'istanza o del progetto, assicurati di includere anche la sottodirectory. Ad esempio:

    • Per visualizzare la chiave di metadati project-id, che è archiviata nei metadati del progetto, specifica project/project-id.
    • Per visualizzare la chiave di metadati image, che è archiviata nei metadati dell'istanza VM, specifica instance/image.
    • Per visualizzare il enable-oslogin che può essere memorizzato nella sottodirectory degli attributi dei metadati del progetto o dell'istanza VM, specifica project/attributes/enable-oslogin o instance/attributes/enable-oslogin a seconda del caso d'uso.

    Ad esempio, per eseguire una query sull'immagine di avvio della VM, esegui la seguente 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

Esegui query sulle voci della directory dei metadati

Utilizza i seguenti comandi per eseguire query sulle schede delle directory dei metadati. Le schede della directory sono voci di metadati che contengono altre chiavi di metadati. Qualsiasi voce di metadati che termina con una barra finale è una voce della directory

Linux

  1. Connettiti alla VM Linux.

  2. Per eseguire una query per una directory dei metadati di un'istanza VM o di un progetto, esegui il seguente comando dalla VM Linux:

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

    Sostituisci PATH_TO_METADATA_DIRECTORY con il percorso della directory dei metadati dell'istanza VM o del progetto per cui vuoi eseguire query ricorsive sulle schede. Ad esempio:

    • Per visualizzare la voce della directory dei metadati del progetto attributes, il percorso da specificare è project/attributes/.
    • Per visualizzare la voce della directory dei metadati dell'istanza VM disks, il percorso da specificare è instance/disks/.

    Ad esempio, prendi in considerazione la voce disks/, che è una directory di dischi collegati alla VM. Per eseguire una query sulla voce disks/, completa i seguenti passaggi:

    1. Esegui il comando dello 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. Per ulteriori informazioni sulla directory del disco 0/, puoi eseguire una query sull'URL specifico della 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. Per eseguire una query sul tipo di disco (type) per i dischi 0/, puoi eseguire quanto segue:

      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 collegati alla VM. Per eseguire una query sulla voce dei dischi:

  1. Connettiti alla VM Windows.

  2. Per eseguire una query per una directory dei metadati di un'istanza VM o di un progetto, esegui il seguente comando dalla VM Windows:

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

    Sostituisci PATH_TO_METADATA_DIRECTORY con il percorso della directory dei metadati dell'istanza VM o del progetto per cui vuoi eseguire query ricorsive sulle schede. Ad esempio:

    • Per visualizzare la voce della directory dei metadati del progetto attributes, il percorso da specificare è project/attributes/.
    • Per visualizzare la voce della directory dei metadati dell'istanza VM disks, il percorso da specificare è instance/disks/.

    Ad esempio, prendi in considerazione la voce disks/, che è una directory di dischi collegati alla VM. Per eseguire una query sulla voce disks/, completa i seguenti passaggi:

    1. Utilizza il 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. Per ulteriori informazioni sulla directory del disco 0/, puoi eseguire una query sull'URL specifico della 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. Per eseguire una query sul tipo di disco (type) per i dischi 0/, puoi eseguire quanto segue:

      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
      

Eseguire query ricorsive sulle schede della directory

Se vuoi restituire tutti i contenuti di una directory, utilizza il parametro di query recursive=true nella 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 un'istanza VM o della directory dei metadati del progetto, esegui il seguente comando:

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

    Sostituisci PATH_TO_METADATA_DIRECTORY con il percorso della directory dei metadati dell'istanza VM o del progetto per cui vuoi eseguire query ricorsive sulle schede. Ad esempio:

    • Per visualizzare la voce della directory dei metadati del progetto attributes, il percorso da specificare è project/attributes/.
    • Per visualizzare la voce della directory dei metadati dell'istanza VM disks, il percorso da specificare è instance/disks/.

    Ad esempio, il seguente comando esegue query ricorsive sulle voci dei metadati dell'istanza 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 ricorsivi vengono restituiti in formato JSON. Se vuoi ripristinare 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 VM Windows.

  2. Dalla VM Windows, utilizza il comando Invoke-RestMethod per eseguire una query. Per eseguire query ricorsive sulle schede di una directory dei metadati di un progetto o di un'istanza VM, esegui il seguente comando:

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

    Sostituisci PATH_TO_METADATA_DIRECTORY con il percorso della directory dei metadati dell'istanza VM o del progetto per cui vuoi eseguire query ricorsive sulle schede. Ad esempio:

    • Per visualizzare la voce della directory dei metadati del progetto attributes, il percorso da specificare è project/attributes/.
    • Per visualizzare la voce della directory dei metadati dell'istanza VM disks, il percorso da specificare è instance/disks/.

    Ad esempio, il seguente comando esegue query ricorsive sulle voci dei metadati dell'istanza 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 ricorsivi vengono restituiti in formato JSON. Se vuoi ripristinare 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 della query

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

Linux

  1. Connettiti alla VM Linux.
  2. Dalla VM Linux, utilizza lo strumento curl per eseguire una query. Per modificare il formato dei dati della risposta alla query per un'istanza VM o una voce dei metadati del progetto, esegui il seguente comando:

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

    Sostituisci quanto segue:

    • Sostituisci PATH_TO_METADATA_ENTRY con il percorso della chiave dei metadati del progetto o dell'istanza VM per cui vuoi eseguire una query sul valore. Se la chiave si trova in una sottodirectory della directory dell'istanza o del progetto, assicurati di includere anche la sottodirectory. Ad esempio:

      • Per visualizzare la chiave di metadati project-id, che è archiviata nei metadati del progetto, specifica project/project-id.
      • Per visualizzare la chiave di metadati image, che è archiviata nei metadati dell'istanza VM, specifica instance/image.
      • Per visualizzare il enable-oslogin che può essere memorizzato nella sottodirectory degli attributi dei metadati del progetto o dell'istanza VM, specifica project/attributes/enable-oslogin o instance/attributes/enable-oslogin a seconda del caso d'uso.
    • DATA_FORMAT: il formato in cui vuoi i dati della risposta alla query, ad esempio text o json.

Esempio

Ad esempio, la chiave tags restituisce automaticamente i dati in formato JSON. In alternativa, puoi restituire i 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 VM Windows.
  2. Dalla VM Windows, utilizza il comando Invoke-RestMethod per eseguire una query. Per modificare il formato dei dati della risposta alla query per un'istanza VM o per una voce dei metadati del progetto, esegui il seguente comando:

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

    Sostituisci quanto segue:

    • Sostituisci PATH_TO_METADATA_ENTRY con il percorso della chiave dei metadati del progetto o dell'istanza VM per cui vuoi eseguire una query sul valore. Se la chiave si trova in una sottodirectory della directory dell'istanza o del progetto, assicurati di includere anche la sottodirectory. Ad esempio:

      • Per visualizzare la chiave di metadati project-id, che è archiviata nei metadati del progetto, specifica project/project-id.
      • Per visualizzare la chiave di metadati image, che è archiviata nei metadati dell'istanza VM, specifica instance/image.
      • Per visualizzare il enable-oslogin che può essere memorizzato nella sottodirectory degli attributi dei metadati del progetto o dell'istanza VM, specifica project/attributes/enable-oslogin o instance/attributes/enable-oslogin a seconda del caso d'uso.
    • DATA_FORMAT: il formato in cui vuoi i dati della risposta alla query, ad esempio text o json.

Esempio

Ad esempio, la chiave tags restituisce automaticamente i dati in formato JSON. In alternativa, puoi restituire i 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

Poiché i valori dei metadati possono cambiare durante l'esecuzione della VM, il server dei metadati può ricevere una notifica delle modifiche dei metadati utilizzando la funzionalità wait-for-change. Con questa opzione, la richiesta restituisce un output solo quando i metadati specificati sono stati modificati.

Puoi utilizzare questa funzionalità sui metadati personalizzati o su quelli definiti dal server, quindi se avviene qualche modifica alla tua VM o al tuo progetto o se qualcuno aggiorna una voce dei metadati personalizzati, puoi reagire alla modifica in modo programmatico.

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

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

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

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

  • Non puoi eseguire una richiesta wait-for-change per un token account di servizio. Se provi a effettuare una richiesta wait-for-change all'URL del token dell'account servizio, la richiesta non va a buon fine immediatamente e restituisce un errore 400 Richiesta non valida.

Per eseguire una richiesta wait-for-change, esegui una query su una chiave dei metadati e accoda il 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 un'istanza VM o una voce dei metadati del progetto, esegui il seguente comando:

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

    Sostituisci PATH_TO_METADATA_ENTRY con il percorso della chiave dei metadati del progetto o dell'istanza VM per cui vuoi eseguire una query sul valore. Se la chiave si trova in una sottodirectory della directory dell'istanza o del progetto, assicurati di includere anche la sottodirectory. Ad esempio:

    • Per visualizzare la chiave di metadati project-id, che è archiviata nei metadati del progetto, specifica project/project-id.
    • Per visualizzare la chiave di metadati image, che è archiviata nei metadati dell'istanza VM, specifica instance/image.
    • Per visualizzare il enable-oslogin che può essere memorizzato nella sottodirectory degli attributi dei metadati del progetto o dell'istanza VM, specifica project/attributes/enable-oslogin o instance/attributes/enable-oslogin a seconda del caso d'uso.

    Dopo una modifica alla chiave dei metadati specificata, la query viene restituita con il nuovo valore.

Esempi

In questo esempio, se viene effettuata una richiesta a setInstanceTags method, la richiesta viene restituita 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 sui 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"
  

Il server dei metadati restituisce i nuovi contenuti in caso di modifiche:

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

Windows

  1. Connettiti alla VM Windows.
  2. Dalla VM Windows, utilizza il comando Invoke-RestMethod per eseguire una query. Per eseguire una richiesta wait-for-change per una voce dei metadati di un progetto o di un'istanza VM, esegui il seguente comando:

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

    Sostituisci PATH_TO_METADATA_ENTRY con il percorso della chiave dei metadati del progetto o dell'istanza VM per cui vuoi eseguire una query sul valore. Se la chiave si trova in una sottodirectory della directory dell'istanza o del progetto, assicurati di includere anche la sottodirectory. Ad esempio:

    • Per visualizzare la chiave di metadati project-id, che è archiviata nei metadati del progetto, specifica project/project-id.
    • Per visualizzare la chiave di metadati image, che è archiviata nei metadati dell'istanza VM, specifica instance/image.
    • Per visualizzare il enable-oslogin che può essere memorizzato nella sottodirectory degli attributi dei metadati del progetto o dell'istanza VM, specifica project/attributes/enable-oslogin o instance/attributes/enable-oslogin a seconda del caso d'uso.

    Dopo una modifica alla chiave dei metadati specificata, la query viene restituita con il nuovo valore.

Esempi

Dopo una modifica alla chiave dei metadati specificata, la query viene restituita con il nuovo valore. In questo esempio, se viene effettuata una richiesta a 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 una 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
  

Il server dei metadati restituisce i nuovi contenuti in caso di modifiche:

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

Utilizzare gli ETag

Quando invii una query wait-for-change, il server dei metadati restituisce una risposta se sono state apportate modifiche ai contenuti dei metadati. Tuttavia, esiste una race condition intrinseca tra un aggiornamento dei metadati e l'emissione di una richiesta wait-for-change, quindi è utile avere un modo affidabile per sapere 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 i valori ETag corrispondono, la richiesta wait-for-change viene accettata. Se i valori ETag non corrispondono, significa che i contenuti dei metadati sono cambiati dall'ultima volta che hai recuperato il valore ETag e il server dei metadati restituisce immediatamente questo valore più recente.

VM Linux

Per ottenere il valore ETag corrente per una chiave dei metadati, completa i seguenti passaggi:

  1. Connettiti alla VM Linux.
  2. Invia una richiesta a quella chiave e stampa le intestazioni. A questo scopo, utilizza lo strumento curl con il flag -v. Per ottenere l'ETag corrente per una voce di metadati di un'istanza VM o di un progetto, esegui il seguente comando:

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

    Sostituisci PATH_TO_METADATA_ENTRY con il percorso della chiave dei metadati del progetto o dell'istanza VM per cui vuoi eseguire una query sul valore. Se la chiave si trova in una sottodirectory della directory dell'istanza o del progetto, assicurati di includere anche la sottodirectory. Ad esempio:

    • Per visualizzare la chiave di metadati project-id, che è archiviata nei metadati del progetto, specifica project/project-id.
    • Per visualizzare la chiave di metadati image, che è archiviata nei metadati dell'istanza VM, specifica instance/image.
    • Per visualizzare il enable-oslogin che può essere memorizzato nella sottodirectory degli attributi dei metadati del progetto o dell'istanza VM, specifica project/attributes/enable-oslogin o instance/attributes/enable-oslogin a seconda del caso d'uso.

    Ad esempio, il seguente comando recupera il valore ETag corrente per la chiave dei 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 questo valore ETag con il comando dello strumento curl nella richiesta wait-for-change. Per utilizzare il valore ETag per la richiesta wait-for-change dei metadati di un'istanza o di un progetto, esegui il seguente comando:

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

    Sostituisci quanto segue:

    • Sostituisci PATH_TO_METADATA_ENTRY con il percorso della chiave dei metadati del progetto o dell'istanza VM per cui vuoi eseguire una query sul valore. Se la chiave si trova in una sottodirectory della directory dell'istanza o del progetto, assicurati di includere anche la sottodirectory. Ad esempio:

      • Per visualizzare la chiave di metadati project-id, che è archiviata nei metadati del progetto, specifica project/project-id.
      • Per visualizzare la chiave di metadati image, che è archiviata nei metadati dell'istanza VM, specifica instance/image.
      • Per visualizzare il enable-oslogin che può essere memorizzato nella sottodirectory degli attributi dei metadati del progetto o dell'istanza VM, specifica project/attributes/enable-oslogin o instance/attributes/enable-oslogin a seconda del caso d'uso.
    • ETAG: il valore ETag per la chiave dei metadati.

    In questo esempio, il seguente comando utilizza il valore ETag per la chiave tags e esegue query sulla 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 dei metadati corrisponde al valore ETag specificato e, se questo valore cambia, la richiesta viene restituita con i nuovi contenuti della chiave dei metadati.

VM Windows

Per ottenere il valore ETag corrente per una chiave dei metadati, completa i seguenti passaggi:

  1. Connettiti alla VM Windows.
  2. Invia una richiesta a quella chiave e stampa le intestazioni. Su Windows, utilizza il comando Invoke-WebRequest. Per ottenere l'ETag corrente per una voce di metadati di un'istanza VM o di un progetto, esegui il seguente comando:

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

    $value.Headers.ETag

    Sostituisci PATH_TO_METADATA_ENTRY con il percorso della chiave dei metadati del progetto o dell'istanza VM per cui vuoi eseguire una query sul valore. Se la chiave si trova in una sottodirectory della directory dell'istanza o del progetto, assicurati di includere anche la sottodirectory. Ad esempio:

    • Per visualizzare la chiave di metadati project-id, che è archiviata nei metadati del progetto, specifica project/project-id.
    • Per visualizzare la chiave di metadati image, che è archiviata nei metadati dell'istanza VM, specifica instance/image.
    • Per visualizzare il enable-oslogin che può essere memorizzato nella sottodirectory degli attributi dei metadati del progetto o dell'istanza VM, specifica project/attributes/enable-oslogin o instance/attributes/enable-oslogin a seconda del caso d'uso.

    Ad esempio, il seguente comando recupera il valore ETag corrente per la chiave dei 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. Puoi quindi utilizzare questo valore ETag nella richiesta wait-for-change. Per utilizzare il valore ETag per la richiesta wait-for-change dei metadati dell'istanza o del progetto, esegui il seguente comando:

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

    Sostituisci quanto segue:

    • Sostituisci PATH_TO_METADATA_ENTRY con il percorso della chiave dei metadati del progetto o dell'istanza VM per cui vuoi eseguire una query sul valore. Se la chiave si trova in una sottodirectory della directory dell'istanza o del progetto, assicurati di includere anche la sottodirectory. Ad esempio:

      • Per visualizzare la chiave di metadati project-id, che è archiviata nei metadati del progetto, specifica project/project-id.
      • Per visualizzare la chiave di metadati image, che è archiviata nei metadati dell'istanza VM, specifica instance/image.
      • Per visualizzare il enable-oslogin che può essere memorizzato nella sottodirectory degli attributi dei metadati del progetto o dell'istanza VM, specifica project/attributes/enable-oslogin o instance/attributes/enable-oslogin a seconda del caso d'uso.
    • ETAG: il valore ETag per la chiave dei metadati.

    In questo esempio, il seguente comando utilizza il valore ETag per la chiave tags e esegue query sulla 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 dei metadati corrisponde al valore ETag specificato e, se questo valore cambia, la richiesta viene restituita con i nuovi contenuti della chiave dei metadati.

Python

Il seguente esempio di Python mostra come monitorare in modo programmatico il server dei metadati per rilevare le modifiche.

Questo esempio imposta l'ETag iniziale su 0. Il server dei metadati non restituirà una risposta con 0 come valore ETag. Quando 0 è specificato come ultimo ETag in una richiesta, il server dei metadati risponde con il valore corrente e l'ETag. In questo modo risparmi un po' di codice necessario per ottenere il valore iniziale e 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"]

Impostare i timeout

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

Quando imposti il parametro timeout_sec, la richiesta viene sempre restituita dopo il numero di secondi specificato, indipendentemente dal fatto che il valore dei metadati sia effettivamente cambiato o meno. È 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. Per eseguire una richiesta wait-for-change con un valore di timeout per una voce di metadati di un'istanza VM o di un progetto, esegui il seguente comando:

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

    Sostituisci quanto segue:

    • Sostituisci PATH_TO_METADATA_ENTRY con il percorso della chiave dei metadati del progetto o dell'istanza VM per cui vuoi eseguire una query sul valore. Se la chiave si trova in una sottodirectory della directory dell'istanza o del progetto, assicurati di includere anche la sottodirectory. Ad esempio:

      • Per visualizzare la chiave di metadati project-id, che è archiviata nei metadati del progetto, specifica project/project-id.
      • Per visualizzare la chiave di metadati image, che è archiviata nei metadati dell'istanza VM, specifica instance/image.
      • Per visualizzare il enable-oslogin che può essere memorizzato nella sottodirectory degli attributi dei metadati del progetto o dell'istanza VM, specifica project/attributes/enable-oslogin o instance/attributes/enable-oslogin a seconda del caso d'uso.
    • TIMEOUT: il valore del timeout.

Ad esempio, il seguente comando esegue una richiesta wait-for-change impostata su un timeout di 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 VM Windows.
  2. Dalla VM Windows, utilizza il comando Invoke-RestMethod per eseguire una query. Per eseguire una richiesta wait-for-change con un valore di timeout per un'istanza VM o una voce dei metadati del progetto, esegui il seguente comando:

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

    Sostituisci quanto segue:

    • Sostituisci PATH_TO_METADATA_ENTRY con il percorso della chiave dei metadati del progetto o dell'istanza VM per cui vuoi eseguire una query sul valore. Se la chiave si trova in una sottodirectory della directory dell'istanza o del progetto, assicurati di includere anche la sottodirectory. Ad esempio:

      • Per visualizzare la chiave di metadati project-id, che è archiviata nei metadati del progetto, specifica project/project-id.
      • Per visualizzare la chiave di metadati image, che è archiviata nei metadati dell'istanza VM, specifica instance/image.
      • Per visualizzare il enable-oslogin che può essere memorizzato nella sottodirectory degli attributi dei metadati del progetto o dell'istanza VM, specifica project/attributes/enable-oslogin o instance/attributes/enable-oslogin a seconda del caso d'uso.
    • TIMEOUT: il valore del timeout.

Ad esempio, il seguente comando esegue una richiesta wait-for-change impostata su un timeout di 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
  

Esegui query sui metadati utilizzando l'endpoint del server di metadati HTTPS

L'endpoint del server di metadati HTTPS (https://metadata.google.internal/computeMetadata/v1) offre una maggiore sicurezza per la trasmissione delle informazioni tra il server di metadati e la VM.

Per utilizzare l'endpoint del server di metadati HTTPS, esamina i seguenti requisiti:

  • Devi richiedere l'accesso all'anteprima dell'endpoint del server dei metadati HTTPS.

  • Dopo aver aggiunto il progetto alla lista consentita, puoi creare la VM. La VM deve soddisfare i seguenti requisiti:

    • L'ambiente guest deve essere in esecuzione sulla VM.
    • La VM deve essere una Shielded VM. Questo perché il server di metadati HTTPS richiede l'utilizzo di Unified Extensible Firmware Interface (UEFI) e Virtual Trusted Platform Module (vTPM) per verificare i certificati.

Per una panoramica della modalità di gestione delle query all'endpoint del server di metadati HTTPS, consulta Endpoint del server di metadati HTTPS. Puoi eseguire tutte le stesse query sul server di metadati indipendentemente dall'utilizzo dell'endpoint https o http. Tuttavia, per chiamare l'endpoint https, devi specificare il percorso dei certificati di identità del client e, in alcuni casi, il certificato principale.

I seguenti comandi mostrano come eseguire query sul server dei metadati utilizzando l'endpoint https.

Linux

  1. Connettiti alla VM Linux.

  2. Dalla VM Linux, utilizza lo strumento curl per eseguire una query e specificare il certificato di identità del client. Se vuoi, puoi anche specificare il certificato radice.

    curl "https://metadata.google.internal/computeMetadata/v1/PATH_TO_METADATA_ENTRY" \
      -E CLIENT_CERTIFICATE \
      [--cacert ROOT_CERTIFICATE] \
      -H "Metadata-Flavor: Google"
    

    Sostituisci quanto segue:

    • Sostituisci PATH_TO_METADATA_ENTRY con il percorso della chiave dei metadati del progetto o dell'istanza VM per cui vuoi eseguire una query sul valore. Se la chiave si trova in una sottodirectory della directory dell'istanza o del progetto, assicurati di includere anche la sottodirectory. Ad esempio:

      • Per visualizzare la chiave di metadati project-id, che è archiviata nei metadati del progetto, specifica project/project-id.
      • Per visualizzare la chiave di metadati image, che è archiviata nei metadati dell'istanza VM, specifica instance/image.
      • Per visualizzare il enable-oslogin che può essere memorizzato nella sottodirectory degli attributi dei metadati del progetto o dell'istanza VM, specifica project/attributes/enable-oslogin o instance/attributes/enable-oslogin a seconda del caso d'uso.
    • CLIENT_CERTIFICATE: il percorso del certificato di identità del client: /run/google-mds-mtls/client.key.
    • (Facoltativo) ROOT_CERTIFICATE: il percorso del certificato principale: /run/google-mds-mtls/root.crt.

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

    user@myinst:~$ 
    curl "https://metadata.google.internal/computeMetadata/v1/instance/image" \
      -E /run/google-mds-mtls/client.key \
      -H "Metadata-Flavor: Google"
    

    L'output è simile al seguente:

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

    Se viene visualizzato un messaggio di errore, consulta la documentazione per la risoluzione dei problemi.

Windows

  1. Connettiti alla VM Windows.

  2. Recupera il certificato di identità client utilizzando uno dei seguenti comandi:

    • $cert = Get-PfxCertificate -FilePath "C:\ProgramData\Google\Compute Engine\mds-mtls-client.key.pfx"
      
    • $cert = Get-ChildItem Cert:\LocalMachine\My | Where-Object { $_.Issuer -like "google.internal" }
      
  3. Dalla VM Windows, utilizza il comando Invoke-RestMethod e specifica il certificato di identità del cliente per eseguire una query.

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

    Sostituisci quanto segue:

    • CLIENT_CERTIFICATE: il percorso del certificato di identità client sulla VM. Si tratta della variabile $cert impostata nel passaggio precedente.
    • Sostituisci PATH_TO_METADATA_ENTRY con il percorso della chiave dei metadati del progetto o dell'istanza VM per cui vuoi eseguire una query sul valore. Se la chiave si trova in una sottodirectory della directory dell'istanza o del progetto, assicurati di includere anche la sottodirectory. Ad esempio:

      • Per visualizzare la chiave di metadati project-id, che è archiviata nei metadati del progetto, specifica project/project-id.
      • Per visualizzare la chiave di metadati image, che è archiviata nei metadati dell'istanza VM, specifica instance/image.
      • Per visualizzare il enable-oslogin che può essere memorizzato nella sottodirectory degli attributi dei metadati del progetto o dell'istanza VM, specifica project/attributes/enable-oslogin o instance/attributes/enable-oslogin a seconda del caso d'uso.

    Ad esempio, per eseguire una query sull'immagine di avvio di una VM Windows Server 2019, esegui la seguente query:

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

    L'output è simile al seguente:

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

Limitazioni

  • Tutte le richieste che contengono l'intestazione X-Forwarded-For vengono rifiutate automaticamente dal server di metadati. In genere, questa intestazione indica che la richiesta è stata effettuata tramite proxy e potrebbe non essere una richiesta effettuata da un utente autorizzato. Per motivi di sicurezza, tutte queste richieste vengono 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 della 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 della 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 non supportati in un percorso della richiesta.

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

Codici di stato

Quando invii una richiesta al server dei metadati, questo restituisce i codici di stato HTTP standard per indicare l'esito positivo o negativo. A volte, le condizioni della rete o gli eventi host possono causare l'errore della richiesta al server dei metadati e il ritorno di un codice di errore. In questi casi, devi progettare l'applicazione in modo che sia a tolleranza di errore e in grado di riconoscere e gestire questi errori.

Per un elenco dettagliato dei codici di stato che possono essere restituiti, consulta Risolvere i problemi relativi ai codici del server.

Visualizza i metadati personalizzati per le VM

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

Visualizzare i metadati del progetto

Per visualizzare i metadati personalizzati che si applicano a tutte le VM del progetto, utilizza uno tra i seguenti metodi.

Console

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

    Vai alla pagina Metadati

    Nella pagina Metadati viene visualizzato un elenco di tutte le voci dei metadati del progetto personalizzato per il tuo progetto.

gcloud

Utilizza il comando gcloud compute project-info describe per eseguire query sui metadati del 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 del 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"
    }
  ]
}, ...

Visualizzare i metadati di zona

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

gcloud

Per eseguire query sui metadati zonali personalizzati, utilizza il 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 cui vuoi visualizzare i 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, invia una richiesta GET al 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 cui vuoi visualizzare i 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 progetto, utilizza uno dei 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.

      • Un valore None indica che non sono presenti chiavi SSH memorizzate nei metadati dell'istanza.

      • Qualsiasi altro valore indica che esistono chiavi SSH memorizzate nei metadati dell'istanza.

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

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

      • Un 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. Vengono visualizzate tutte le chiavi e i valori dei metadati personalizzati, ad eccezione dei metadati della chiave SSH.

gcloud

Utilizza il 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 per cui 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 di una VM specifica, invia una richiesta GET al 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