Esecuzione degli script di arresto

Crea ed esegui script di arresto che eseguono comandi subito prima dell'arresto o del riavvio di un'istanza di macchina virtuale (VM). Questa opzione è utile se ti basi su script automatici per avviare e arrestare le istanze; concede alle istanze il tempo 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 gestore della scalabilità automatica. 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'arresto 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

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 sull'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 secondo il criterio del "best effort". 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.

Chiamata dello script di arresto

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

  • Operazioni eseguite da te:

  • Compute Engine arresta un'istanza nell'ambito di un'operazione di arresto o eliminazione programmata.

  • Compute Engine arresta una VM Spot o un'istanza preemptible nell'ambito del processo di prerilascio.

Uno script di arresto può essere un file di diversi tipi. Se nell'istanza è presente uno script di arresto, Compute Engine esegue queste 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 all'inizio 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 arresto

L'esecuzione degli script di arresto parte dal momento in cui Compute Engine imposta lo stato dell'istanza su STOPPING. Gli script devono essere completati prima che l'istanza sia completamente arrestata, 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 periodo necessario per l'arresto dell'istanza, Compute Engine forza l'interruzione degli script, 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 fino al termine dell'esecuzione degli script di arresto.

Utilizza 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 saperne di più, consulta Utilizza uno script di arresto da Cloud Storage.

Fornisci un file dello script di arresto

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

gcloud

Per passare un file dello script di arresto locale, fornisci il flag --metadata-from-file seguito da una coppia di chiavi di metadati, 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 {
    }
  }
}

Fornisci direttamente i contenuti dello script di arresto

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

Console

Nella console Trusted Cloud , specifica direttamente uno script di arresto utilizzando 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 e segui questi passaggi:

    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 il processo di creazione della VM.

gcloud

Utilizza il flag --metadata di Google Cloud CLI per fornire i contenuti dello script di arresto, seguiti 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 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"
      }
    ]
  }...
}

Fornisci uno script di arresto su istanze Windows

Esegui script di arresto su istanze Windows utilizzando le seguenti chiavi dei 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, sono valide le stesse istruzioni fornite sopra.

Script di arresto cmd Script di arresto bat Script di arresto ps1
windows-shutdown-script-cmd windows-shutdown-script-bat windows-shutdown-script-ps1

Utilizza 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.

Applica 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 chiavi seguenti:

  • shutdown-script: fornisci i contenuti dello script di arresto direttamente con questa chiave. Con Google Cloud CLI, puoi fornire il percorso di un file script di arresto utilizzando il flag --metadata-from-file e la chiave dei metadati shutdown-script.
  • shutdown-script-url: fornisci un URL di Cloud Storage che punta 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 di queste 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: