Utilizza gli script di avvio nelle VM Windows


Uno script di avvio è un file che esegue attività durante il processo di avvio di un'istanza di macchina virtuale (VM). Gli script di avvio possono essere applicati a tutte le VM di un progetto o a una singola VM. Gli script di avvio specificati dai metadati a livello di VM sostituiscono gli script di avvio specificati dai metadati a livello di progetto; inoltre, gli script di avvio vengono eseguiti solo quando è disponibile una rete. Questo documento descrive come utilizzare gli script di avvio sulle istanze VM Windows Server. Per informazioni su come aggiungere uno script di avvio a livello di progetto, consulta gcloud compute project-info add-metadata.

Gli script di avvio di Windows devono essere script della shell dei comandi (.cmd), PowerShell (.ps1) o file batch (.bat) e devono avere l'estensione di file appropriata.

Se specifichi uno script di avvio utilizzando una delle procedure descritte in questo documento, Compute Engine esegue queste operazioni:

  1. Copia lo script di avvio nella VM

  2. Utilità di pianificazione esegue lo script di avvio come account LocalSystem all'avvio della VM

Per informazioni sulle varie attività relative agli script di avvio e su quando eseguire ciascuna, consulta il documento di panoramica degli script di avvio.

Prima di iniziare

  • Leggi la panoramica degli script di avvio.
  • Scopri di più sui concetti di base dei metadati delle VM.
  • Se non l'hai ancora fatto, configura l'autenticazione. L'autenticazione verifica la tua identità per l'accesso a Google Cloud servizi e API. 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. Installa Google Cloud CLI. Dopo l'installazione, inizializza Google Cloud CLI eseguendo il seguente comando:

      gcloud init

      Se utilizzi un provider di identità (IdP) esterno, devi prima accedere alla gcloud CLI con la tua identità federata.

    2. Set a default region and zone.

    REST

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

      Installa Google Cloud CLI. Dopo l'installazione, inizializza Google Cloud CLI eseguendo il seguente comando:

      gcloud init

      Se utilizzi un provider di identità (IdP) esterno, devi prima accedere alla gcloud CLI con la tua identità federata.

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

Chiavi dei metadati per gli script di avvio di Windows

Uno script di avvio viene passato a una VM da una località che viene specificata mediante una chiave dei metadati. Una chiave dei metadati specifica se lo script di avvio è archiviato localmente o in Cloud Storage oppure passato direttamente alla VM. La chiave dei metadati utilizzata potrebbe dipendere anche dalle dimensioni o dal tipo di file dello script di avvio.

La tabella seguente mostra le chiavi dei metadati che puoi utilizzare per gli script di avvio Windows e fornisce informazioni sulla chiave da utilizzare in base alla località di archiviazione, alle dimensioni e al tipo di file dello script di avvio.

Chiave dei metadati Da utilizzare per
sysprep-specialize-script-ps1 Passare uno script PowerShell non firmato archiviato localmente o aggiunto direttamente e di dimensioni non superiori a 256 KB.
sysprep-specialize-script-cmd Passare uno script shell di comando archiviato localmente o aggiunto direttamente e di dimensioni non superiori a 256 KB.
sysprep-specialize-script-bat Passare uno script di file batch archiviato localmente o aggiunto direttamente e di dimensioni non superiori a 256 KB.
sysprep-specialize-script-url Passare un file batch, una shell dei comandi, uno script PowerShell firmato/non firmato o un eseguibile archiviato in Cloud Storage e di dimensioni superiori a 256 KB.
windows-startup-script-ps1 Passare uno script PowerShell non firmato archiviato localmente o aggiunto direttamente e di dimensioni non superiori a 256 KB.
windows-startup-script-cmd Passare uno script shell di comando archiviato localmente o aggiunto direttamente e di dimensioni non superiori a 256 KB.
windows-startup-script-bat Passare uno script di file batch archiviato localmente o aggiunto direttamente e di dimensioni non superiori a 256 KB.
windows-startup-script-url Passare un file batch, una shell dei comandi, uno script PowerShell firmato/non firmato o un eseguibile archiviato in Cloud Storage e di dimensioni superiori a 256 KB.

Per saperne di più sull'ordine di esecuzione dei vari tipi di script di avvio, consulta il repository GoogleCloudPlatform/compute-image-windows su GitHub.

Ordine di esecuzione degli script di avvio di Windows

