Esecuzione degli script di arresto


Crea ed esegui script di arresto che eseguono comandi appena prima dell'arresto o del riavvio di un'istanza di una macchina virtuale (VM). Questa opzione è utile se ti basi su script automatici per avviare e arrestare le istanze, consentendo alle istanze di eseguire operazioni di pulizia o altre 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 autoscaler. Se il gestore della scalabilità automatica arresta una VM nel gruppo, lo script di arresto viene eseguito prima dell'arresto della VM ed esegue le azioni che hai definito. Lo script viene eseguito durante il periodo di arresto limitato prima dell'interruzione della VM. Ad esempio, lo script di arresto potrebbe copiare i dati elaborati in Cloud Storage o eseguire il backup di eventuali log.

Gli script di arresto funzionano in modo molto simile agli script di avvio. Gran parte della documentazione relativa agli script di avvio si applica anche agli script di arresto.

Per le attività di arresto e riavvio, le VM eseguono sempre gli script di arresto 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.
  • Scopri che cos'è il server di metadati.
  • Se non l'hai ancora fatto, configura l'autenticazione. L'autenticazione è il processo mediante il quale la tua identità viene verificata per l'accesso a servizi e API. Google Cloud Per eseguire codice o esempi da un ambiente di sviluppo locale, puoi autenticarti su Compute Engine selezionando una delle seguenti opzioni:

    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

      Per utilizzare gli esempi di 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. 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.

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

      REST

      Per utilizzare gli esempi dell'API REST in questa pagina in un ambiente di sviluppo locale, utilizza le credenziali fornite a gcloud CLI.

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

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

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

Le sezioni seguenti descrivono le specifiche degli script di arresto.

Limitazioni

Esistono alcune limitazioni da tenere presenti quando si utilizzano gli script di arresto:

  • Compute Engine esegue gli script di arresto solo su una base di miglior impegno. In rari casi, Compute Engine non può garantire che lo script di arresto verrà completato.
  • Su Windows, i Criteri di gruppo locali vengono utilizzati per avviare lo script di arresto.
    • Il pacchetto di installazione configura l'impostazione dei criteri di gruppo locali Computer Configuration/Windows Setting/Scripts (Startup/Shutdown) per avviare lo script all'arresto del sistema.

Richiamo dello script di chiusura

Gli script di arresto vengono attivati quando l'istanza si arresta dopo uno dei seguenti eventi:

  • Procedi nel seguente modo:

  • Compute Engine arresta un'istanza nell'ambito di un'operazione di interruzione o cancellazione programmata.

  • Compute Engine interrompe una VM Spot o un'istanza prerilasciabile nell'ambito della procedura di preemption.

Uno script di arresto può essere di qualsiasi tipo di file. Se nell'istanza è presente uno script di arresto, Compute Engine esegue le seguenti operazioni:

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

Ad esempio, puoi fornire uno script Python anziché uno script bash. Tieni presente che Compute Engine esegue lo script alla lettera, indipendentemente dal tipo di script.

Per eseguire uno script diverso da bash, aggiungi una riga shebang nella parte superiore del file per indicare al sistema operativo quale interprete utilizzare. Ad esempio, per uno script Python, puoi aggiungere una riga shebang come:

#!/usr/bin/python

Tempo di esecuzione dello script di chiusura

Gli script di arresto iniziano a essere eseguiti quando Compute Engine imposta lo stato dell'istanza su STOPPING. Gli script devono essere completati prima che l'istanza sia completamente interrotta, ovvero quando il relativo stato diventa TERMINATED. Il tempo necessario all'istanza per raggiungere lo stato TERMINATED varia in base al tipo di istanza.

Se gli script richiedono più tempo del necessario per l'arresto dell'istanza, Compute Engine li arresta forzatamente, il che può comportare la perdita di dati o attività incomplete. Per evitare questo problema, arresta l'istanza dal sistema operativo guest. Questo approccio mantiene lo stato dell'istanza su STOPPING finché gli script di chiusura non terminano l'esecuzione.

Utilizzare uno script di arresto locale

Uno script di arresto locale è uno script che si trova sul tuo computer locale. Passa uno script di arresto locale come file o fornendo i contenuti direttamente a Compute Engine.

Gli script di arresto possono eseguire tutte le azioni necessarie, ma se lo script viene passato localmente, 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 su Cloud Storage. Per ulteriori informazioni, consulta Utilizzare lo script di arresto da Cloud Storage.

Fornisci un file di script di chiusura

Puoi passare un file di script di arresto locale solo tramite lo strumento della riga di comando gcloud.

gcloud

Per passare un file di script di arresto locale, fornisci il flag --metadata-from-file followed by a metadata key pair, shutdown-script=PATH/TO/FILE, dove PATH/TO/FILE è un percorso relativo allo script di arresto. Ad esempio:

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

Terraform

Per specificare direttamente uno script di arresto, utilizza la risorsa google_compute_instance con il percorso dello script di arresto 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 {
    }
  }
}

Fornire direttamente i contenuti dello script di chiusura

In alternativa, puoi passare direttamente i contenuti dello script di arresto.

Console

Nella console Google Cloud, specifica uno script di arresto utilizzando direttamente la chiave dei 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 arresto.
  5. Continua con la procedura di creazione della VM.

gcloud

Utilizzando Google Cloud CLI, utilizza il flag --metadata per fornire i contenuti dello script di arresto, 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 arresto, utilizza la risorsa google_compute_instance con lo script di arresto 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 arresto anomalo come parte della proprietà dei metadati nella richiesta quando crei un'istanza. Utilizza shutdown-script come chiave dei 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"
      }
    ]
  }...
}

Fornire uno script di arresto su istanze Windows

Esegui script di arresto su istanze Windows utilizzando le seguenti chiavi di metadati specifiche per 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 arresto passando chiavi diverse all'istanza, ma ogni chiave può essere specificata una sola volta per macchina virtuale.

Le seguenti chiavi possono essere utilizzate con uno script di arresto locale, utilizzando le stesse istruzioni 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

Utilizzare uno script di arresto da Cloud Storage

Puoi archiviare e utilizzare uno script di arresto da Cloud Storage. Segui le istruzioni riportate nella documentazione degli 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.

Applicare uno script di arresto alle istanze in esecuzione

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

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

Visualizzazione dell'output di uno script di arresto

Linux

Puoi visualizzare l'output di uno script di arresto di Linux eseguendo una delle seguenti operazioni:

Windows

Visualizza l'output di uno script di arresto di Windows Server utilizzando uno dei seguenti comandi e controllando la presenza di eventi GCEMetadataScripts: