Utiliser des scripts de démarrage sur les VM Windows


Un script de démarrage est un fichier qui effectue des tâches au cours du processus de démarrage d'une instance de machine virtuelle (VM). Les scripts de démarrage peuvent s'appliquer à toutes les VM dans un projet ou à une seule VM. Les scripts de démarrage spécifiés par les métadonnées au niveau de la VM remplacent ceux spécifiés par les métadonnées au niveau du projet. Les scripts de démarrage ne s'exécutent que lorsqu'un réseau est disponible. Ce document explique comment utiliser des scripts de démarrage sur des instances de VM Windows Server. Pour en savoir plus sur l'ajout d'un script de démarrage au niveau du projet, consultez gcloud compute project-info add-metadata.

Les scripts de démarrage Windows doivent être des scripts shell de Commande (.cmd), des scripts PowerShell (.ps1) ou des scripts de fichiers par lot (.bat), et doivent posséder l'extension de fichier appropriée.

Si vous spécifiez un script de démarrage à l'aide de l'une des procédures décrites dans ce document, Compute Engine effectue les opérations suivantes :

  1. Il copie le script de démarrage sur la VM

  2. Le planificateur de tâches exécute le script de démarrage en tant que compte LocalSystem au démarrage de la VM.

Pour savoir quelles sont les différentes tâches liées aux scripts de démarrage et quand effectuer chacune d'entre elles, consultez la présentation des scripts de démarrage.

Avant de commencer

  • Consultez la présentation des scripts de démarrage.
  • Découvrez les principes de base des métadonnées de VM.
  • Si ce n'est pas déjà fait, configurez l'authentification. L'authentification est le processus permettant de valider votre identité pour accéder aux services et aux API Google Cloud. Pour exécuter du code ou des exemples depuis un environnement de développement local, vous pouvez vous authentifier auprès de Compute Engine comme suit :

    Sélectionnez l'onglet correspondant à la façon dont vous prévoyez d'utiliser les exemples de cette page :

    Console

    Lorsque vous utilisez la console Google Cloud pour accéder aux services et aux API Google Cloud, vous n'avez pas besoin de configurer l'authentification.

    gcloud

    1. Installez Google Cloud CLI, puis initialisez-la en exécutant la commande suivante :

      gcloud init
    2. Définissez une région et une zone par défaut.

    REST

    Pour utiliser les exemples d'API REST de cette page dans un environnement de développement local, vous devez utiliser les identifiants que vous fournissez à gcloud CLI.

      Installez Google Cloud CLI, puis initialisez-la en exécutant la commande suivante :

      gcloud init

Clés de métadonnées pour les scripts de démarrage Windows

Un script de démarrage est transmis à une VM à partir d'un emplacement spécifié par une clé de métadonnées. Une clé de métadonnées spécifie si le script de démarrage est stocké localement, stocké dans Cloud Storage, ou transmis directement à la VM. La clé de métadonnées que vous utilisez peut également dépendre de la taille ou du type de fichier du script de démarrage.

Le tableau suivant présente les clés de métadonnées que vous pouvez utiliser pour les scripts de démarrage Windows, et fournit des informations sur la clé à utiliser en fonction de l'emplacement de stockage, de la taille et du type de fichier du script de démarrage.

Clé de métadonnées Utiliser pour
sysprep-specialize-script-ps1 Transmettre un script PowerShell non signé qui est stocké localement ou ajouté directement et dont la taille ne dépasse pas 256 Ko
sysprep-specialize-script-cmd Transmettre un script shell de commande stocké localement ou ajouté directement et dont la taille ne dépasse pas 256 Ko
sysprep-specialize-script-bat Transmettre un script de fichier par lots stocké localement ou ajouté directement et dont la taille ne dépasse pas 256 Ko
sysprep-specialize-script-url Transmettre un script de fichier par lots, un script shell de commande, un script PowerShell signé ou non, ou un exécutable stocké dans Cloud Storage et dont la taille est supérieure à 256 Ko
windows-startup-script-ps1 Transmettre un script PowerShell non signé qui est stocké localement ou ajouté directement et dont la taille ne dépasse pas 256 Ko
windows-startup-script-cmd Transmettre un script shell de commande stocké localement ou ajouté directement et dont la taille ne dépasse pas 256 Ko
windows-startup-script-bat Transmettre un script de fichier par lots stocké localement ou ajouté directement et dont la taille ne dépasse pas 256 Ko
windows-startup-script-url Transmettre un script de fichier par lots, un script shell de commande, un script PowerShell signé ou non, ou un exécutable stocké dans Cloud Storage et dont la taille est supérieure à 256 Ko

Pour plus d'informations sur l'ordre d'exécution des différents types de scripts de démarrage, consultez le dépôt GoogleCloudPlatform/compute-image-windows sur GitHub.

Ordre d'exécution des scripts de démarrage Windows

Vous pouvez utiliser plusieurs scripts de démarrage. Les scripts de démarrage stockés localement ou ajoutés directement s'exécutent avant les scripts de démarrage stockés dans Cloud Storage. Le type de fichier contenant le script influe également sur l'ordre d'exécution. Le tableau suivant présente l'ordre d'exécution des scripts de démarrage Windows en fonction de la clé de métadonnées.

Clé de métadonnées Ordre d'exécution
sysprep-specialize-script-ps1 En premier lors du démarrage initial
sysprep-specialize-script-cmd En deuxième lors du démarrage initial
sysprep-specialize-script-bat En troisième lors du démarrage initial
sysprep-specialize-script-url En quatrième lors du démarrage initial
windows-startup-script-ps1 En premier lors de chaque démarrage après le démarrage initial
windows-startup-script-cmd En deuxième lors de chaque démarrage après le démarrage initial
windows-startup-script-bat En troisième lors de chaque démarrage après le démarrage initial
windows-startup-script-url En quatrième lors de chaque démarrage après le démarrage initial

Transmettre un script de démarrage Windows directement

Transmettez le contenu d'un script de démarrage de fichier par lots, d'un script shell de commande ou d'un script PowerShell non signé directement à une VM Windows Server. Les procédures suivantes montrent comment transmettre un script PowerShell non signé.

Console

Transmettre un script de démarrage Windows directement à une nouvelle VM

  1. Accédez à la page Créer une instance dans Google Cloud Console.

    Accéder à la page Créer une instance

  2. Pour Disque de démarrage, sélectionnez Modifier, puis procédez comme suit :

    1. Dans l'onglet Images publiques, choisissez un système d'exploitation Windows Server.
    2. Cliquez sur Sélectionner.
  3. Développez la section Options avancées et procédez comme suit :

    1. Développez la section Gestion.
    2. Dans la section Métadonnées, cliquez sur Ajouter un élément pour définir la Clé et la Valeur :

      • Clé : définie sur windows-startup-script-ps1.

        Les scripts de démarrage transmis à la VM à l'aide de clés de métadonnées commençant par windows-startup-script s'exécutent à chaque démarrage après le démarrage initial de la VM.

      • Valeur : ajoutez le script suivant :

        # 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. Cliquez sur Create (Créer).

Transmettre un script de démarrage Windows directement à une VM existante

  1. Dans Google Cloud Console, accédez à la page Instances de VM.

    Accéder à la page Instances de VM

  2. Cliquez sur le Nom de la VM.

  3. Cliquez sur Modifier.

  4. Sous Metadata (Métadonnées), spécifiez la valeur suivante :

    • key : windows-startup-script-ps1
    • value : contenu du script de démarrage

Vérifier le script de démarrage

Une fois la VM démarrée, affichez l'adresse IP externe dans un navigateur Web pour vérifier que le script de démarrage a créé le site Web. Un délai de 10 minutes environ peut être nécessaire pour que l'exemple de script de démarrage se termine.

gcloud (bash)

Transmettre un script de démarrage Windows directement à une nouvelle VM

Transmettez le contenu d'un script de démarrage directement à une VM Windows Server au moment de sa création à l'aide de la commande gcloud compute instances create suivante :

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'

