Ejecutar secuencias de comandos de apagado


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 resulta útil si dependes de secuencias de comandos automatizadas para iniciar y apagar instancias, ya que permite que las instancias tengan tiempo para limpiar o realizar tareas, como exportar registros o sincronizarse con otros sistemas.

Los scripts de cierre son especialmente útiles para las VMs de un grupo de instancias gestionado 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 la VM se detenga y realiza las acciones que definas. La secuencia de comandos se ejecuta durante el periodo de apagado limitado antes de que se detenga la máquina virtual. Por ejemplo, tu secuencia de comandos de cierre puede copiar los datos procesados en Cloud Storage o crear una copia de seguridad de los registros.

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

Tanto en las tareas de apagado como en las de reinicio, las VMs siempre ejecutan las secuencias de comandos de apagado de la siguiente manera:

  • En las VMs Linux, con el usuario root.
  • En las VMs Windows, mediante la cuenta System.
.

Antes de empezar

  • Consulta información sobre los scripts de inicio.
  • Entender qué es el servidor de metadatos.
  • Si aún no lo has hecho, configura la autenticación. La autenticación verifica tu identidad para acceder a Google Cloud servicios y APIs. Para ejecutar código o ejemplos 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. Instala Google Cloud CLI. Después de la instalación, inicializa la CLI de Google Cloud ejecutando el siguiente comando:

      gcloud init

      Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

    2. Set a default region and zone.

    Terraform

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

      Instala Google Cloud CLI.

      Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

      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, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

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

    REST

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

      Instala Google Cloud CLI.

      Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

    Para obtener más información, consulta el artículo Autenticarse para usar REST de la documentación sobre autenticación de Google Cloud .

Permisos que se necesitan para completar 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

En las secciones siguientes se describen las especificaciones de las secuencias de comandos de apagado.

Limitaciones

Hay algunas limitaciones que debes tener en cuenta al usar secuencias de comandos de apagado:

  • Compute Engine ejecuta las secuencias de comandos de cierre solo de la mejor forma posible. En casos excepcionales, Compute Engine no puede garantizar que se complete la secuencia de comandos de apagado.
  • En Windows, se usa la directiva de grupo local para iniciar la secuencia de comandos de apagado.
    • El paquete de instalación configura el ajuste de la política de grupo local Computer Configuration/Windows Setting/Scripts (Startup/Shutdown) para iniciar la secuencia de comandos al apagar el sistema.

Invocación de la secuencia de comandos de apagado

Las secuencias de comandos de apagado se activan cuando la instancia se apaga después de que se produzca alguno 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 Spot VM o una instancia interrumpible como parte del proceso de interrupción.

Un script de cierre puede ser de cualquier tipo de archivo. Si hay una secuencia de comandos de apagado en la instancia, Compute Engine hace lo siguiente:

  1. Copia la secuencia de comandos en un archivo local de la instancia.
  2. Define los permisos del archivo para que la secuencia de comandos se pueda ejecutar.
  3. Ejecuta el archivo cuando se cierra la instancia.

Por ejemplo, puedes proporcionar una secuencia de comandos de Python en lugar de una secuencia de comandos de Bash. Ten en cuenta que Compute Engine ejecuta la secuencia de comandos textualmente, independientemente del tipo de secuencia de comandos.

Para ejecutar una secuencia de comandos que no sea bash, añade una línea shebang en la parte superior del archivo para indicar al sistema operativo qué intérprete debe usar. Por ejemplo, en un script de Python, puedes añadir una línea shebang como esta:

#!/usr/bin/python

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

Las secuencias de comandos de apagado empiezan a ejecutarse cuando Compute Engine asigna el estado STOPPING a la instancia. Las secuencias de comandos deben completarse antes de que la instancia se detenga por completo, es decir, cuando su estado cambie a TERMINATED. El tiempo que tarda la instancia en alcanzar el estado TERMINATED varía en función del tipo de instancia.

Si tus secuencias de comandos tardan más en ejecutarse que el tiempo que tarda la instancia en detenerse, Compute Engine detendrá las secuencias de comandos de forma forzosa, lo que puede provocar la pérdida de datos o que las tareas no se completen. Para evitarlo, detén la instancia desde su SO invitado. Con este método, el estado de la instancia se mantiene en STOPPING hasta que se completen los scripts de apagado.

Usar una secuencia de comandos de apagado local

Un script de cierre local es un script que se encuentra en tu ordenador local. Transfiere una secuencia de comandos de apagado local como archivo o proporcionando el contenido directamente a Compute Engine.

Las secuencias de comandos de cierre pueden realizar tantas acciones como necesites, pero si pasas el archivo de forma local, tu secuencia de comandos no puede superar el límite de longitud del valor de metadatos de 256 KB. Para usar una secuencia de comandos que supere el límite de longitud, guarda el archivo en Cloud Storage. Consulta Usar un script de cierre de Cloud Storage para obtener más información.

Proporcionar un archivo de secuencia de comandos de apagado

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

gcloud

Para introducir un archivo de secuencia de comandos de cierre local, proporcione la marca --metadata-from-file seguida de un par clave-valor de metadatos, shutdown-script=PATH/TO/FILE, donde PATH/TO/FILE es una ruta relativa a la secuencia de comandos de cierre. 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 directamente, usa 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 directamente el contenido de la secuencia de comandos de apagado

También puedes introducir el contenido de tu secuencia de comandos de apagado directamente.

Consola

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

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

    Ir a Crear una instancia

  2. Especifica los detalles de la VM.

  3. Expande la sección Opciones avanzadas.

  4. Despliega Gestión y haz lo siguiente:

    1. En la sección Metadatos, haz clic en Añadir elemento.
    2. En el campo Clave, introduce shutdown-script para la clave de metadatos.
    3. En el campo Value (Valor), añade el contenido de la secuencia de comandos de apagado.
  5. Continúa con el proceso de creación de la VM.

gcloud

Con la CLI de Google Cloud, usa la marca --metadata para proporcionar el contenido de tu secuencia de comandos de apagado, seguido del par de claves shutdown-script=CONTENTS, donde CONTENTS es el contenido de tu 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 directamente, 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, proporcione una secuencia de comandos de apagado como parte de la propiedad de metadatos en su solicitud al crear una instancia. Usa 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 una secuencia de comandos de apagado en instancias de Windows

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

Puedes especificar varias secuencias de comandos de apagado pasando diferentes claves a tu 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 cierre local siguiendo las mismas instrucciones que se indican más arriba.

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

Usar 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 de la documentación sobre scripts de inicio, pero sustituye startup-script-url por shutdown-script-url.

En las instancias de Windows, sustituye windows-startup-script-url por windows-shutdown-script-url.

Aplicar una secuencia de comandos de apagado a instancias en ejecución

Para añadir una secuencia de comandos de apagado a una instancia en ejecución, sigue las instrucciones de la sección Aplicar una secuencia de comandos de inicio a instancias en ejecución, pero sustituye las claves de metadatos por una de las 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 mediante 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 cierre con esta clave.

Ver la salida de una secuencia de comandos de apagado

Linux

Para ver la salida de una secuencia de comandos de apagado de Linux, puedes hacer lo siguiente:

Windows

Para ver la salida de una secuencia de comandos de apagado de Windows Server, siga uno de estos pasos y compruebe si hay eventos GCEMetadataScripts:

  • Puerto serie 1 en la Google Cloud consola. Para obtener más información, consulta Ver salidas de puertos serie.

  • Registro de aplicación del Visor de eventos de Windows.

  • IAP Desktop desde una estación de trabajo Windows. Para obtener más información, consulta el repositorio GoogleCloudPlatform/iap-desktop en GitHub.