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 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 :

    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. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.
    3. 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.

      1. Install the Google Cloud CLI.
      2. To initialize the gcloud CLI, run the following command:

        gcloud init
      3. If you're using a local shell, then create local authentication credentials for your user account:

        gcloud auth application-default login

        You don't need to do this if you're using Cloud Shell.

      Pour en savoir plus, consultez Set up authentication for a local development environment.

      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

      Pour en savoir plus, consultez la section S'authentifier pour utiliser REST dans la documentation sur l'authentification Google Cloud.

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.

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ê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 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 :

  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 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'option --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 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.

resource "google_compute_instance" "shutdown_content_from_file" {
  name         = "instance-name-shutdown-content-from-file"
  machine_type = "f1-micro"
  zone         = "us-central1-c"
  metadata = {
    # Shuts down Apache server
    shutdown-script = file("${path.module}/shutdown-script.sh")
  }
  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-11"
    }
  }
  network_interface {
    # A default network is created for all Google Cloud projects
    network = "default"
    access_config {
    }
  }
}

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 :

  1. Accéder à la page Créer une instance.

    Accéder à la page Créer une instance

  2. Spécifiez les détails de la VM.

  3. Développez la section Options avancées.

  4. Développez Gestion, puis procédez comme suit :

    1. Dans la section Métadonnées, cliquez sur Ajouter un élément.
    2. Dans le champ Clé, saisissez shutdown-script comme clé de métadonnées.
    3. Dans le champ Valeur, ajoutez le contenu de votre script d'arrêt.
  5. 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.

resource "google_compute_instance" "default" {
  name         = "instance-name-shutdown-content-directly"
  machine_type = "f1-micro"
  zone         = "us-central1-c"
  metadata = {
    # Shuts down Apache server
    shutdown-script = "#! /bin/bash /etc/init.d/apache2 stop"
  }
  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-11"
    }
  }
  network_interface {
    # A default network is created for all Google Cloud projects
    network = "default"
    access_config {
    }
  }
}

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ées shutdown-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 :

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 :