Créez et exécutez des scripts d'arrêt exécutant des commandes juste avant l'arrêt ou le redémarrage d'une instance de machine virtuelle (VM). Cette fonctionnalité est utile si vous utilisez des scripts automatisés pour démarrer et arrêter des instances, ce qui permet à celles-ci d'effectuer un nettoyage ou d'exécuter des tâches telles que l'exportation de journaux ou la synchronisation avec d'autres systèmes.
Les scripts d'arrêt sont particulièrement utiles pour les VM d'un groupe d'instances géré avec autoscaler. Si l'autoscaler arrête une VM du groupe, le script d'arrêt s'exécute avant l'arrêt de la VM et effectue les actions que vous définissez. Le script s'exécute pendant la courte période de temps précédent l'arrêt de la VM. Par exemple, le script d'arrêt peut copier des données traitées dans Cloud Storage ou sauvegarder des journaux.
Les scripts d'arrêt fonctionnent de manière semblable aux scripts de démarrage. Une grande partie de la documentation au sujet des scripts de démarrage s'applique également aux scripts d'arrêt.
Pour les tâches d'arrêt et de redémarrage, les VM exécutent toujours les scripts d'arrêt comme suit :
- Pour les VM Linux, avec l'utilisateur
root
. - Pour les VM Windows, avec le compte
System
.
Avant de commencer
- Obtenez des informations sur les scripts de démarrage.
- Découvrez 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.
Terraform
Pour utiliser les exemples Terraform de cette page dans un environnement de développement local, installez et initialisez gcloud CLI, puis configurez le service Identifiants par défaut de l'application à l'aide de vos identifiants utilisateur.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create local authentication credentials for your user account:
gcloud auth application-default login
Pour en savoir plus, consultez les sections sur Configurer l'authentification pour un environnement de développement local.
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
-
Autorisations requises pour cette tâche
Pour effectuer cette tâche, vous devez disposer des autorisations suivantes :
- Toutes les autorisations requises pour créer une instance
compute.instances.setMetadata
sur l'instance
Spécifications
Limites
Tenez compte de l'existence de certaines limites lors de l'utilisation de scripts d'arrêt :
- Les scripts d'arrêt disposent d'un temps d'exécution limité avant l'arrêt de l'instance :
- Instances à la demande : 90 secondes après l'arrêt ou la suppression d'une instance
- Instances préemptives : 30 secondes après le début de la préemption d'instance
- Compute Engine exécute les scripts d'arrêt de façon la plus optimale possible. Dans de rares cas, Compute Engine ne peut pas garantir l'exécution du script d'arrêt.
- Sous Windows, la stratégie de groupe locale est utilisée pour lancer le script d'arrêt.
- Le package d'installation configure le paramètre de stratégie de groupe locale
Computer Configuration/Windows Setting/Scripts (Startup/Shutdown)
pour lancer le script lors de l'arrêt du système.
- Le package d'installation configure le paramètre de stratégie de groupe locale
Appel du script d'arrêt
Les scripts d'arrêt sont déclenchés par certains événements ACPI (Advanced Configuration and Power Interface), tels que des redémarrages ou des arrêts. Il existe plusieurs manières de redémarrer ou d'arrêter une instance, mais seules certaines déclenchent l'exécution du script d'arrêt. Un script d'arrêt s'exécute dans le cadre des actions suivantes :
- Lorsqu'une instance se ferme en raison d'une requête
instances.delete
ou d'une requêteinstances.stop
adressée à l'API. - Compute Engine arrête une instance préemptive dans le cadre du processus de préemption.
- Lorsqu'une instance se ferme via une requête adressée au système d'exploitation invité, par exemple
sudo shutdown
ousudo reboot
. - Lorsque vous arrêtez une instance manuellement via la console Google Cloud ou l'outil
gcloud compute
.
Le script d'arrêt ne s'exécutera pas si l'instance est réinitialisée à l'aide de instances().reset
.
Un script d'arrêt peut être constitué de n'importe quel type de fichier. En présence d'un script d'arrêt, Compute Engine :
- Copie le script dans un fichier local de l'instance.
- Définit des autorisations pour rendre le fichier exécutable.
- Exécute le fichier à l'arrêt de l'instance.
Vous pouvez, par exemple, fournir un script Python au lieu d'un script bash. Sachez que Compute Engine exécutera le script intégralement, quel que soit son type.
Pour exécuter un script qui n'est pas bash, ajoutez une ligne shebang en haut du fichier pour que le système d'exploitation sache quel interpréteur utiliser. Par exemple, pour un script Python, vous pouvez ajouter une ligne shebang comme :
#!/usr/bin/python
Temps d'exécution du script d'arrêt
Avant l'arrêt ou le redémarrage d'une instance, le script d'arrêt dispose d'un temps d'exécution limité. Au cours de ce délai, Compute Engine tente d'exécuter le script d'arrêt. Si l'exécution du script excède ce délai, l'instance s'arrête automatiquement et toutes les tâches en cours d'exécution sont supprimées. Si vous arrêtez ou redémarrez une instance en envoyant une requête au système d'exploitation invité à l'aide de la commande sudo shutdown
, la limite ne s'applique pas.
La durée du temps d'exécution avant l'arrêt varie selon le type d'instance. Les instances préemptives disposent d'un temps d'exécution plus court que les instances normales. Pour plus d'informations sur les périodes d'arrêt pour chaque type d'instance, consultez la section Période d'arrêt.
En règle générale, votre script d'arrêt doit être exécuté pendant le temps d'exécution précédent l'arrêt afin que le système d'exploitation ait le temps de terminer son processus d'arrêt et de vider les tampons sur le disque.
Utiliser un script d'arrêt local
Un script d'arrêt local est un script qui réside sur votre ordinateur local. Passez en mode script d'arrêt local via un fichier ou en basculant le contenu directement dans Compute Engine.
Les scripts d'arrêt peuvent effectuer autant d'actions que nécessaire, mais en cas de transmission locale de fichier, la durée de votre script ne peut pas dépasser la valeur de métadonnées limite de 256 ko. Pour utiliser un script qui excède cette durée, stockez votre fichier sur Cloud Storage. Pour plus d'informations, reportez-vous à la section Utiliser le script d'arrêt à partir de Cloud Storage.
Fournir un fichier de script d'arrêt
Vous ne pouvez transmettre un fichier de script d'arrêt local que via l'outil de ligne de commande gcloud
.
gcloud
Pour transmettre un fichier de script d'arrêt local, fournissez l'indicateur --metadata-from-file
, suivi d'une paire de clés de métadonnées, shutdown-script=PATH/TO/FILE
, où PATH/TO/FILE
est un chemin d'accès relatif au script d'arrêt. Exemple :
gcloud compute instances create example-instance \
--metadata-from-file shutdown-script=examples/scripts/install.sh
Terraform
Pour spécifier directement un script d'arrêt, utilisez la ressource google_compute_instance
avec le chemin d'accès au script d'arrêt dans les métadonnées.
Fournir le contenu du script d'arrêt directement
Vous pouvez également transmettre directement le contenu de votre script d'arrêt.
Console
Dans la console Google Cloud, spécifiez un script d'arrêt directement à l'aide de la clé de métadonnées shutdown-script
:
Accéder à la page Créer une instance.
Spécifiez les détails de la VM.
Développez la section Options avancées.
Développez Gestion, puis procédez comme suit :
- Dans la section Métadonnées, cliquez sur Ajouter un élément.
- Dans le champ Clé, saisissez
shutdown-script
comme clé de métadonnées. - Dans le champ Valeur, ajoutez le contenu de votre script d'arrêt.
Poursuivez le processus de création de la VM.
gcloud
Avec Google Cloud CLI, utilisez l'indicateur --metadata
pour fournir le contenu de votre script d'arrêt, suivi de la paire de clés shutdown-script=CONTENTS
, où CONTENTS
est le contenu de votre script d'arrêt.
gcloud compute instances create example-instance --metadata shutdown-script="#! /bin/bash
> # Shuts down Apache server
> /etc/init.d/apache2 stop"
Terraform
Pour spécifier directement un script d'arrêt, utilisez la ressource google_compute_instance
avec le script d'arrêt dans les métadonnées.
REST
Dans l'API, fournissez un script d'arrêt au niveau de la propriété des métadonnées dans votre requête de création d'instance. Utilisez shutdown-script
comme clé de métadonnées :
POST https://compute.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/instances
{...
"metadata": {
"items": [
{
"key": "shutdown-script",
"value": "#! /bin/bash\n\n# Shuts down Apache server\n/etc/init.d/apache2 stop"
}
]
}...
}
Fournir un script d'arrêt sur les instances Windows
Exécutez des scripts d'arrêt sur des instances Windows à l'aide des clés de métadonnées spécifiques à Windows. Choisissez l'une des clés spécialisées répertoriées ci-dessous. Chaque clé doit correspondre au type de script que vous souhaitez exécuter.
Vous pouvez spécifier plusieurs scripts d'arrêt en transmettant différentes clés à votre instance, mais chaque clé ne peut être spécifiée qu'une seule fois par machine virtuelle.
Les clés suivantes peuvent être utilisées avec un script d'arrêt local, en utilisant les instructions décrites ci-dessus.
scripts d'arrêt cmd |
scripts d'arrêt bat |
scripts d'arrêt ps1 |
---|---|---|
windows-shutdown-script-cmd |
windows-shutdown-script-bat |
windows-shutdown-script-ps1 |
Utiliser un script d'arrêt de Cloud Storage
Vous pouvez stocker et utiliser un script d'arrêt à partir de Cloud Storage. Suivez les instructions de la documentation Scripts de démarrage, mais remplacez startup-script-url
par shutdown-script-url
.
Pour les instances Windows, remplacez windows-startup-script-url
par windows-shutdown-script-url
.
Appliquer un script d'arrêt à des instances en cours d'exécution
Pour ajouter un script d'arrêt à une instance en cours d'exécution, suivez les instructions de la documentation Application d'un script de démarrage à des instances en cours d'exécution, mais remplacez les clés de métadonnées par l'une des clés suivantes :
shutdown-script
: fournissez le contenu du script d'arrêt directement avec cette clé. À l'aide de Google Cloud CLI, vous pouvez fournir le chemin d'accès à un fichier de script d'arrêt, en utilisant l'indicateur--metadata-from-file
et la clé de métadonnéesshutdown-script
.shutdown-script-url
: indiquez une URL Cloud Storage dans le fichier de script d'arrêt à l'aide de cette clé.
Afficher le résultat d'un script d'arrêt
Linux
Vous pouvez afficher le résultat d'un script d'arrêt Linux en effectuant l'une des opérations suivantes :
En vous connectant à l'instance et en exécutant la commande :
sudo journalctl -u google-shutdown-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
.IAP Desktop à partir d'un poste de travail Windows. Pour plus d'informations, consultez le dépôt GoogleCloudPlatform/iap-desktop sur GitHub.
Windows
Affichez le résultat d'un script d'arrêt Windows Server à l'aide de l'un des éléments suivants et en vérifiant la présence d'événements GCEMetadataScripts
:
Port série 1 de la console Google Cloud. Pour en savoir plus, consultez la section Afficher les données en sortie du port série.
Journal des applications de l'observateur d'événements Windows.
IAP Desktop à partir d'un poste de travail Windows. Pour plus d'informations, consultez le dépôt GoogleCloudPlatform/iap-desktop sur GitHub.