Ejecutar scripts de apagado


Cree y ejecute scripts de apagado que ejecuten comandos justo antes de que se detenga o reinicie una instancia de máquina virtual (VM). Esto es útil si depende de scripts automatizados para iniciar y cerrar instancias, dándoles tiempo para limpiar o realizar tareas, como exportar registros o sincronizar con otros sistemas.

Los scripts de apagado son especialmente útiles para las máquinas virtuales en un grupo de instancias administrado con un escalador automático . Si el escalador automático apaga una VM en el grupo, el script de apagado se ejecuta antes de que la VM se detenga y el script de apagado realiza cualquier acción que usted defina. El script se ejecuta durante el período de apagado limitado antes de que se detenga la máquina virtual. Por ejemplo, su secuencia de comandos de apagado podría copiar los datos procesados ​​a Cloud Storage o hacer una copia de seguridad de los registros.

Los scripts de apagado funcionan de manera muy similar a los scripts de inicio. Gran parte de la documentación sobre scripts de inicio también se aplica a los scripts de apagado.

Tanto para las tareas de apagado como de reinicio, las máquinas virtuales siempre ejecutan scripts de apagado de la siguiente manera:

  • Para máquinas virtuales Linux, utilizando el usuario root .
  • Para máquinas virtuales Windows, mediante la cuenta System .

Antes de comenzar

  • Obtenga más información sobre los scripts de inicio .
  • Comprenda qué es el servidor de metadatos .
  • Si aún no lo has hecho, configura la autenticación. La autenticación es el proceso mediante el cual se verifica su identidad para acceder a Google Cloud servicios y API. Para ejecutar código o muestras desde un entorno de desarrollo local, puedes autenticarte en Compute Engine seleccionando una de las siguientes opciones:

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

      gcloud init

      If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

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

      Para usar las muestras de Terraform de esta página en un entorno de desarrollo local, instala e inicializa gcloud CLI y, luego, configura las credenciales predeterminadas de la aplicación con tus credenciales de usuario.

      1. Install the Google Cloud CLI.
      2. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

      3. To initialize the gcloud CLI, run the following command:

        gcloud init
      4. 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.

        If an authentication error is returned, confirm that you have configured the gcloud CLI to use Workforce Identity Federation.

      Para obtener más información, consulta Set up authentication for a local development environment.

      REST

      Para usar las muestras de la API de REST en esta página en un entorno de desarrollo local, debes usar las credenciales que proporcionas a la CLI de gcloud.

        After installing the Google Cloud CLI, initialize it by running the following command:

        gcloud init

        If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

      Para obtener más información, consulta Autentica para usar REST en la documentación de autenticación de Google Cloud .

Permisos necesarios para esta tarea

Para realizar esta tarea, debe tener los siguientes permisos :

  • Todos los permisos necesarios para crear una instancia.
  • compute.instances.setMetadata en la instancia

Presupuesto

Las siguientes secciones describen las especificaciones para los scripts de apagado.

Limitaciones

Hay algunas limitaciones a tener en cuenta al utilizar scripts de apagado:

  • Compute Engine ejecuta scripts de apagado solo en la medida de lo posible. En casos excepcionales, Compute Engine no puede garantizar que se complete el script de apagado.
  • En Windows, la Política de grupo local se utiliza para iniciar el script de apagado.
    • El paquete de instalación configura la Computer Configuration/Windows Setting/Scripts (Startup/Shutdown) para iniciar la secuencia de comandos al apagar el sistema.

Invocación del script de apagado

Los scripts de apagado se activan cuando la instancia se cierra después de que ocurra cualquiera de los siguientes eventos:

  • Haz lo siguiente:

  • Compute Engine detiene una instancia como parte de una operación de detención o eliminación programada.

  • Compute Engine detiene una VM puntual o una instancia interrumpible como parte del proceso de preferencia .

Un script de apagado puede ser de cualquier tipo de archivo. Si hay un script de apagado presente en la instancia, Compute Engine hace lo siguiente:

  1. Copia el script a un archivo local en la instancia.
  2. Establece permisos en el archivo para que el script sea ejecutable.
  3. Ejecuta el archivo cuando la instancia se cierra.

Podría, por ejemplo, proporcionar una secuencia de comandos Python en lugar de una secuencia de comandos bash. Tenga en cuenta que Compute Engine ejecuta el script palabra por palabra, independientemente del tipo de script.

Para ejecutar un script que no sea bash, agregue una línea shebang en la parte superior del archivo para que el sistema operativo sepa qué intérprete usar. Por ejemplo, para un script de Python, puedes agregar una línea shebang como:

#!/usr/bin/python

Tiempo de ejecución del script de apagado

Tus scripts de apagado comienzan a ejecutarse cuando Compute Engine establece el estado de la instancia en STOPPING . Sus scripts deben completarse antes de que la instancia se detenga por completo, que es cuando su estado cambia a TERMINATED . El tiempo que tarda la instancia en alcanzar el estado TERMINATED varía según el tipo de instancia .

Si sus secuencias de comandos tardan más que el tiempo que tarda la instancia en detenerse, Compute Engine detiene las secuencias de comandos a la fuerza, lo que puede provocar pérdida de datos o tareas incompletas. Para evitar esto, detenga la instancia desde su sistema operativo invitado . Este enfoque mantiene el estado de la instancia en STOPPING hasta que los scripts de apagado terminen de ejecutarse.

Utilice un script de apagado local

Un script de apagado local es un script que reside en su computadora local. Pase una secuencia de comandos de apagado local, ya sea como un archivo o entregando el contenido directamente a Compute Engine.

Los scripts de apagado pueden realizar tantas acciones como necesite, pero si pasa el archivo localmente, su script no puede exceder el límite de longitud del valor de metadatos de 256 KB. Para usar una secuencia de comandos que exceda el límite de longitud, almacene su archivo en Cloud Storage. Consulta Usar secuencia de comandos de apagado de Cloud Storage para obtener más información.

Proporcionar un archivo de secuencia de comandos de apagado

Solo puedes pasar un archivo de secuencia de comandos de apagado local a través de la herramienta de línea de comandos gcloud .

nube de gcloud

Para pasar un archivo de script de apagado local, proporcione el indicador --metadata-from-file , seguido de un par de claves de metadatos, shutdown-script=PATH/TO/FILE , donde PATH/TO/FILE es una ruta relativa al script de apagado. Por ejemplo:

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

Terraformar

Para especificar una secuencia de comandos de apagado directamente, use el recurso google_compute_instance con la ruta a la secuencia de comandos de apagado en los metadatos.

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

Proporcionar el contenido del script de apagado directamente

Alternativamente, puede pasar el contenido de su secuencia de comandos de apagado directamente.

Consola

En la consola de Google Cloud, especifica un script de apagado directamente usando la clave de metadatos shutdown-script :

  1. Vaya a la página Crear una instancia .

    Ir a Crear una instancia

  2. Especifique los detalles de la máquina virtual.

  3. Expanda la sección Opciones avanzadas .

  4. Expanda Gestión y haga lo siguiente:

    1. En la sección Metadatos , haga clic en Agregar elemento .
    2. En el campo Clave , ingrese shutdown-script para la clave de metadatos.
    3. En el campo Valor , agregue el contenido de su secuencia de comandos de apagado.
  5. Continúe con el proceso de creación de VM.

nube de gcloud

Usando la CLI de Google Cloud, use el indicador --metadata para proporcionar el contenido de su secuencia de comandos de apagado, seguido del par de claves shutdown-script=CONTENTS , donde CONTENTS es el contenido de su secuencia de comandos de apagado.

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

Terraformar

Para especificar una secuencia de comandos de apagado directamente, use el recurso google_compute_instance con la secuencia de comandos de apagado en los metadatos.

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

DESCANSAR

En la API, proporcione una secuencia de comandos de apagado como parte de la propiedad de metadatos en su solicitud cuando cree una instancia. Utilice shutdown-script como clave de metadatos:

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

Proporcionar un script de apagado en instancias de Windows

Ejecute scripts de apagado en instancias de Windows utilizando las siguientes claves de metadatos específicas de Windows. Elija entre cualquiera de las claves especializadas que se enumeran a continuación. Cada clave debe coincidir con el tipo de script que desea ejecutar.

Puede especificar varios scripts de apagado pasando diferentes claves a su instancia, pero cada clave solo se puede especificar una vez por máquina virtual.

Las siguientes claves se pueden utilizar con un script de apagado local, siguiendo las mismas instrucciones anteriores.

scripts de apagado cmd scripts de apagado bat guiones de apagado ps1
windows-shutdown-script-cmd windows-shutdown-script-bat windows-shutdown-script-ps1

Utilice una secuencia de comandos de apagado de Cloud Storage

Puede almacenar y utilizar una secuencia de comandos de apagado desde Cloud Storage. Siga las instrucciones en la documentación de los scripts de inicio, pero reemplace startup-script-url con shutdown-script-url .

Para instancias de Windows, reemplace windows-startup-script-url con windows-shutdown-script-url .

Aplicar un script de apagado a instancias en ejecución

Para agregar una secuencia de comandos de apagado a una instancia en ejecución, siga las instrucciones en la documentación Aplicación de una secuencia de comandos de inicio a instancias en ejecución, pero reemplace las claves de metadatos con una de las siguientes claves:

  • shutdown-script : proporcione el contenido del script de apagado directamente con esta clave. Con la CLI de Google Cloud, puede proporcionar la ruta a un archivo de secuencia de comandos de apagado mediante el indicador --metadata-from-file y la clave de metadatos shutdown-script .
  • shutdown-script-url : proporcione una URL de Cloud Storage al archivo de secuencia de comandos de apagado con esta clave.

Ver el resultado de un script de apagado

linux

Puede ver el resultado de un script de apagado de Linux realizando cualquiera de las siguientes acciones:

ventanas

Vea el resultado de un script de cierre de Windows Server utilizando cualquiera de los siguientes y verificando eventos GCEMetadataScripts :