Puoi utilizzare più script di avvio. Gli script di avvio archiviati localmente o aggiunti direttamente vengono eseguiti prima di quelli archiviati in Cloud Storage. Anche il tipo di file contenente lo script influisce sull'ordine di esecuzione. La tabella seguente mostra, in base alla chiave dei metadati, l'ordine di esecuzione degli script di avvio di Windows.

Chiave dei metadati Ordine di esecuzione
sysprep-specialize-script-ps1 Per primo durante l'avvio iniziale
sysprep-specialize-script-cmd Per secondo durante l'avvio iniziale
sysprep-specialize-script-bat Per terzo durante l'avvio iniziale
sysprep-specialize-script-url Per quarto durante l'avvio iniziale
windows-startup-script-ps1 Per primo durante ogni avvio successivo all'avvio iniziale
windows-startup-script-cmd Per secondo durante ogni avvio successivo all'avvio iniziale
windows-startup-script-bat Per terzo durante ogni avvio successivo all'avvio iniziale
windows-startup-script-url Per quarto durante ogni avvio successivo all'avvio iniziale

Passaggio diretto di uno script di avvio Windows

Passa i contenuti di un file batch, della shell dei comandi o di uno script di avvio di PowerShell non firmato direttamente a una VM Windows Server. Le procedure riportate di seguito mostrano come trasmettere uno script PowerShell non firmato.

Console

Passaggio diretto di uno script di avvio Windows a una nuova VM

  1. Nella console Google Cloud , vai alla pagina Crea un'istanza.

    Vai a Crea un'istanza

  2. Per Disco di avvio, seleziona Cambia e segui questi passaggi:

    1. Nella scheda Immagini pubbliche, scegli un sistema operativo Windows Server.
    2. Fai clic su Seleziona.
  3. Espandi la sezione Opzioni avanzate e segui questi passaggi:

    1. Espandi la sezione Gestione.
    2. Nella sezione Metadati, fai clic su Aggiungi elemento per impostare Chiave e Valore:

      • Chiave: impostata su windows-startup-script-ps1.

        Gli script di avvio passati alla VM utilizzando chiavi dei metadati che iniziano con windows-startup-script vengono eseguiti a ogni avvio dopo l'avvio iniziale della VM.

      • Valore: aggiungi il seguente script:

        # Installing IIS
        Import-Module servermanager
        Install-WindowsFeature Web-Server -IncludeAllSubFeature
        
        # Ensure the directory exists
        if (-not (Test-Path("C:\inetpub\wwwroot"))) {New-Item "C:\inetpub\wwwroot" -Type Directory}
        
        # Write the expanded string out to the file, overwriting the file if it already exists.
        "<html><body><p>Windows startup script added directly.</p></body></html>" | Out-File -FilePath C:\inetpub\wwwroot\index.html -Encoding ascii -Force
        
  4. Fai clic su Crea.

Passaggio diretto di uno script di avvio Windows a una VM esistente

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

    Vai a Istanze VM

  2. Fai clic sul nome della VM.

  3. Fai clic su Modifica.

  4. Specifica quanto segue in Metadati:

    • key: windows-startup-script-ps1
    • value: i contenuti dello script di avvio

Verifica dello script di avvio

Dopo l'avvio della VM, visualizza l'IP esterno in un browser web per verificare che lo script di avvio abbia creato il sito web. Potresti dover attendere circa 10 minuti per il completamento dello script di avvio di esempio.

gcloud (Bash)

Passaggio diretto di uno script di avvio Windows a una nuova VM

Passa i contenuti di uno script di avvio direttamente a una VM Windows Server durante la creazione utilizzando il seguente comando gcloud compute instances create:

gcloud compute instances create VM_NAME \
  --image-project=windows-cloud \
  --image-family=windows-2019-core \
  --metadata=windows-startup-script-ps1='Import-Module servermanager
  Install-WindowsFeature Web-Server -IncludeAllSubFeature
  "<html><body><p>Windows startup script added directly.</p></body></html>" > C:\inetpub\wwwroot\index.html'

Sostituisci VM_NAME con il nome della VM.

Passaggio diretto di uno script di avvio Windows a una VM esistente

Aggiungi lo script di avvio direttamente a una VM esistente utilizzando il seguente comando gcloud compute instances add-metadata:

