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 è la procedura mediante la quale la tua identità viene verificata per l'accesso alle API e ai servizi 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 saperne di più, consulta Eseguire l'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 tenere presenti quando si utilizzano gli script di arresto:

  • Gli script di arresto hanno un tempo limitato per completare l'esecuzione prima dell'interruzione dell'istanza:
    • Istanze on demand: 90 secondi dopo l'arresto o l'eliminazione di un'istanza
    • Istanze preemptible: 30 secondi dopo l'inizio del prelievo delle istanze
  • 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 da determinati eventi ACPI (Advanced Configuration and Power Interface), come riavvii o arresti. Esistono molti modi per riavviare o interrompere un'istanza, ma solo alcuni attivano l'esecuzione dello script di arresto. Uno script di spegnimento viene eseguito nell'ambito delle seguenti azioni:

  • Quando un'istanza si arresta a causa di una richiesta instances.delete o instances.stop all'API.
  • Quando Compute Engine interrompe un'istanza prerilasciabile nell'ambito della procedura di preemption.
  • Quando un'istanza si arresta tramite una richiesta al sistema operativo guest, ad esempio sudo shutdown o sudo reboot.
  • Quando arresti manualmente un'istanza tramite la console Google Cloud o lo strumento gcloud compute.

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

Uno script di arresto può essere di qualsiasi tipo di file. Se è presente uno script di arresto, 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 è 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

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

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 normali istanze. Per ulteriori informazioni sui limiti di tempo di spegnimento per ogni tipo di istanza, consulta Periodo di spegnimento.

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

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