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 Linux. Pour en savoir plus sur l'ajout d'un script de démarrage au niveau du projet, consultez gcloud compute project-info add-metadata
.
Pour les scripts de démarrage Linux, vous pouvez utiliser un fichier bash ou non-bash. Pour utiliser un fichier non-bash, désignez l'interpréteur en ajoutant #!
en haut du fichier. Par exemple, pour utiliser un script de démarrage Python 3, ajoutez #! /usr/bin/python3
en haut du fichier.
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 :
Il copie le script de démarrage sur la VM
Il définit les autorisations d'exécution sur le script de démarrage
Il exécute le script de démarrage en tant qu'utilisateur
root
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 section Présentation.
Avant de commencer
- Consultez la présentation des scripts de démarrage.
- Apprenez-en plus sur le serveur de métadonnées.
-
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
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- 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.
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
-
Clés de métadonnées pour les scripts de démarrage Linux
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 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 Linux, et fournit des informations sur la clé à utiliser en fonction de l'emplacement de stockage et de la taille du script de démarrage.
Clé de métadonnées | Utiliser pour |
---|---|
startup-script |
Transmettre un script de démarrage bash ou non bash, stocké localement ou ajouté directement et dont la taille ne dépasse pas 256 Ko |
startup-script-url |
Transmettre un script de démarrage bash ou non-bash, stocké dans Cloud Storage et dont la taille est supérieure à 256 Ko.
La chaîne que vous saisissez ici est utilisée telle quelle pour exécuter gcloud storage . Si votre startup-script-url contient des espaces, ne remplacez pas ces espaces par %20 et n'ajoutez pas de guillemets doubles ("" ) à la chaîne startup-script-url . |
Ordre d'exécution des scripts de démarrage Linux
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 tableau suivant présente l'ordre d'exécution des scripts de démarrage Linux en fonction de la clé de métadonnées.
Clé de métadonnées | Ordre d'exécution |
---|---|
startup-script |
En premier lors de chaque démarrage après le démarrage initial |
startup-script-url |
En deuxième lors de chaque démarrage après le démarrage initial |
Transmettre un script de démarrage Linux directement
Vous pouvez ajouter le contenu d'un script de démarrage directement à une VM lors de sa création. Les procédures suivantes montrent comment créer une VM avec un script de démarrage qui installe Apache et crée une page Web de base.
Console
Transmettre un script de démarrage Linux directement à une nouvelle VM
Accédez à la page Créer une instance dans Google Cloud Console.
Pour Disque de démarrage, sélectionnez Modifier, puis sélectionnez un système d'exploitation Linux.
Développez la section Options avancées et procédez comme suit :
- Développez la section Gestion.
Dans la section Automatisation, ajoutez le script de démarrage suivant :
#! /bin/bash apt update apt -y install apache2 cat <<EOF > /var/www/html/index.html <html><body><p>Linux startup script added directly.</p></body></html> EOF
Cliquez sur Créer.
Transmettre un script de démarrage Linux directement à une VM existante
Dans Google Cloud Console, accédez à la page Instances de VM.
Cliquez sur le Nom de la VM.
Cliquez sur Modifier.
Sous Automatisation, ajoutez le contenu de votre 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 1 minute environ peut être nécessaire pour que l'exemple de script de démarrage se termine.
gcloud
Transmettre un script de démarrage Linux directement à une nouvelle VM
Transmettez le contenu d'un script de démarrage directement à une VM lors de sa création à l'aide de la commande gcloud compute instances create
suivante.
gcloud compute instances create VM_NAME \ --image-project=debian-cloud \ --image-family=debian-10 \ --metadata=startup-script='#! /bin/bash apt update apt -y install apache2 cat <<EOF > /var/www/html/index.html <html><body><p>Linux startup script added directly.</p></body></html> EOF'
Remplacez VM_NAME par le nom de la VM.
Transmettre un script de démarrage Linux 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 \ --zone=ZONE \ --metadata=startup-script='#! /bin/bash apt update apt -y install apache2 cat <<EOF > /var/www/html/index.html <html><body><p>Linux startup script added directly.</p></body></html> EOF'
Remplacez les éléments suivants :
VM_NAME : nom de la VM
ZONE : zone 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 1 minute environ peut être nécessaire pour que l'exemple de script de démarrage se termine.
REST
Transmettre un script de démarrage Linux directement à une nouvelle VM
Transmettez le contenu d'un script de démarrage directement à une VM lors 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": "startup-script", "value": "#! /bin/bash\napt update\napt -y install apache2\ncat <<EOF > /var/www/html/index.html\n<html><body><p>Linux startup script added directly.</p></body></html>\nEOF" } ] }, ... }
Remplacez les éléments suivants :
PROJECT_ID : ID du projet
ZONE : zone dans laquelle créer la VM
Transmettre un script de démarrage Linux directement à une VM existante
Récupérez la valeur
tags.fingerprint
de la VM à l'aide de la méthodeinstances.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
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éthodeinstances.setMetadata
:POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setMetadata { "fingerprint": FINGERPRINT, "items": [ { "key": "startup-script", "value": "#! /bin/bash\napt update\napt -y install apache2\ncat <<EOF > /var/www/html/index.html\n<html><body><p>Linux startup script added directly.</p></body></html>\nEOF" } ], ... }
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éthodeinstances.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 1 minute environ peut être nécessaire pour que l'exemple de script de démarrage se termine.
Transmettre un script de démarrage Linux à partir d'un fichier local
Vous pouvez stocker un script de démarrage dans un fichier local 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 Linux depuis fichier local à une VM, procédez comme suit :
Créez un fichier local pour stocker le script de démarrage.
Notez le chemin relatif entre gcloud CLI et le script de démarrage.
Ajoutez le script de démarrage suivant au fichier :
#! /bin/bash apt update apt -y install apache2 cat <<EOF > /var/www/html/index.html <html><body><p>Linux startup script from a local file.</p></body></html> EOF
gcloud
Transmettre un script de démarrage Linux 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=debian-cloud \ --image-family=debian-10 \ --metadata-from-file=startup-script=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 Linux 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 \ --zone=ZONE \ --metadata-from-file startup-script=FILE_PATH
Remplacez les éléments suivants :
VM_NAME : nom de la VM
ZONE : zone 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 1 minute environ peut être nécessaire pour que l'exemple de script de démarrage se termine.
Transmettre un script de démarrage Linux à partir de Cloud Storage
Vous pouvez stocker un script de démarrage 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 :
Créez un fichier pour stocker le script de démarrage. Cet exemple utilise un fichier bash (
.sh
).Ajoutez le code suivant au fichier bash, qui installe Apache et crée une page Web simple :
#! /bin/bash apt update apt -y install apache2 cat <<EOF > /var/www/html/index.html <html><body><p>Linux startup script from Cloud Storage.</p></body></html> EOF
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
root
et peut utiliser les autorisations du compte de service associé pour accéder à d'autres ressources.
Limites
Console
Transmettre un script de démarrage stocké dans Cloud Storage à une nouvelle VM
Accédez à la page Créer une instance dans Google Cloud Console.
Spécifiez les détails de la VM.
Pour Disque de démarrage, sélectionnez Modifier, puis sélectionnez un système d'exploitation Linux.
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 (
roles/storage.objectViewer
).Développez la section Options avancées et procédez comme suit :
- Développez la section Gestion.
Dans la section Métadonnées, ajoutez les valeurs suivantes :
Key : clé de métadonnées. Définie sur
startup-script-url
pour ajouter un script de démarrage à partir de Cloud Storage.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 gcloud storage:
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
- URL authentifiée :
Pour créer la VM, cliquez sur Créer.
Transmettre un script de démarrage stocké dans Cloud Storage à une VM existante
Dans Google Cloud Console, accédez à la page Instances de VM.
Cliquez sur le Nom de la VM.
Cliquez sur Modifier.
Dans la section Métadonnées, ajoutez les valeurs suivantes :
Key (Clé) :
startup-script-url
Value (Valeur) : 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 gcloud storage:
gs://BUCKET/FILE
- URL authentifiée :
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 1 minute environ peut être nécessaire pour que l'exemple de script de démarrage se termine.
gcloud
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 lors de sa création à l'aide de la commande gcloud compute instances create
suivante. Pour la valeur de l'option --scope
, utilisez storage-ro
afin que la VM puisse accéder à Cloud Storage.
gcloud compute instances create VM_NAME \ --image-project=debian-cloud \ --image-family=debian-10 \ --scopes=storage-ro \ --metadata=startup-script-url=CLOUD_STORAGE_URL
Remplacez les éléments suivants :
VM_NAME : Nom de la 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 gcloud storage:
gs://BUCKET/FILE
- URL authentifiée :
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 \ --zone=ZONE \ --metadata startup-script-url=CLOUD_STORAGE_URL
Remplacez les éléments suivants :
VM_NAME : Nom de la VM.
ZONE : zone de la 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 gcloud storage:
gs://BUCKET/FILE
- URL authentifiée :
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 1 minute 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 au moment de sa création à 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": "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 gcloud storage:
gs://BUCKET/FILE
- URL authentifiée :
Transmettre un script de démarrage stocké dans Cloud Storage à une VM existante
Récupérez la valeur
tags.fingerprint
de la VM à l'aide de la méthodeinstances.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
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éthodeinstances.setMetadata
:POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setMetadata { "fingerprint": FINGERPRINT, "items": [ { "key": "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éthodeinstances.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 gcloud storage:
gs://BUCKET/FILE
- URL authentifiée :
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 1 minute 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 Linux
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 :
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 du fichier bash (
.sh
) suivant interroge la valeur de la clé de métadonnéesfoo
.#! /bin/bash METADATA_VALUE=$(curl http://metadata.google.internal/computeMetadata/v1/instance/attributes/foo -H "Metadata-Flavor: Google") apt update apt -y install apache2 cat <<EOF > /var/www/html/index.html <html><body><p>Accessing metadata value of foo: $METADATA_VALUE</p></body></html> EOF
Définissez la valeur de la clé de métadonnées
foo
lors de la création d'une VM à l'aide de la commandegcloud 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=debian-cloud \ --image-family=debian-10 \ --metadata-from-file=startup-script=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 section Définir des métadonnées personnalisées.
Depuis votre poste de travail local, 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 1 minute environ peut être nécessaire pour que l'exemple de script de démarrage se termine.
Réexécuter un script de démarrage Linux
Réexécutez un script de démarrage en procédant comme suit :
En exécutant la commande suivante :
sudo google_metadata_script_runner startup
Afficher le résultat d'un script de démarrage Linux
Vous pouvez afficher le résultat d'un script de démarrage Linux en effectuant l'une des opérations suivantes :
En vous connectant à l'instance et en exécutant la commande :
sudo journalctl -u google-startup-scripts.service
En affichant le résultat via le port série 1 dans la console Google Cloud et en recherchant la présence d'événements
google_metadata_script_runner
.
Étapes suivantes
Découvrez comment utiliser des scripts de démarrage sur des VM Windows.
Découvrez comment résoudre les problèmes liés aux scripts de démarrage.
Découvrez comment ajouter un script d'arrêt.
En savoir plus sur le stockage et la récupération des métadonnées