gcloud compute instances add-metadata VM_NAME \
  --image-project=windows-cloud \
  --image-family=windows-2019-core \
  --metadata=windows-startup-script-ps1='Import-Module servermanager
  Install-WindowsFeature Web-Server -IncludeAllSubFeature
  "<html><body><p>Windows startup script added directly.</p></body></html>" > C:\inetpub\wwwroot\index.html'

Sostituisci VM_NAME con il nome della VM.

Verifica dello script di avvio

Dopo l'avvio della VM, visualizza l'IP esterno in un browser web per verificare che lo script di avvio abbia creato il sito web. Potresti dover attendere circa 10 minuti per il completamento dello script di avvio di esempio.

gcloud (prompt dei comandi)

Passaggio diretto di uno script di avvio Windows a una nuova VM

Passa i contenuti di uno script di avvio direttamente a una VM Windows Server durante la creazione utilizzando il seguente comando gcloud compute instances create:

gcloud compute instances create VM_NAME ^
  --image-project=windows-cloud ^
  --image-family=windows-2019-core ^
  --metadata=windows-startup-script-ps1='Import-Module servermanager
  Install-WindowsFeature Web-Server -IncludeAllSubFeature
  "<html><body><p>Windows startup script added directly.</p></body></html>" > C:\inetpub\wwwroot\index.html'

Sostituisci VM_NAME con il nome della VM.

Passaggio diretto di uno script di avvio Windows a una VM esistente

Aggiungi lo script di avvio direttamente a una VM esistente utilizzando il seguente comando gcloud compute instances add-metadata:

gcloud compute instances add-metadata VM_NAME ^
  --image-project=windows-cloud ^
  --image-family=windows-2019-core ^
  --metadata=windows-startup-script-ps1='Import-Module servermanager
  Install-WindowsFeature Web-Server -IncludeAllSubFeature
  "<html><body><p>Windows startup script added directly.</p></body></html>" > C:\inetpub\wwwroot\index.html'

Sostituisci VM_NAME con il nome della VM.

Verifica dello script di avvio

Dopo l'avvio della VM, visualizza l'IP esterno in un browser web per verificare che lo script di avvio abbia creato il sito web. Potresti dover attendere circa 10 minuti per il completamento dello script di avvio di esempio.

gcloud (PowerShell)

Passaggio diretto di uno script di avvio Windows a una nuova VM

Passa i contenuti di uno script di avvio direttamente a una VM Windows Server durante la creazione utilizzando il seguente comando gcloud compute instances create:

gcloud compute instances create VM_NAME `
  --image-project=windows-cloud `
  --image-family=windows-2019-core `
  --metadata=windows-startup-script-ps1='Import-Module servermanager
  Install-WindowsFeature Web-Server -IncludeAllSubFeature
  "<html><body><p>Windows startup script added directly.</p></body></html>" > C:\inetpub\wwwroot\index.html'

Sostituisci VM_NAME con il nome della VM.

Passaggio diretto di uno script di avvio Windows a una VM esistente

Aggiungi lo script di avvio direttamente a una VM esistente utilizzando il seguente comando gcloud compute instances add-metadata:

gcloud compute instances add-metadata VM_NAME `
  --image-project=windows-cloud `
  --image-family=windows-2019-core `
  --metadata=windows-startup-script-ps1='Import-Module servermanager
  Install-WindowsFeature Web-Server -IncludeAllSubFeature
  "<html><body><p>Windows startup script added directly.</p></body></html>" > C:\inetpub\wwwroot\index.html'

Sostituisci VM_NAME con il nome della VM.

Verifica dello script di avvio

Dopo l'avvio della VM, visualizza l'IP esterno in un browser web per verificare che lo script di avvio abbia creato il sito web. Potresti dover attendere circa 10 minuti per il completamento dello script di avvio di esempio.

REST

Passaggio diretto di uno script di avvio Windows a una nuova VM

Passa i contenuti di uno script di avvio direttamente a una VM Windows Server durante la creazione utilizzando il seguente metodo instances.insert.

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

{
  ...
  "networkInterfaces": [
    {
      "accessConfigs": [
        {
          "type": "ONE_TO_ONE_NAT"
        }
      ]
    }
  ],
  "metadata": {
    "items": [
      {
        "key": "windows-startup-script-ps1",
        "value": "Import-Module servermanager\nInstall-WindowsFeature Web-Server -IncludeAllSubFeature\necho '<html><body><p>Windows startup script added directly.</p></body></html>' > C:\\inetpub\\wwwroot\\index.html"
      }
    ]
  },
  ...
}

Sostituisci quanto segue:

  • PROJECT_ID: l'ID progetto

  • ZONE: la zona in cui creare la VM.

Passaggio diretto di uno script di avvio Windows a una VM esistente

  1. Recupera il valore metadata.fingerprint della VM utilizzando il metodo instances.get:

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

    Sostituisci quanto segue:

    • PROJECT_ID: l'ID del progetto in cui esiste la VM.

    • ZONE: la zona della VM.

    • VM_NAME: il nome della VM.

  2. Passa lo script di avvio utilizzando il valore fingerprint, insieme alla chiave e al valore dei metadati per lo script di avvio, in una chiamata al metodo instances.setMetadata:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setMetadata
    
    {
     "fingerprint": FINGERPRINT,
     "items": [
       {
         "key": "windows-startup-script-ps1",
         "value": "Import-Module servermanager\nInstall-WindowsFeature Web-Server -IncludeAllSubFeature\necho '<html><body><p>Windows startup script added directly.</p></body></html>' > C:\\inetpub\\wwwroot\\index.html"
       }
     ],
     ...
    }
    

    Sostituisci quanto segue:

    • PROJECT_ID: l'ID del progetto in cui esiste la VM.

    • ZONE: la zona della VM.

    • VM_NAME: il nome della VM.

    • FINGERPRINT: il valore metadata.fingerprint ottenuto utilizzando il metodo instances.get.

Verifica dello script di avvio

Dopo l'avvio della VM, visualizza l'IP esterno in un browser web per verificare che lo script di avvio abbia creato il sito web. Potresti dover attendere circa 10 minuti per il completamento dello script di avvio di esempio.

Passaggio di uno script di avvio Windows da un file locale

Puoi archiviare uno script di avvio in un file batch locale, in uno script shell dei comandi o in uno script PowerShell non firmato sulla tua workstation e passare il file locale come metadati a una VM quando la crei. Non puoi utilizzare i file archiviati sulle VM come script di avvio.

Prima di passare uno script di avvio Windows da un file locale a una VM, segui questi passaggi:

  1. Crea un file locale (.ps1) per archiviare lo script di avvio.

  2. Prendi nota del percorso relativo da gcloud CLI allo script di avvio.

  3. Aggiungi il seguente script di avvio al file:

    # Installing IIS
    Import-Module servermanager
    Install-WindowsFeature Web-Server -IncludeAllSubFeature
    
    # Ensure the directory exists
    if (-not (Test-Path("C:\inetpub\wwwroot"))) {New-Item "C:\inetpub\wwwroot" -Type Directory}
    
    # Write the expanded string out to the file, overwriting the file if it already exists.
    "<html><body><p>Windows startup script passed from a file on your local workstation.</p></body></html>" | Out-File -FilePath C:\inetpub\wwwroot\index.html -Encoding ascii -Force
    

gcloud (Bash)

Passaggio di uno script di avvio Windows da un file locale a una nuova VM

Crea una VM e passa i contenuti di un file locale da utilizzare come script di avvio utilizzando il comando gcloud compute instances create con il flag --metadata-from-file:

gcloud compute instances create VM_NAME \
  --image-project=windows-cloud \
  --image-family=windows-2019-core \
  --metadata-from-file=windows-startup-script-ps1=FILE_PATH

Sostituisci quanto segue:

  • VM_NAME: il nome della VM
  • FILE_PATH: il percorso relativo del file script di avvio
Passaggio di uno script di avvio Windows da un file locale a una VM esistente

Passa uno script di avvio a una VM esistente da un file locale utilizzando il seguente comando gcloud compute instances add-metadata:

gcloud compute instances add-metadata VM_NAME \
  --metadata-from-file=windows-startup-script-ps1=FILE_PATH

Sostituisci quanto segue:

  • VM_NAME: il nome della VM
  • FILE_PATH: il percorso relativo del file script di avvio
Verifica dello script di avvio

Visualizza l'IP esterno in un browser web per verificare che lo script di avvio abbia creato il sito web. Potresti dover attendere circa 10 minuti per il completamento dello script di avvio di esempio.

gcloud (prompt dei comandi)

Passaggio di uno script di avvio Windows da un file locale a una nuova VM

Crea una VM e passa i contenuti di un file locale da utilizzare come script di avvio utilizzando il comando gcloud compute instances create con il flag --metadata-from-file:

gcloud compute instances create VM_NAME ^
  --image-project=windows-cloud ^
  --image-family=windows-2019-core ^
  --metadata-from-file=windows-startup-script-ps1=FILE_PATH

Sostituisci quanto segue:

  • VM_NAME: il nome della VM
  • FILE_PATH: il percorso relativo del file script di avvio
Passaggio di uno script di avvio Windows da un file locale a una VM esistente

Passa uno script di avvio a una VM esistente da un file locale utilizzando il seguente comando gcloud compute instances add-metadata:

gcloud compute instances add-metadata VM_NAME ^
  --metadata-from-file=windows-startup-script-ps1=FILE_PATH

Sostituisci quanto segue:

  • VM_NAME: il nome della VM
  • FILE_PATH: il percorso relativo del file script di avvio
Verifica dello script di avvio

Visualizza l'IP esterno in un browser web per verificare che lo script di avvio abbia creato il sito web. Potresti dover attendere circa 10 minuti per il completamento dello script di avvio di esempio.

gcloud (PowerShell)

Passaggio di uno script di avvio Windows da un file locale a una nuova VM

Crea una VM e passa i contenuti di un file locale da utilizzare come script di avvio utilizzando il comando gcloud compute instances create con il flag --metadata-from-file:

gcloud compute instances create VM_NAME `
  --image-project=windows-cloud `
  --image-family=windows-2019-core `
  --metadata-from-file=windows-startup-script-ps1=FILE_PATH

Sostituisci quanto segue:

  • VM_NAME: il nome della VM
  • FILE_PATH: il percorso relativo del file script di avvio
Passaggio di uno script di avvio Windows da un file locale a una VM esistente

Passa uno script di avvio a una VM esistente da un file locale utilizzando il seguente comando gcloud compute instances add-metadata:

gcloud compute instances add-metadata VM_NAME `
  --metadata-from-file=windows-startup-script-ps1=FILE_PATH

Sostituisci quanto segue:

  • VM_NAME: il nome della VM
  • FILE_PATH: il percorso relativo del file script di avvio
Verifica dello script di avvio

Visualizza l'IP esterno in un browser web per verificare che lo script di avvio abbia creato il sito web. Potresti dover attendere circa 10 minuti per il completamento dello script di avvio di esempio.

Passaggio di uno script di avvio Windows da Cloud Storage

Puoi archiviare uno script di avvio come file batch, script shell dei comandi, script PowerShell firmato/non firmato o eseguibile in Cloud Storage e passarlo a una VM quando la crei. Dopo aver aggiunto uno script di avvio a Cloud Storage, avrai un URL che puoi utilizzare per fare riferimento allo script di avvio quando crei una VM.

Prima di aggiungere uno script di avvio da un bucket Cloud Storage, segui questi passaggi:

  1. Crea un file per archiviare lo script di avvio. Questo esempio utilizza un file PowerShell (.ps1).

  2. Aggiungi il seguente script di PowerShell al file, che installa un server web e crea una semplice pagina web:

    # Installing IIS
    Import-Module servermanager
    Install-WindowsFeature Web-Server -IncludeAllSubFeature
    
    # Ensure the directory exists
    if (-not (Test-Path("C:\inetpub\wwwroot"))) {New-Item "C:\inetpub\wwwroot" -Type Directory}
    
    # Write the expanded string out to the file, overwriting the file if it already exists.
    "<html><body><p>Windows startup script passed from Cloud Storage.</p></body></html>" | Out-File -FilePath C:\inetpub\wwwroot\index.html -Encoding ascii -Force
    
  3. Crea un bucket Cloud Storage.

  4. Aggiungi il file al bucket Cloud Storage.

Implicazioni per la sicurezza

  • Per impostazione predefinita, i proprietari e gli editor dei progetti possono accedere ai file di Cloud Storage nello stesso progetto, a meno che non siano presenti controlli dell'accesso espliciti che lo impediscano.

  • Se il bucket o l'oggetto Cloud Storage è meno sicuro dei metadati, esiste il rischio di escalation dei privilegi se lo script di avvio viene modificato e la VM si riavvia. Questo accade perché, dopo il riavvio della VM, lo script di avvio viene eseguito come LocalSystem e può quindi utilizzare le autorizzazioni del service account associato per accedere ad altre risorse.

Console

Passaggio di uno script di avvio archiviato in Cloud Storage a una nuova VM

  1. Nella console Google Cloud , vai alla pagina Crea un'istanza.

    Vai a Crea un'istanza

  2. Per Disco di avvio, seleziona Cambia e segui questi passaggi:

    1. Nella scheda Immagini pubbliche, scegli un sistema operativo Windows Server.
    2. Fai clic su Seleziona.
  3. Nella sezione Identità e accesso API, seleziona un account di servizio con il ruolo Storage Object Viewer.

  4. Espandi la sezione Opzioni avanzate e segui questi passaggi:

    1. Espandi la sezione Gestione.
    2. Nella sezione Metadati, aggiungi i valori per quanto segue:

      • Chiave: la chiave dei metadati. Specifica la chiave di metadati windows-startup-script-url in modo che lo script venga eseguito durante ogni avvio successivo all'avvio iniziale.

      • Valore: il valore dei metadati. Impostalo sulla località Cloud Storage del file dello script di avvio utilizzando uno dei seguenti formati:

        • URL autenticato: https://storage.googleapis.com/BUCKET/FILE
        • URI gcloud storage: gs://BUCKET/FILE

        Sostituisci quanto segue:

        • BUCKET: il nome del bucket che contiene il file dello script di avvio
        • FILE: il nome del file dello script di avvio
  5. Per creare la VM, fai clic su Crea.

Passaggio di uno script di avvio archiviato in Cloud Storage a una VM esistente

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

    Vai a Istanze VM

  2. Fai clic sul nome della VM.

  3. Fai clic su Modifica.

  4. In Metadati, aggiungi i seguenti valori:

    • URL autenticato: https://storage.googleapis.com/BUCKET/FILE
    • URI gcloud storage: gs://BUCKET/FILE

Verifica dello script di avvio

Visualizza l'IP esterno in un browser web per verificare che lo script di avvio abbia creato il sito web. Potresti dover attendere circa 10 minuti per il completamento dello script di avvio di esempio.

gcloud (Bash)

Passaggio di uno script di avvio archiviato in Cloud Storage a una nuova VM

Passa uno script di avvio archiviato in Cloud Storage a una VM Windows Server utilizzando il seguente comando gcloud compute instances create. Per il valore del flag --scopes, utilizza storage-ro in modo che la VM possa accedere a Cloud Storage.

gcloud compute instances create VM_NAME \
  --image-project=windows-cloud \
  --image-family=windows-2019-core \
  --scopes=storage-ro \
  --metadata=windows-startup-script-url=CLOUD_STORAGE_URL

Sostituisci quanto segue:

  • VM_NAME: il nome della VM.
  • CLOUD_STORAGE_URL: i valori dei metadati. Impostalo sulla località del file dello script di avvio utilizzando uno dei seguenti formati:
    • URL autenticato: https://storage.googleapis.com/BUCKET/FILE
    • URI gcloud storage: gs://BUCKET/FILE
Passaggio di uno script di avvio archiviato in Cloud Storage a una VM esistente

Passa uno script di avvio archiviato in Cloud Storage a una VM esistente utilizzando il seguente comando gcloud compute instances add-metadata:

gcloud compute instances add-metadata VM_NAME \
  --metadata=windows-startup-script-url=CLOUD_STORAGE_URL

Sostituisci quanto segue:

  • VM_NAME: il nome della VM.
  • CLOUD_STORAGE_URL: i valori dei metadati. Impostalo sulla località del file dello script di avvio utilizzando uno dei seguenti formati:
    • URL autenticato: https://storage.googleapis.com/BUCKET/FILE
    • URI gcloud storage: gs://BUCKET/FILE
Verifica dello script di avvio

Visualizza l'IP esterno in un browser web per verificare che lo script di avvio abbia creato il sito web. Potresti dover attendere circa 10 minuti per il completamento dello script di avvio di esempio.

gcloud (prompt dei comandi)

Passaggio di uno script di avvio archiviato in Cloud Storage a una nuova VM

Passa uno script di avvio archiviato in Cloud Storage a una VM Windows Server utilizzando il seguente comando gcloud compute instances create. Per il valore del flag --scopes, utilizza storage-ro in modo che la VM possa accedere a Cloud Storage.

gcloud compute instances create VM_NAME ^
  --image-project=windows-cloud ^
  --image-family=windows-2019-core ^
  --scopes=storage-ro ^
  --metadata=windows-startup-script-url=CLOUD_STORAGE_URL

Sostituisci quanto segue:

  • VM_NAME: il nome della VM.
  • CLOUD_STORAGE_URL: i valori dei metadati. Impostalo sulla località del file dello script di avvio utilizzando uno dei seguenti formati:
    • URL autenticato: https://storage.googleapis.com/BUCKET/FILE
    • URI gcloud storage: gs://BUCKET/FILE
Passaggio di uno script di avvio archiviato in Cloud Storage a una VM esistente

Passa uno script di avvio archiviato in Cloud Storage a una VM esistente utilizzando il seguente comando gcloud compute instances add-metadata:

gcloud compute instances add-metadata VM_NAME ^
  --metadata=windows-startup-script-url=CLOUD_STORAGE_URL

Sostituisci quanto segue:

  • VM_NAME: il nome della VM.
  • CLOUD_STORAGE_URL: i valori dei metadati. Impostalo sulla località del file dello script di avvio utilizzando uno dei seguenti formati:
    • URL autenticato: https://storage.googleapis.com/BUCKET/FILE
    • URI gcloud storage: gs://BUCKET/FILE
Verifica dello script di avvio

Visualizza l'IP esterno in un browser web per verificare che lo script di avvio abbia creato il sito web. Potresti dover attendere circa 10 minuti per il completamento dello script di avvio di esempio.

gcloud (PowerShell)

Passaggio di uno script di avvio archiviato in Cloud Storage a una nuova VM

Passa uno script di avvio archiviato in Cloud Storage a una VM Windows Server utilizzando il seguente comando gcloud compute instances create. Per il valore del flag --scopes, utilizza storage-ro in modo che la VM possa accedere a Cloud Storage.

gcloud compute instances create VM_NAME `
  --image-project=windows-cloud `
  --image-family=windows-2019-core `
  --scopes=storage-ro `
  --metadata=windows-startup-script-url=CLOUD_STORAGE_URL

Sostituisci quanto segue:

  • VM_NAME: il nome della VM.
  • CLOUD_STORAGE_URL: i valori dei metadati. Impostalo sulla località del file dello script di avvio utilizzando uno dei seguenti formati:
    • URL autenticato: https://storage.googleapis.com/BUCKET/FILE
    • URI gcloud storage: gs://BUCKET/FILE
Passaggio di uno script di avvio archiviato in Cloud Storage a una VM esistente

Passa uno script di avvio archiviato in Cloud Storage a una VM esistente utilizzando il seguente comando gcloud compute instances add-metadata:

gcloud compute instances add-metadata VM_NAME `
  --metadata=windows-startup-script-url=CLOUD_STORAGE_URL

Sostituisci quanto segue:

  • VM_NAME: il nome della VM.
  • CLOUD_STORAGE_URL: i valori dei metadati. Impostalo sulla località del file dello script di avvio utilizzando uno dei seguenti formati:
    • URL autenticato: https://storage.googleapis.com/BUCKET/FILE
    • URI gcloud storage: gs://BUCKET/FILE
Verifica dello script di avvio

Visualizza l'IP esterno in un browser web per verificare che lo script di avvio abbia creato il sito web. Potresti dover attendere circa 10 minuti per il completamento dello script di avvio di esempio.

REST

Passaggio di uno script di avvio archiviato in Cloud Storage a una nuova VM

Passa uno script di avvio archiviato in Cloud Storage a una VM Windows Server utilizzando il seguente metodo instances.insert. Al campo scopes, aggiungi https://www.googleapis.com/auth/devstorage.read_only in modo che la VM possa accedere a Cloud Storage.

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

{
  ...
  "networkInterfaces": [
    {
      "accessConfigs": [
        {
          "type": "ONE_TO_ONE_NAT"
        }
      ]
    }
  ],
  "serviceAccounts": [
    {
      "email": "default",
      "scopes": [
        "https://www.googleapis.com/auth/devstorage.read_only"
      ]
    }
  ],
  "metadata": {
    "items": [
      {
        "key": "windows-startup-script-url",
        "value": "CLOUD_STORAGE_URL"
      },
      ...
    ]
  },
  ...
}

Sostituisci quanto segue:

  • PROJECT_ID: l'ID progetto

  • ZONE: la zona in cui creare la VM.

  • CLOUD_STORAGE_URL: il valore dei metadati. Impostalo sulla località Cloud Storage del file dello script di avvio utilizzando uno dei seguenti formati:

    • URL autenticato: https://storage.googleapis.com/BUCKET/FILE
    • URI gcloud storage: gs://BUCKET/FILE

Passaggio di uno script di avvio archiviato in Cloud Storage a una VM esistente

  1. Recupera il valore metadata.fingerprint della VM utilizzando il metodo instances.get:

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

    Sostituisci quanto segue:

    • PROJECT_ID: l'ID del progetto in cui esiste la VM.

    • ZONE: la zona della VM.

    • VM_NAME: il nome della VM

  2. Passa lo script di avvio utilizzando il valore fingerprint, insieme alla chiave e al valore dei metadati per lo script di avvio, in una chiamata al metodo instances.setMetadata:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setMetadata
    
    {
      "fingerprint": FINGERPRINT,
      "items": [
        {
            "key": "windows-startup-script-url",
            "value": "CLOUD_STORAGE_URL"
        }
      ],
      ...
    }
    

    Sostituisci quanto segue:

    • PROJECT_ID: l'ID del progetto in cui esiste la VM.

    • ZONE: la zona della VM.

    • VM_NAME: il nome della VM.

    • FINGERPRINT: il valore metadata.fingerprint ottenuto utilizzando il metodo instances.get.

    • CLOUD_STORAGE_URL: il valore dei metadati. Impostalo sulla località Cloud Storage del file dello script di avvio utilizzando uno dei seguenti formati:

      • URL autenticato: https://storage.googleapis.com/BUCKET/FILE
      • URI gcloud storage: gs://BUCKET/FILE

Verifica dello script di avvio

Visualizza l'IP esterno in un browser web per verificare che lo script di avvio abbia creato il sito web. Potresti dover attendere circa 10 minuti per il completamento dello script di avvio di esempio.

Accesso ai metadati da uno script di avvio di Windows

In uno script di avvio puoi accedere ai valori dei metadati. Ad esempio, puoi utilizzare lo stesso script per più VM e parametrizzare ogni script singolarmente passando valori dei metadati diversi a ogni VM.

Per accedere a un valore dei metadati personalizzato da uno script di avvio, segui questi passaggi:

  1. Crea uno script di avvio che esegue una query sul valore di una chiave dei metadati. Ad esempio, il seguente script di avvio in PowerShell (.ps1) esegue una query sul valore della chiave dei metadati foo.

    $METADATA_VALUE = (Invoke-RestMethod -Headers @{'Metadata-Flavor' = 'Google'} -Uri "http://metadata.google.internal/computeMetadata/v1/instance/attributes/foo")
    
    # Installing IIS
    Import-Module servermanager
    Install-WindowsFeature Web-Server -IncludeAllSubFeature
    
    # Ensure the directory exists
    if (-not (Test-Path("C:\inetpub\wwwroot"))) {New-Item "C:\inetpub\wwwroot" -Type Directory}
    
    # Write the expanded string out to the file, overwriting the file if it already exists.
    "<html><body><p>Accessing metadata value of foo: $METADATA_VALUE</p></body></html>" | Out-File -FilePath C:\inetpub\wwwroot\index.html -Encoding ascii -Force
    
  2. Imposta il valore della chiave dei metadati foo durante la creazione di una VM utilizzando il seguente comando gcloud compute instances create. Per questo esempio, lo script di avvio viene passato alla VM da un file locale.

    gcloud

    gcloud compute instances create VM_NAME \
      --image-project=windows-cloud \
      --image-family=windows-2019 \
      --metadata-from-file=windows-startup-script-ps1=FILE_PATH \
      --metadata=foo=bar
    

    Sostituisci quanto segue:

    • VM_NAME: il nome della VM

    • FILE_PATH: il percorso relativo del file script di avvio

    Per saperne di più su come specificare una coppia chiave-valore dei metadati, consulta Imposta e rimuovi i metadati personalizzati.

  3. Visualizza l'IP esterno in un browser web per verificare che lo script di avvio restituisca il valore di foo. Potresti dover attendere circa 10 minuti per il completamento dello script di avvio di esempio.

Nuova esecuzione di uno script di avvio di Windows

Per eseguire nuovamente uno script di avvio su una VM Windows:

  1. Connessione alla VM.

  2. Esegui questo comando:

    C:\Program Files\Google\Compute Engine\metadata_scripts\run_startup_scripts.cmd
    

Visualizzazione dell'output di uno script di avvio di Windows

Visualizza l'output di uno script di avvio di Windows Server utilizzando uno dei seguenti comandi e controllando la presenza di eventi GCEMetadataScripts:

Passaggi successivi