Ejecuta secuencias de comandos de cierre


Crea y ejecuta secuencias de comandos de apagado que ejecuten comandos justo antes de que se detenga o reinicie una instancia de máquina virtual (VM). Esto es útil si usas las secuencias de comandos automatizadas para iniciar y apagar instancias, lo que permite que las instancias se limpien o realicen tareas, como exportar registros o sincronizarse con otros sistemas.

Las secuencias de comandos de apagado son útiles, en particular, para las VM de un grupo de instancias administrado con un escalador automático. Si el escalador automático apaga una VM del grupo, la secuencia de comandos de apagado se ejecuta antes de que se detenga la VM y realiza cualquier acción que definas. La secuencia de comandos se ejecuta durante el período de apagado limitado antes de que se detenga la VM. Por ejemplo, la secuencia de comandos de apagado puede copiar datos procesados en Cloud Storage o hacer una copia de seguridad de cualquier registro.

Las secuencias de comandos de apagado funcionan de manera muy similar a las secuencias de comandos de inicio. Gran parte de la documentación para las secuencia de comandos de inicio también se aplica a las de apagado.

Para las tareas de apagado y reinicio, las VM siempre ejecutan secuencias de comandos de apagado de la siguiente manera:

  • Para las VM de Linux, utiliza el usuario root.
  • Para las VM de Windows, utiliza la cuenta System.

Antes de comenzar

  • Obtén información sobre las secuencia de comandos de inicio.
  • Comprende qué es el servidor de metadatos.
  • Si aún no lo hiciste, configura la autenticación. La autenticación es el proceso mediante el cual se verifica tu identidad para acceder a los servicios y las API de Google Cloud. Para ejecutar un código o muestras desde un entorno de desarrollo local, puedes autenticarte en Compute Engine de la siguiente manera.

    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

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

      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.

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

        gcloud init

      Si deseas 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, debes tener los siguientes permisos:

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

Especificaciones

Limitaciones

Hay algunas limitaciones que se deben tener en cuenta cuando se usan secuencias de comandos de apagado:

  • Las secuencias de comandos de apagado tienen un tiempo limitado para terminar de ejecutarse antes de que se detenga la instancia:
    • Instancias bajo demanda: 90 segundos después de detener o borrar una instancia
    • Instancias interrumpibles: 30 segundos después de que comience la interrupción de la instancia
  • Compute Engine ejecuta secuencias de comandos de apagado solo en función del mejor esfuerzo. Es poco frecuente que Compute Engine no pueda garantizar que se complete la secuencia de comandos de apagado.
  • En Windows, se usa la política de grupo local para iniciar la secuencia de comandos de apagado.
    • El paquete de instalación configura la configuración Computer Configuration/Windows Setting/Scripts (Startup/Shutdown) de la política de grupo local para iniciar la secuencia de comandos cuando se cierra el sistema.

Invocación de la secuencia de comandos de apagado

Las secuencias de comandos de apagado se activan mediante ciertos eventos de Interfaz avanzada de configuración y energía (ACPI), como los reinicios o las detenciones. Hay muchas formas de reiniciar o detener una instancia, pero solo algunas activan la ejecución de la secuencia de comandos de apagado. Una secuencia de comandos de apagado se ejecuta como parte de las siguientes acciones:

La secuencia de comandos de apagado no se ejecutará si la instancia se restablece con instances().reset.

Una secuencia de comandos de apagado puede ser de cualquier tipo de archivo. Si hay presente una secuencia de comandos de apagado, Compute Engine realizará lo siguiente:

  1. Copiará la secuencia de comandos en un archivo local en la instancia.
  2. Establecerá permisos en el archivo para hacerlo ejecutable.
  3. Ejecutará el archivo cuando la instancia se detenga.

Podrías, por ejemplo, proporcionar una secuencia de comandos de Python, en lugar de una de Bash. Ten en cuenta que Compute Engine ejecuta la secuencia de comandos de manera literal, sin importar el tipo.

Para ejecutar una secuencia de comandos que no sea Bash, agrega una línea shebang en la parte superior del archivo para que el sistema operativo sepa qué intérprete usar. Por ejemplo, para una secuencia de comandos de Python, puedes agregar una línea shebang como la que se muestra a continuación:

#!/usr/bin/python

Tiempo de ejecución de la secuencia de comandos de apagado