Remplacez VM_NAME par le nom de la VM.

Transmettre un script de démarrage Windows directement à une VM existante

Ajoutez le script de démarrage directement à une VM existante à l'aide de la commande gcloud compute instances add-metadata suivante :

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'

Remplacez VM_NAME par le nom de la VM.

Vérifier le script de démarrage

Une fois la VM démarrée, affichez l'adresse IP externe dans un navigateur Web pour vérifier que le script de démarrage a créé le site Web. Un délai de 10 minutes environ peut être nécessaire pour que l'exemple de script de démarrage se termine.

gcloud (invite de commande)

Transmettre un script de démarrage Windows directement à une nouvelle VM

Transmettez le contenu d'un script de démarrage directement à une VM Windows Server au moment de sa création à l'aide de la commande gcloud compute instances create suivante :

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'

Remplacez VM_NAME par le nom de la VM.

Transmettre un script de démarrage Windows directement à une VM existante

Ajoutez le script de démarrage directement à une VM existante à l'aide de la commande gcloud compute instances add-metadata suivante :

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'

Remplacez VM_NAME par le nom de la VM.

Vérifier le script de démarrage

Une fois la VM démarrée, affichez l'adresse IP externe dans un navigateur Web pour vérifier que le script de démarrage a créé le site Web. Un délai de 10 minutes environ peut être nécessaire pour que l'exemple de script de démarrage se termine.

gcloud (PowerShell)

Transmettre un script de démarrage Windows directement à une nouvelle VM

Transmettez le contenu d'un script de démarrage directement à une VM Windows Server au moment de sa création à l'aide de la commande gcloud compute instances create suivante :

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'

Remplacez VM_NAME par le nom de la VM.

Transmettre un script de démarrage Windows directement à une VM existante

Ajoutez le script de démarrage directement à une VM existante à l'aide de la commande gcloud compute instances add-metadata suivante :

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'

Remplacez VM_NAME par le nom de la VM.

Vérifier le script de démarrage

Une fois la VM démarrée, affichez l'adresse IP externe dans un navigateur Web pour vérifier que le script de démarrage a créé le site Web. Un délai de 10 minutes environ peut être nécessaire pour que l'exemple de script de démarrage se termine.

REST

Transmettre un script de démarrage Windows directement à une nouvelle VM

Transmettez le contenu d'un script de démarrage directement à une VM Windows Server au moment de sa création à l'aide de la méthode instances.insert suivante :

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

Remplacez les éléments suivants :

  • PROJECT_ID : ID du projet

  • ZONE : zone dans laquelle créer la nouvelle VM

Transmettre un script de démarrage Windows directement à une VM existante

  1. Récupérez la valeur tags.fingerprint de la VM à l'aide de la méthode instances.get.

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

    Remplacez les éléments suivants :

    • PROJECT_ID : ID du projet

    • ZONE : zone de la VM

    • VM_NAME : zone de la VM

  2. Transmettez le script de démarrage à l'aide de la valeur fingerprint, ainsi que la clé de métadonnées et la valeur du script de démarrage, dans un appel à la méthode 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"
       }
     ],
     ...
    }
    

    Remplacez les éléments suivants :

    • PROJECT_ID : ID du projet

    • ZONE : zone de la VM

    • VM_NAME : zone de la VM

    • FINGERPRINT : valeur tags.fingerprint obtenue à l'aide de la méthode instances.get

Vérifier le script de démarrage

Une fois la VM démarrée, affichez l'adresse IP externe dans un navigateur Web pour vérifier que le script de démarrage a créé le site Web. Un délai de 10 minutes environ peut être nécessaire pour que l'exemple de script de démarrage se termine.

Transmettre un script de démarrage Windows à partir d'un fichier local

Vous pouvez stocker un script de démarrage dans un fichier par lot local, un script de commande shell ou un script PowerShell non signé sur votre poste de travail, et transmettre le fichier local en tant que métadonnées à une VM lors de sa création. Vous ne pouvez pas utiliser de fichiers stockés sur des VM en tant que scripts de démarrage.

Avant de transmettre un script de démarrage Windows depuis fichier local à une VM, procédez comme suit :

  1. Créez un fichier local (.ps1) pour stocker le script de démarrage.

  2. Notez le chemin relatif entre gcloud CLI et le script de démarrage.

  3. Ajoutez le script de démarrage suivant au fichier :

    # 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)

Transmettre un script de démarrage Windows depuis un fichier local à une nouvelle VM

Créez une VM et transmettez le contenu d'un fichier local à utiliser comme script de démarrage. Pour ce faire, exécutez la commande gcloud compute instances create avec l'option --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

Remplacez les éléments suivants :

  • VM_NAME : nom de la VM
  • FILE_PATH : chemin relatif vers le fichier de script de démarrage
Transmettre un script de démarrage Windows depuis un fichier local à une VM existante

Transmettez un script de démarrage à une VM existante à partir d'un fichier local à l'aide de la commande gcloud compute instances add-metadata suivante :

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

Remplacez les éléments suivants :

  • VM_NAME : nom de la VM
  • FILE_PATH : chemin relatif vers le fichier de script de démarrage
Vérifier le script de démarrage

Affichez l'adresse IP externe dans un navigateur Web pour vérifier que le script de démarrage a créé le site Web. Un délai de 10 minutes environ peut être nécessaire pour que l'exemple de script de démarrage se termine.

gcloud (invite de commande)

Transmettre un script de démarrage Windows depuis un fichier local à une nouvelle VM

Créez une VM et transmettez le contenu d'un fichier local à utiliser comme script de démarrage. Pour ce faire, exécutez la commande gcloud compute instances create avec l'option --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

Remplacez les éléments suivants :

  • VM_NAME : nom de la VM
  • FILE_PATH : chemin relatif vers le fichier de script de démarrage
Transmettre un script de démarrage Windows depuis un fichier local à une VM existante

Transmettez un script de démarrage à une VM existante à partir d'un fichier local à l'aide de la commande gcloud compute instances add-metadata suivante :

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

Remplacez les éléments suivants :

  • VM_NAME : nom de la VM
  • FILE_PATH : chemin relatif vers le fichier de script de démarrage
Vérifier le script de démarrage

Affichez l'adresse IP externe dans un navigateur Web pour vérifier que le script de démarrage a créé le site Web. Un délai de 10 minutes environ peut être nécessaire pour que l'exemple de script de démarrage se termine.

gcloud (PowerShell)

Transmettre un script de démarrage Windows depuis un fichier local à une nouvelle VM

Créez une VM et transmettez le contenu d'un fichier local à utiliser comme script de démarrage. Pour ce faire, exécutez la commande gcloud compute instances create avec l'option --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

Remplacez les éléments suivants :

  • VM_NAME : nom de la VM
  • FILE_PATH : chemin relatif vers le fichier de script de démarrage
Transmettre un script de démarrage Windows depuis un fichier local à une VM existante

Transmettez un script de démarrage à une VM existante à partir d'un fichier local à l'aide de la commande gcloud compute instances add-metadata suivante :

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

Remplacez les éléments suivants :

  • VM_NAME : nom de la VM
  • FILE_PATH : chemin relatif vers le fichier de script de démarrage
Vérifier le script de démarrage

Affichez l'adresse IP externe dans un navigateur Web pour vérifier que le script de démarrage a créé le site Web. Un délai de 10 minutes environ peut être nécessaire pour que l'exemple de script de démarrage se termine.

Transmettre un script de démarrage Windows à partir de Cloud Storage

Vous pouvez stocker un script de démarrage en tant que fichier par lot local, script de commande shell, script PowerShell signé ou non signé, ou exécutable dans Cloud Storage et le transmettre à une VM lors de sa création. Après avoir ajouté un script de démarrage à Cloud Storage, vous disposez d'une URL que vous pouvez utiliser pour référencer le script de démarrage lorsque vous créez une VM.

Avant d'ajouter un script de démarrage à partir d'un bucket Cloud Storage, procédez comme suit :

  1. Créez un fichier pour stocker le script de démarrage. Cet exemple utilise un fichier PowerShell (.ps1).

  2. Ajoutez le script PowerShell suivant au fichier, qui installe un serveur Web et crée une page Web simple :

    # 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. Créez un bucket Cloud Storage.

  4. Ajoutez le fichier au bucket Cloud Storage.

Implications en termes de sécurité

  • Par défaut, les propriétaires et les éditeurs de projet peuvent accéder aux fichiers Cloud Storage qui appartiennent au même projet, sauf si des contrôles d'accès explicites l'interdisent.

  • Si le bucket ou l'objet Cloud Storage est moins sécurisé que les métadonnées, il existe un risque d'élévation des privilèges si le script de démarrage est modifié et que la VM redémarre. En effet, après le redémarrage de la VM, le script de démarrage s'exécute en tant que LocalSystem et peut utiliser les autorisations du compte de service associé pour accéder à d'autres ressources.

Console

Transmettre un script de démarrage stocké dans Cloud Storage à une nouvelle VM

  1. Accédez à la page Créer une instance dans Google Cloud Console.

    Accéder à la page Créer une instance

  2. Pour Disque de démarrage, sélectionnez Modifier, puis procédez comme suit :

    1. Dans l'onglet Images publiques, choisissez un système d'exploitation Windows Server.
    2. Cliquez sur Select (Sélectionner).
  3. Dans la section Identité et accès à l'API, sélectionnez un compte de service doté du rôle Lecteur des objets de l'espace de stockage.

  4. Développez la section Options avancées et procédez comme suit :

    1. Développez la section Gestion.
    2. Dans la section Métadonnées, ajoutez les valeurs suivantes :

      • Key : clé de métadonnées. Spécifie la clé de métadonnées windows-startup-script-url afin que le script s'exécute à chaque démarrage après le démarrage initial.

      • Value : valeur de métadonnées. Définie sur l'emplacement Cloud Storage du fichier de script de démarrage à l'aide de l'un des formats suivants :

        • URL authentifiée : https://storage.googleapis.com/BUCKET/FILE
        • URI gsutil : gs://BUCKET/FILE

        Remplacez les éléments suivants :

        • BUCKET : nom du bucket contenant le fichier de script de démarrage
        • FILE : nom du fichier de script de démarrage
  5. Pour créer la VM, cliquez sur Créer.

Transmettre un script de démarrage stocké dans Cloud Storage à une VM existante

  1. Dans Google Cloud Console, accédez à la page Instances de VM.

    Accéder à la page Instances de VM

  2. Cliquez sur le Nom de la VM.

  3. Cliquez sur Modifier.

  4. Dans la section Métadonnées, ajoutez les valeurs suivantes :

    • URL authentifiée : https://storage.googleapis.com/BUCKET/FILE
    • URI gsutil : gs://BUCKET/FILE

Vérifier le script de démarrage

Affichez l'adresse IP externe dans un navigateur Web pour vérifier que le script de démarrage a créé le site Web. Un délai de 10 minutes environ peut être nécessaire pour que l'exemple de script de démarrage se termine.

gcloud (bash)

Transmettre un script de démarrage stocké dans Cloud Storage à une nouvelle VM

Transmettez un script de démarrage stocké dans Cloud Storage à une VM Windows Server à l'aide de la commande gcloud compute instances create suivante. Pour la valeur de l'option --scopes, utilisez storage-ro afin que la VM puisse accéder à 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

Remplacez les éléments suivants :

  • VM_NAME : Nom de la VM.
  • CLOUD_STORAGE_URL : valeurs de métadonnées. Définie sur l'emplacement du fichier de script de démarrage en utilisant l'un des formats suivants :
    • URL authentifiée : https://storage.googleapis.com/BUCKET/FILE
    • URI gsutil : gs://BUCKET/FILE
Transmettre un script de démarrage stocké dans Cloud Storage à une VM existante

Transmettez un script de démarrage stocké dans Cloud Storage à une VM existante à l'aide de la commande gcloud compute instances add-metadata suivante :

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

Remplacez les éléments suivants :

  • VM_NAME : Nom de la VM.
  • CLOUD_STORAGE_URL : valeurs de métadonnées. Définie sur l'emplacement du fichier de script de démarrage en utilisant l'un des formats suivants :
    • URL authentifiée : https://storage.googleapis.com/BUCKET/FILE
    • URI gsutil : gs://BUCKET/FILE
Vérifier le script de démarrage

Affichez l'adresse IP externe dans un navigateur Web pour vérifier que le script de démarrage a créé le site Web. Un délai de 10 minutes environ peut être nécessaire pour que l'exemple de script de démarrage se termine.

gcloud (invite de commande)

Transmettre un script de démarrage stocké dans Cloud Storage à une nouvelle VM

Transmettez un script de démarrage stocké dans Cloud Storage à une VM Windows Server à l'aide de la commande gcloud compute instances create suivante. Pour la valeur de l'option --scopes, utilisez storage-ro afin que la VM puisse accéder à 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

Remplacez les éléments suivants :

  • VM_NAME : Nom de la VM.
  • CLOUD_STORAGE_URL : valeurs de métadonnées. Définie sur l'emplacement du fichier de script de démarrage en utilisant l'un des formats suivants :
    • URL authentifiée : https://storage.googleapis.com/BUCKET/FILE
    • URI gsutil : gs://BUCKET/FILE
Transmettre un script de démarrage stocké dans Cloud Storage à une VM existante

Transmettez un script de démarrage stocké dans Cloud Storage à une VM existante à l'aide de la commande gcloud compute instances add-metadata suivante :

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

Remplacez les éléments suivants :

  • VM_NAME : Nom de la VM.
  • CLOUD_STORAGE_URL : valeurs de métadonnées. Définie sur l'emplacement du fichier de script de démarrage en utilisant l'un des formats suivants :
    • URL authentifiée : https://storage.googleapis.com/BUCKET/FILE
    • URI gsutil : gs://BUCKET/FILE
Vérifier le script de démarrage

Affichez l'adresse IP externe dans un navigateur Web pour vérifier que le script de démarrage a créé le site Web. Un délai de 10 minutes environ peut être nécessaire pour que l'exemple de script de démarrage se termine.

gcloud (PowerShell)

Transmettre un script de démarrage stocké dans Cloud Storage à une nouvelle VM

Transmettez un script de démarrage stocké dans Cloud Storage à une VM Windows Server à l'aide de la commande gcloud compute instances create suivante. Pour la valeur de l'option --scopes, utilisez storage-ro afin que la VM puisse accéder à 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

Remplacez les éléments suivants :

  • VM_NAME : Nom de la VM.
  • CLOUD_STORAGE_URL : valeurs de métadonnées. Définie sur l'emplacement du fichier de script de démarrage en utilisant l'un des formats suivants :
    • URL authentifiée : https://storage.googleapis.com/BUCKET/FILE
    • URI gsutil : gs://BUCKET/FILE
Transmettre un script de démarrage stocké dans Cloud Storage à une VM existante

Transmettez un script de démarrage stocké dans Cloud Storage à une VM existante à l'aide de la commande gcloud compute instances add-metadata suivante :

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

Remplacez les éléments suivants :

  • VM_NAME : Nom de la VM.
  • CLOUD_STORAGE_URL : valeurs de métadonnées. Définie sur l'emplacement du fichier de script de démarrage en utilisant l'un des formats suivants :
    • URL authentifiée : https://storage.googleapis.com/BUCKET/FILE
    • URI gsutil : gs://BUCKET/FILE
Vérifier le script de démarrage

Affichez l'adresse IP externe dans un navigateur Web pour vérifier que le script de démarrage a créé le site Web. Un délai de 10 minutes environ peut être nécessaire pour que l'exemple de script de démarrage se termine.

REST

Transmettre un script de démarrage stocké dans Cloud Storage à une nouvelle VM

Transmettez un script de démarrage stocké dans Cloud Storage à une VM Windows Server à l'aide de la méthode instances.insert suivante. Dans le champ scopes, ajoutez https://www.googleapis.com/auth/devstorage.read_only afin que la VM puisse accéder à 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"
      },
      ...
    ]
  },
  ...
}

Remplacez les éléments suivants :

  • PROJECT_ID : ID du projet.

  • ZONE : zone dans laquelle créer la nouvelle VM.

  • CLOUD_STORAGE_URL : valeur de métadonnées. Définie sur l'emplacement Cloud Storage du fichier de script de démarrage à l'aide de l'un des formats suivants :

    • URL authentifiée : https://storage.googleapis.com/BUCKET/FILE
    • URI gsutil : gs://BUCKET/FILE

Transmettre un script de démarrage stocké dans Cloud Storage à une VM existante

  1. Récupérez la valeur tags.fingerprint de la VM à l'aide de la méthode instances.get.

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

    Remplacez les éléments suivants :

    • PROJECT_ID : ID du projet

    • ZONE : zone de la VM

    • VM_NAME : zone de la VM

  2. Transmettez le script de démarrage à l'aide de la valeur fingerprint, ainsi que la clé de métadonnées et la valeur du script de démarrage, dans un appel à la méthode 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"
        }
      ],
      ...
    }
    

    Remplacez les éléments suivants :

    • PROJECT_ID : ID du projet.

    • ZONE : zone de la VM.

    • VM_NAME : zone de la VM.

    • FINGERPRINT : valeur tags.fingerprint obtenue à l'aide de la méthode instances.get.

    • CLOUD_STORAGE_URL : valeur de métadonnées. Définie sur l'emplacement Cloud Storage du fichier de script de démarrage à l'aide de l'un des formats suivants :

      • URL authentifiée : https://storage.googleapis.com/BUCKET/FILE
      • URI gsutil : gs://BUCKET/FILE

Vérifier le script de démarrage

Affichez l'adresse IP externe dans un navigateur Web pour vérifier que le script de démarrage a créé le site Web. Un délai de 10 minutes environ peut être nécessaire pour que l'exemple de script de démarrage se termine.

Accéder aux métadonnées à partir d'un script de démarrage Windows

Dans un script de démarrage, vous pouvez accéder aux valeurs de métadonnées. Par exemple, vous pouvez utiliser le même script pour plusieurs VM et paramétrer chaque script individuellement en transmettant des valeurs de métadonnées différentes à chaque VM.

Pour accéder à une valeur de métadonnées personnalisée à partir d'un script de démarrage, procédez comme suit :

  1. Créez un script de démarrage qui interroge la valeur d'une clé de métadonnées. Par exemple, le script de démarrage PowerShell suivant (.ps1) interroge la valeur de la clé de métadonnées 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. Définissez la valeur de la clé de métadonnées foo lors de la création d'une VM à l'aide de la commande gcloud compute instances create suivante. Pour cet exemple, le script de démarrage est transmis à la VM à partir d'un fichier local.

    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
    

    Remplacez les éléments suivants :

    • VM_NAME : nom de la VM

    • FILE_PATH : chemin relatif vers le fichier de script de démarrage

    Pour en savoir plus sur la spécification d'une paire clé/valeur de métadonnées, consultez la page Définir et supprimer des métadonnées personnalisées.

  3. Affichez l'adresse IP externe dans un navigateur Web pour vérifier que le script de démarrage génère la valeur de foo. Un délai de 10 minutes environ peut être nécessaire pour que l'exemple de script de démarrage se termine.

Réexécuter un script de démarrage Windows

Réexécutez un script de démarrage sur une VM Windows en procédant comme suit :

  1. Se connecter à la VM.

  2. En exécutant la commande suivante :

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

Afficher le résultat d'un script de démarrage Windows

Affichez le résultat d'un script de démarrage Windows Server à l'aide de l'un des éléments suivants et en vérifiant la présence d'événements GCEMetadataScripts :

Étapes suivantes