Esecuzione degli script di arresto

Crea ed esegui script di chiusura che eseguono comandi subito prima dell'arresto o del riavvio di un'istanza di macchina virtuale (VM). Ciò è utile se utilizzi script automatici per avviare e arrestare le istanze, consentendo alle istanze di avere il tempo di pulire o eseguire attività come l'esportazione dei log o la sincronizzazione con altri sistemi.

Gli script di arresto sono particolarmente utili per le VM in un gruppo di istanze gestite con un gestore della scalabilità automatica. Se il gestore della scalabilità automatica arresta una VM nel gruppo, lo script di chiusura viene eseguito prima dell'arresto della VM e lo script di chiusura esegue le azioni da te definite. Lo script viene eseguito durante il periodo di arresto limitato prima dell'arresto della VM. Ad esempio, lo script di chiusura potrebbe copiare i dati elaborati in Cloud Storage o eseguire il backup di eventuali log.

Gli script di arresto funzionano in modo molto simile a quelli di avvio. Gran parte della documentazione relativa agli script di avvio riguarda anche gli script di chiusura.

Per le attività di chiusura e riavvio, le VM eseguono sempre gli script di chiusura come segue:

  • Per le VM Linux, utilizzando l'utente root.
  • Per le VM Windows, utilizzando l'account System.

Prima di iniziare

  • Scopri di più sugli script di avvio.
  • Capire cos'è il server di metadati.
  • Se non l'hai già fatto, configura l'autenticazione. L'autenticazione è il processo mediante il quale viene verificata l'identità dell'utente per ottenere l'accesso ai servizi e alle API Google Cloud. Per eseguire codice o esempi da un ambiente di sviluppo locale, puoi eseguire l'autenticazione in Compute Engine come segue.

    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. Installa Google Cloud CLI, quindi initialize eseguendo questo comando:

      gcloud init
    2. Set a default region and zone.
    3. Terraform

      Per utilizzare gli esempi Terraform in questa pagina in un ambiente di sviluppo locale, installa e inizializza gcloud CLI, quindi configura le Credenziali predefinite dell'applicazione con le tue credenziali utente.

      1. Installa Google Cloud CLI.
      2. Per initialize gcloud CLI, esegui questo comando:

        gcloud init
      3. Crea credenziali di autenticazione locali per il tuo Account Google:

        gcloud auth application-default login

      Per maggiori informazioni, consulta Set up authentication for a local development environment.

      REST

      Per utilizzare gli esempi di API REST in questa pagina in un ambiente di sviluppo locale, utilizzi le credenziali che fornisci a gcloud CLI.

        Installa Google Cloud CLI, quindi initialize eseguendo questo comando:

        gcloud init

      Per maggiori informazioni, consulta Autenticazione per l'utilizzo di REST nella documentazione sull'autenticazione di Google Cloud.

Autorizzazioni richieste per questa attività

Per eseguire questa attività, devi disporre delle seguenti autorizzazioni:

  • Tutte le autorizzazioni necessarie per creare un'istanza
  • compute.instances.setMetadata nell'istanza

Specifiche

Limitazioni

Esistono alcune limitazioni da considerare quando si utilizzano gli script di chiusura:

  • L'esecuzione degli script di arresto ha un periodo di tempo limitato prima dell'arresto dell'istanza:
    • Istanze on demand: 90 secondi dopo l'arresto o l'eliminazione di un'istanza
    • Istanze prerilasciabili: 30 secondi dopo l'inizio del prerilascio dell'istanza
  • Compute Engine esegue gli script di chiusura solo secondo il criterio del "best effort". In rari casi, Compute Engine non può garantire il completamento dello script di chiusura.
  • Su Windows, viene utilizzato il Criterio di gruppo locale per avviare lo script di chiusura.
    • Il pacchetto di installazione configura l'impostazione Criteri di gruppo locale Computer Configuration/Windows Setting/Scripts (Startup/Shutdown) per avviare lo script all'arresto del sistema.

Chiamata dello script di chiusura

Gli script di arresto vengono attivati da determinati eventi di configurazione avanzata e interfaccia di alimentazione (ACPI), come riavvii o arresti. Esistono molti modi per riavviare o arrestare un'istanza, ma solo alcuni attivano l'esecuzione dello script di chiusura. Uno script di chiusura viene eseguito nell'ambito delle seguenti azioni:

  • Quando un'istanza viene arrestata a causa di una richiesta instances.delete o di una richiesta instances.stop all'API.
  • Quando Compute Engine arresta un'istanza prerilasciabile nell'ambito del processo di prerilascio.
  • Quando un'istanza si arresta tramite una richiesta al sistema operativo guest, come sudo shutdown o sudo reboot.
  • Quando chiudi un'istanza manualmente tramite la console Google Cloud o lo strumento gcloud compute.

Lo script di chiusura non verrà eseguito se l'istanza viene reimpostata utilizzando instances().reset.

Uno script di chiusura può essere di qualsiasi tipo. Se è presente uno script di chiusura, Compute Engine:

  1. Copia lo script in un file locale nell'istanza.
  2. Imposta le autorizzazioni sul file per renderlo eseguibile.
  3. Esegui il file quando l'istanza viene arrestata.

Potresti, ad esempio, fornire uno script Python anziché uno script bash. Tieni presente che Compute Engine esegue lo script testualmente, indipendentemente dal tipo.

Per eseguire uno script non bash, aggiungi una riga shebang all'inizio del file per comunicare al sistema operativo quale interprete utilizzare. Ad esempio, per uno script Python, puoi aggiungere una linea shebang come:

#!/usr/bin/python

Tempo di esecuzione dello script di chiusura

Prima che un'istanza venga arrestata o riavviata, l'esecuzione dello script di chiusura ha un periodo di tempo limitato. Durante questo periodo, Compute Engine tenta di eseguire lo script di chiusura. Se lo script richiede più tempo di questo periodo di tempo, l'istanza si arresta automaticamente e tutte le attività in esecuzione vengono terminate. Se arresti o riavvii un'istanza inviando una richiesta al sistema operativo guest con il comando sudo shutdown, il limite non viene applicato.

La durata del periodo di arresto varia a seconda del tipo di istanza. Le istanze prerilasciabili hanno un periodo di arresto più breve rispetto alle istanze normali. Per ulteriori informazioni sui limiti del tempo di arresto per ogni tipo di istanza, consulta Periodo di arresto.

In generale, lo script di chiusura deve terminare l'esecuzione entro il periodo di arresto, in modo che il sistema operativo abbia il tempo di completare il processo di arresto e svuotare i buffer sul disco.

Usa uno script di chiusura locale

Uno script di chiusura locale è uno script che risiede sul tuo computer locale. Passa in uno script di chiusura locale come file o fornendo i contenuti direttamente a Compute Engine.

Gli script di arresto possono eseguire tutte le azioni necessarie, ma se passi il file localmente, lo script non può superare il limite di lunghezza del valore dei metadati di 256 kB. Per utilizzare uno script che supera il limite di lunghezza, archivia il file in Cloud Storage. Per ulteriori informazioni, consulta Utilizzare lo script di chiusura di Cloud Storage.

Fornisci un file di script di chiusura

Puoi passare un file di script di chiusura locale solo tramite lo strumento a riga di comando gcloud.

gcloud

Per passare in un file di script di chiusura locale, fornisci il flag --metadata-from-file, seguito da una coppia di chiavi dei metadati, shutdown-script=PATH/TO/FILE, dove PATH/TO/FILE è un percorso relativo dello script di chiusura. Ad esempio:

gcloud compute instances create example-instance \
    --metadata-from-file shutdown-script=examples/scripts/install.sh

Terraform

Per specificare direttamente uno script di chiusura, utilizza la risorsa google_compute_instance con il percorso dello script di chiusura nei metadati.

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 {
    }
  }
}

Fornisci direttamente i contenuti dello script di chiusura

In alternativa, puoi trasmettere direttamente i contenuti dello script di chiusura.

Console

Nella console Google Cloud, specifica direttamente uno script di chiusura utilizzando la chiave di metadati shutdown-script:

  1. Vai alla pagina Crea un'istanza.

    Vai a Crea un'istanza

  2. Specifica i dettagli della VM.

  3. Espandi la sezione Opzioni avanzate.

  4. Espandi Gestione ed esegui le seguenti operazioni:

    1. Nella sezione Metadati, fai clic su Aggiungi elemento.
    2. Nel campo Chiave, inserisci shutdown-script per la chiave dei metadati.
    3. Nel campo Valore, aggiungi i contenuti dello script di chiusura.
  5. Continua con il processo di creazione della VM.

gcloud

Con Google Cloud CLI, utilizza il flag --metadata per fornire i contenuti dello script di chiusura, seguito dalla coppia di chiavi shutdown-script=CONTENTS, dove CONTENTS è il contenuto dello script di arresto.

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

Terraform

Per specificare direttamente uno script di chiusura, utilizza la risorsa google_compute_instance con lo script di chiusura nei metadati.

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

Nell'API, fornisci uno script di chiusura come parte della proprietà dei metadati nella tua richiesta quando crei un'istanza. Usa shutdown-script come chiave di metadati:

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

Fornisci uno script di chiusura sulle istanze Windows

Esegui gli script di chiusura sulle istanze Windows utilizzando le seguenti chiavi di metadati specifiche di Windows. Scegli una delle chiavi specializzate elencate di seguito. Ogni chiave deve corrispondere al tipo di script che vuoi eseguire.

Puoi specificare più script di chiusura passando all'istanza chiavi diverse, ma ogni chiave può essere specificata una sola volta per macchina virtuale.

Le seguenti chiavi possono essere utilizzate con uno script di chiusura locale, seguendo le stesse istruzioni riportate sopra.

cmd script di chiusura bat script di chiusura ps1 script di chiusura
windows-shutdown-script-cmd windows-shutdown-script-bat windows-shutdown-script-ps1

Usa uno script di chiusura da Cloud Storage

Puoi archiviare e utilizzare uno script di chiusura da Cloud Storage. Segui le istruzioni nella documentazione sugli script di avvio, ma sostituisci startup-script-url con shutdown-script-url.

Per le istanze Windows, sostituisci windows-startup-script-url con windows-shutdown-script-url.

Applica uno script di chiusura alle istanze in esecuzione

Per aggiungere uno script di chiusura a un'istanza in esecuzione, segui le istruzioni nella documentazione sull'applicazione di uno script di avvio alle istanze in esecuzione, ma sostituisci le chiavi dei metadati con una delle seguenti chiavi:

  • shutdown-script: fornisci i contenuti dello script di chiusura direttamente con questa chiave. Con Google Cloud CLI, puoi fornire il percorso di un file di script di chiusura, utilizzando il flag --metadata-from-file e la chiave di metadati shutdown-script.
  • shutdown-script-url: fornisci un URL Cloud Storage al file dello script di arresto con questa chiave.

Visualizzazione dell'output di uno script di chiusura

Linux

Puoi visualizzare l'output di uno script di chiusura di Linux in uno dei seguenti modi:

Windows

Visualizza l'output di uno script di chiusura di Windows Server utilizzando uno dei seguenti elementi e controllando gli eventi GCEMetadataScripts: