Exécuter des scripts d'arrêt

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. Cette fonctionnalité est utile si vous utilisez des scripts automatisés pour démarrer et arrêter des instances, ce qui permet à ces dernières 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 instances d'un groupe d'instances géré avec autoscaler. Si l'autoscaler arrête une instance du groupe, le script d'arrêt s'exécute avant l'arrêt de l'instance 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 l'instance. 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.

Avant de commencer

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.
  • Pour les instances Linux, vous pouvez utiliser des scripts d'arrêt uniquement avec l'image v20141007 ou les images suivantes. Pour les instances Windows Server, vous pouvez utiliser des scripts d'arrêt uniquement avec l'image v20150310 ou les images suivantes.

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 interruptions. 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ête instances.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 ou sudo reboot.
  • Lorsque vous arrêtez une instance manuellement via Cloud Console 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 :

  1. Copie le script dans un fichier local de l'instance.
  2. Définit des autorisations pour rendre le fichier exécutable.
  3. 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 se termine 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.

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

Fournir le contenu du script d'arrêt directement

Vous pouvez également transmettre directement le contenu de votre script d'arrêt.

Console

Dans Cloud Console, spécifiez un script d'arrêt directement à l'aide de la clé de métadonnées shutdown-script :

  1. Dans la console GCP, accédez à la page Instances de VM.

    Accéder à la page Instances de VM

  2. Cliquez sur Créer une instance.
  3. Sur la page Créer une instance, renseignez les propriétés de votre instance. Pour afficher les options de configuration avancées, développez la section Gestion, sécurité, disques, réseau et location unique.
  4. Dans la section Métadonnées, saisissez shutdown-script comme clé de métadonnées.
  5. Dans la zone Valeur, indiquez le contenu de votre script d'arrêt.
  6. Cliquez sur Créer pour créer l'instance.

gcloud

Avec l'outil de ligne de commande gcloud, entrez l'indicateur --metadata pour spécifier le contenu de votre script de démarrage, suivi de la paire de clés shutdown-script=CONTENTS, où CONTENTS est le contenu de votre script de démarrage.

gcloud compute instances create example-instance --metadata shutdown-script="#! /bin/bash
> # Shuts down Apache server
> /etc/init.d/apache2 stop"

API

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 l'outil de ligne de commande gcloud, 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ée shutdown-script.
  • shutdown-script-url : indiquez une URL Cloud Storage dans le fichier de script d'arrêt à l'aide de cette clé.