Antes de que una instancia se apague o reinicie, la secuencia de comandos de apagado tiene un período limitado para ejecutarse. Durante este período, Compute Engine intenta ejecutar la secuencia de comandos de apagado. Si la secuencia de comandos lleva más tiempo en completarse que este período, la instancia se detiene de forma automática y todas las tareas en ejecución finalizan. Si apagas o reinicias una instancia mediante una solicitud al sistema operativo invitado con el comando sudo shutdown, el límite no aplica.

La duración del período de apagado varía según el tipo de instancia. Las instancias interrumpibles tienen un período de apagado más corto que las instancias normales. Para obtener más información sobre los límites de tiempo de apagado en cada tipo de instancia, consulta Período de baja.

En general, la secuencia de comandos de apagado debe terminar de ejecutarse dentro del período de apagado para que el sistema operativo tenga tiempo de completar el proceso de apagado y vaciar los búferes en el disco.

Usa una secuencia de comandos de apagado local

Una secuencia de comandos de apagado local es una secuencia de comandos que reside en tu computadora local. Debes pasar una secuencia de comandos de apagado local como un archivo o mediante la entrega del contenido directo a Compute Engine.

Las secuencias de comandos de apagado pueden realizar tantas acciones como necesites, pero si pasas el archivo de manera local, la secuencia de comandos 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, almacena el archivo en Cloud Storage. Consulta Ejecuta secuencias de comandos de apagado de Google Cloud Storage para obtener más información.

Proporciona 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 de gcloud.

gcloud

Para pasar un archivo de secuencia de comandos de apagado local, proporciona la marca --metadata-from-file, seguida de un par de claves de metadatos, shutdown-script=PATH/TO/FILE, en el que PATH/TO/FILE es una ruta relativa a la secuencia de comandos de apagado. Por ejemplo:

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

Terraform

Para especificar una secuencia de comandos de apagado de forma directa, usa el recurso google_compute_instance con la ruta de acceso 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 {
    }
  }
}

Proporciona el contenido de la secuencia de comandos de apagado de manera directa

Una alternativa es pasar el contenido de la secuencia de comandos de apagado de manera directa.

Console

En la consola de Google Cloud, especifica una secuencia de comandos de apagado directamente con la clave de metadatos shutdown-script:

  1. Ir a la página Crear una instancia

    Ir a Crear una instancia

  2. Especifica los detalles de la VM.

  3. Expanda la sección Opciones avanzadas.

  4. Expande Administración y haz lo siguiente:

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

gcloud

Con Google Cloud CLI, usa la marca --metadata para proporcionar el contenido de la secuencia de comandos de apagado, seguida del par de claves shutdown-script=CONTENTS, en el queCONTENTS es el contenido de la 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"

Terraform

Para especificar una secuencia de comandos de apagado de forma directa, usa 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 {
    }
  }
}

REST

En la API, proporciona una secuencia de comandos de apagado como parte de la propiedad de metadatos en la solicitud cuando crees una instancia. Usa shutdown-script como la 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"
      }
    ]
  }...
}

Proporciona una secuencia de comandos de apagado en instancias de Windows

Ejecuta secuencias de comandos de apagado en instancias de Windows con las siguientes claves de metadatos específicas de Windows. Elige entre cualquiera de las claves especializadas que se enumeran a continuación. Cada clave debe coincidir con el tipo de secuencia de comandos que deseas ejecutar.

Puedes especificar múltiples secuencias de comandos de apagado si pasas diferentes claves a la instancia, pero cada clave solo se puede especificar una vez por máquina virtual.

Las siguientes claves se pueden usar con una secuencia de comandos de apagado local si sigues las mismas instrucciones anteriores.

Secuencias de comandos de apagado de cmd Secuencias de comandos de apagado de bat Secuencias de comandos de apagado de ps1
windows-shutdown-script-cmd windows-shutdown-script-bat windows-shutdown-script-ps1

Usa una secuencia de comandos de apagado de Cloud Storage

Puedes almacenar y usar una secuencia de comandos de apagado desde Cloud Storage. Sigue las instrucciones en la documentación de secuencias de comandos de inicio, pero reemplaza startup-script-url por shutdown-script-url.

Para las instancias de Windows, reemplaza windows-startup-script-url por windows-shutdown-script-url.

Aplica una secuencia de comandos de apagado en las instancias en ejecución

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

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

Visualiza el resultado de una secuencia de comandos de apagado

Linux

Para ver el resultado de una secuencia de comandos de apagado de Linux, puedes elegir una de las siguientes opciones:

Windows

Puedes ver el resultado de una secuencia de comandos de apagado de Windows Server mediante alguna de las siguientes opciones y buscando eventos GCEMetadataScripts: