Reducir el tiempo de apagado de las instancias de Compute Engine


En este documento se explica cómo reducir el tiempo de apagado de una instancia de Compute Engine configurándola para que omita el apagado del SO invitado al detenerla o eliminarla.

Si configuras una instancia para que omita el apagado del SO invitado al detenerse o eliminarse, Compute Engine apagará inmediatamente el SO invitado cuando el estado de la instancia cambie a STOPPING. Esta acción te ayuda a liberar cuota o recursos más rápido, ya que acelera la detención o la eliminación de una instancia. Para obtener más información sobre las fases por las que pasa una instancia durante la detención o la eliminación, incluido el intervalo predeterminado para el cierre limpio del SO invitado, consulta Operación de detención.

Antes de empezar

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

    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.

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

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

Roles obligatorios

Para obtener los permisos que necesitas para configurar una instancia de forma que omita el apagado del SO invitado, pide a tu administrador que te conceda el rol de gestión de identidades y accesos Administrador de instancias de Compute (v. 1) (roles/compute.instanceAdmin.v1) en tu proyecto. Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.

Este rol predefinido contiene los permisos necesarios para configurar una instancia de forma que omita el apagado del SO invitado. Para ver los permisos exactos que se necesitan, despliega la sección Permisos necesarios:

Permisos obligatorios

Para configurar una instancia de forma que omita el apagado del SO invitado, se necesitan los siguientes permisos:

  • Para crear una instancia, sigue estos pasos:
    • compute.instances.create en el proyecto
    • Para usar una imagen personalizada para crear la VM, haz clic en compute.images.useReadOnly en la imagen.
    • Para usar una captura para crear la VM, compute.snapshots.useReadOnly en la captura
    • Para usar una plantilla de instancia para crear la VM, haz clic en compute.instanceTemplates.useReadOnly en la plantilla de instancia.
    • Para asignar una red antigua a la VM, haz lo siguiente: compute.networks.use en el proyecto
    • Para especificar una dirección IP estática para la máquina virtual, compute.addresses.use en el proyecto
    • Para asignar una dirección IP externa a la VM cuando se usa una red antigua, haz lo siguiente: compute.networks.useExternalIp en el proyecto
    • Para especificar una subred para la VM, compute.subnetworks.use en el proyecto o en la subred elegida.
    • Para asignar una dirección IP externa a la VM cuando se usa una red de VPC, compute.subnetworks.useExternalIp en el proyecto o en la subred elegida.
    • Para definir los metadatos de la instancia de VM de la VM: compute.instances.setMetadata en el proyecto,
    • Para definir etiquetas en la máquina virtual, compute.instances.setTags en la máquina virtual
    • Para definir etiquetas de la VM, compute.instances.setLabels en la VM
    • Para definir una cuenta de servicio que use la VM, haz lo siguiente en la VM: compute.instances.setServiceAccount
    • Para crear un disco para la VM compute.disks.create del proyecto, sigue estos pasos:
    • Para adjuntar un disco en modo de solo lectura o de lectura y escritura, haz lo siguiente: compute.disks.use en el disco
    • Para adjuntar un disco en modo de solo lectura, compute.disks.useReadOnly en el disco.
  • Para crear una plantilla de instancia, sigue estos pasos: compute.instanceTemplates.create en el proyecto
  • Para actualizar una instancia, haz lo siguiente: compute.instances.update en la instancia

También puedes obtener estos permisos con roles personalizados u otros roles predefinidos.

Configurar instancias para omitir el apagado del SO invitado

Para configurar una instancia de cálculo de forma que se omita el apagado del SO invitado al detener o eliminar la instancia, utilice uno de los siguientes métodos:

Configurar el apagado del SO invitado en una instancia ya creada

Solo puedes configurar una instancia de proceso para que omita el apagado del SO invitado si la instancia está detenida (TERMINATED).

Para configurar una instancia de forma que omita el apagado del SO invitado, selecciona una de las siguientes opciones:

gcloud

  1. Si aún no lo has hecho, detén la instancia.

  2. Para configurar una instancia de forma que omita el apagado del SO invitado, usa el comando gcloud beta compute instances set-scheduling con la marca --skip-guest-os-shutdown:

    gcloud beta compute instances set-scheduling INSTANCE_NAME \
        --skip-guest-os-shutdown \
        --zone=ZONE
    

    Haz los cambios siguientes:

    • INSTANCE_NAME: el nombre de la instancia.

    • ZONE: la zona en la que se encuentra la instancia.

REST

  1. Si aún no lo has hecho, detén la instancia.

  2. Para configurar una instancia de forma que omita el apagado del SO invitado, haz una solicitud POST al método instances.setScheduling beta. En el cuerpo de la solicitud, incluye el campo skipGuestOsShutdown y asigna el valor true:

    POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME/setScheduling
    
    {
      "skipGuestOsShutdown": true
    }
    

Para obtener más información sobre cómo actualizar una instancia, consulta Actualizar las propiedades de una instancia.

Configurar el apagado del SO invitado al crear una instancia

Para crear una instancia de proceso que esté configurada para omitir el apagado del SO invitado, selecciona una de las siguientes opciones:

gcloud

Para crear una instancia configurada para omitir el apagado del SO invitado, usa el comando gcloud compute instances create con la marca --skip-guest-os-shutdown:

gcloud compute instances create INSTANCE_NAME \
    --machine-type=MACHINE_TYPE \
    --skip-guest-os-shutdown \
    --zone=ZONE

Haz los cambios siguientes:

  • INSTANCE_NAME: el nombre de la instancia.

  • MACHINE_TYPE: el tipo de máquina que se va a usar en la instancia.

  • ZONE: la zona en la que quieres crear la instancia.

REST

Para crear una instancia configurada para omitir el apagado del SO invitado, haz una solicitud POST al método instances.insert. En el cuerpo de la solicitud, incluye el campo skipGuestOsShutdown con el valor true:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances

{
  "name": "INSTANCE_NAME",
  "machineType": "zones/ZONE/machineTypes/MACHINE_TYPE",
  "disks": [
    {
      "boot": true,
      "initializeParams": {
        "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
      }
    }
  ],
  "networkInterfaces": [
    {
      "network": "global/networks/default"
    }
  ],
  "scheduling": {
    "skipGuestOsShutdown": true
  }
}

Haz los cambios siguientes:

  • PROJECT_ID: el ID del proyecto en el que quieres crear la instancia.

  • ZONE: la zona en la que quieres crear la instancia.

  • INSTANCE_NAME: el nombre de la instancia.

  • MACHINE_TYPE: el tipo de máquina que se va a usar en la instancia.

  • IMAGE_PROJECT: el proyecto de imagen que contiene la imagen (por ejemplo, debian-cloud). Para obtener más información sobre los proyectos de imágenes admitidos, consulta Imágenes públicas.

  • IMAGE: especifica una de las siguientes opciones:

    • Una versión específica de la imagen del SO, por ejemplo, debian-12-bookworm-v20240617.

    • Una familia de imágenes, que debes formatear como family/IMAGE_FAMILY. Este valor especifica la imagen del SO más reciente que no está obsoleta. Por ejemplo, si especificas family/debian-12, Compute Engine usará la versión más reciente de la familia de imágenes Debian 12. Para obtener más información sobre cómo usar familias de imágenes, consulta las prácticas recomendadas para familias de imágenes.

Para obtener más información sobre cómo crear una instancia, consulta el artículo Crear e iniciar una instancia de Compute Engine.

Configurar el apagado del SO invitado al crear instancias en bloque

Para crear instancias de computación en bloque que estén configuradas para omitir el apagado del SO invitado, selecciona una de las siguientes opciones:

gcloud

Para crear instancias en bloque que estén configuradas para omitir el apagado del SO invitado, usa el comando gcloud compute instances bulk create con la marca --skip-guest-os-shutdown.

Por ejemplo, para crear instancias en bloque que usen un patrón de nombre en una sola zona, ejecuta el siguiente comando:

gcloud compute instances bulk create \
    --count=COUNT \
    --machine-type=MACHINE_TYPE \
    --name-pattern="NAME_PATTERN" \
    --skip-guest-os-shutdown \
    --zone=ZONE

Haz los cambios siguientes:

  • COUNT: número de instancias que se van a crear.

  • MACHINE_TYPE: el tipo de máquina que se va a usar en las instancias.

  • NAME_PATTERN: el patrón de nombre de las instancias. Para sustituir una secuencia de números en un nombre de instancia, utiliza una secuencia de caracteres de almohadilla (#). Por ejemplo, si usas instance-# como patrón de nombre, Compute Engine genera instancias con nombres que empiezan por instance-1 y instance-2, y continúa con este patrón incremental hasta el número de instancias que especifiques en COUNT.

  • ZONE: la zona en la que quieres crear instancias.

REST

Para crear instancias en bloque que estén configuradas para omitir el apagado del SO invitado, haz una solicitud POST al método instances.bulkInsert. En el cuerpo de la solicitud, incluye el campo skipGuestOsShutdown con el valor true.

Por ejemplo, para crear instancias de forma masiva que usen un patrón de nombre en una sola zona, haz una solicitud POST de la siguiente manera:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/bulkInsert

{
  "count": COUNT,
  "namePattern": "NAME_PATTERN",
  "instanceProperties": {
    "machineType": "MACHINE_TYPE",
    "disks": [
      {
        "boot": true,
        "initializeParams": {
          "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
        }
      }
    ],
    "networkInterfaces": [
      {
        "network": "global/networks/default"
      }
    ],
    "scheduling": {
      "skipGuestOsShutdown": true
    }
  }
}

Haz los cambios siguientes:

  • PROJECT_ID: el ID del proyecto en el que quieres crear instancias en bloque.

  • ZONE: la zona en la que quieres crear instancias.

  • COUNT: número de instancias que se van a crear.

  • NAME_PATTERN: el patrón de nombre de las instancias. Para sustituir una secuencia de números en un nombre de instancia, utiliza una secuencia de caracteres de almohadilla (#). Por ejemplo, si usas instance-# como patrón de nombre, Compute Engine genera instancias con nombres que empiezan por instance-1 y instance-2, y continúa con este patrón incremental hasta el número de instancias que especifiques en COUNT.

  • MACHINE_TYPE: el tipo de máquina que se va a usar en las instancias.

  • IMAGE_PROJECT: el proyecto de imagen que contiene la imagen (por ejemplo, debian-cloud). Para obtener más información sobre los proyectos de imágenes admitidos, consulta Imágenes públicas.

  • IMAGE: especifica una de las siguientes opciones:

    • Una versión específica de la imagen del SO, por ejemplo, debian-12-bookworm-v20240617.

    • Una familia de imágenes, que debes formatear como family/IMAGE_FAMILY. Este valor especifica la imagen del SO más reciente que no está obsoleta. Por ejemplo, si especificas family/debian-12, Compute Engine usará la versión más reciente de la familia de imágenes Debian 12. Para obtener más información sobre cómo usar familias de imágenes, consulta las prácticas recomendadas para familias de imágenes.

Para obtener más información sobre cómo crear instancias en bloque, consulta el artículo Crear instancias en bloque.

Configurar el apagado del SO invitado al crear una plantilla de instancia

Después de crear una plantilla de instancia configurada para omitir el apagado del SO invitado cuando detengas o elimines instancias de Compute, puedes usar la plantilla de instancia para hacer lo siguiente:

Para crear una plantilla de instancia configurada para omitir el apagado del SO invitado, selecciona una de las siguientes opciones:

gcloud

Para crear una plantilla de instancia configurada para omitir el apagado del SO invitado, usa el comando gcloud compute instance-templates create con la marca --skip-guest-os-shutdown.

Por ejemplo, para crear una plantilla de instancia regional que especifique que se omita el apagado del SO invitado, ejecuta el siguiente comando. Si quieres crear una plantilla de instancia global, usa el mismo comando sin la marca --instance-template-region.

gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \
    --instance-template-region=REGION \
    --machine-type=MACHINE_TYPE \
    --skip-guest-os-shutdown

Haz los cambios siguientes:

  • INSTANCE_TEMPLATE_NAME: el nombre de la plantilla de instancia.

  • REGION: la región en la que quieres crear la plantilla de instancia.

  • MACHINE_TYPE: el tipo de máquina que se debe especificar en la plantilla de instancia.

REST

Para crear una plantilla de instancia configurada para omitir el apagado del SO invitado, haz una solicitud POST a uno de los siguientes métodos:

En el cuerpo de la solicitud, incluye el campo skipGuestOsShutdown con el valor true.

Por ejemplo, para crear una plantilla de instancia regional que especifique que se omita el apagado del SO invitado, haz una solicitud POST de la siguiente manera:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceTemplates

{
  "name": "INSTANCE_TEMPLATE_NAME",
  "properties": {
    "disks": [
      {
        "boot": true,
        "initializeParams": {
          "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
        }
      }
    ],
    "machineType": "MACHINE_TYPE",
    "networkInterfaces": [
      {
        "network": "global/networks/default"
      }
    ],
    "scheduling": {
      "skipGuestOsShutdown": true
    }
  }
}

Haz los cambios siguientes:

  • PROJECT_ID: el ID del proyecto en el que quieres crear la plantilla de instancia.

  • REGION: la región en la que quieres crear la plantilla de instancia.

  • INSTANCE_TEMPLATE_NAME: el nombre de la plantilla de instancia.

  • IMAGE_PROJECT: el proyecto de imagen que contiene la imagen (por ejemplo, debian-cloud). Para obtener más información sobre los proyectos de imágenes admitidos, consulta Imágenes públicas.

  • IMAGE: especifica una de las siguientes opciones:

    • Una versión específica de la imagen del SO, por ejemplo, debian-12-bookworm-v20240617.

    • Una familia de imágenes, que debe tener el formato family/IMAGE_FAMILY. Especifica la imagen del SO más reciente que no está obsoleta. Por ejemplo, si especificas family/debian-12, se usará la versión más reciente de la familia de imágenes de Debian 12. Para obtener más información sobre cómo usar familias de imágenes, consulte las prácticas recomendadas para familias de imágenes.

  • MACHINE_TYPE: el tipo de máquina que se debe especificar en la plantilla de instancia.

Para obtener más información sobre cómo crear una plantilla de instancia, consulta el artículo Crear plantillas de instancia.

Ver el ajuste de apagado del SO invitado

Puedes comprobar si Compute Engine omite el cierre del SO invitado cuando detienes o eliminas una instancia de computación.

Para ver el tiempo de apagado del SO invitado de una instancia, selecciona una de las siguientes opciones:

gcloud

Para ver los detalles de una instancia y si omite el apagado del SO invitado, usa el comando gcloud compute instances describe:

gcloud compute instances describe INSTANCE_NAME \
    --zone=ZONE

Haz los cambios siguientes:

  • INSTANCE_NAME: el nombre de la instancia.

  • ZONE: la zona en la que se encuentra la instancia.

Si has configurado la instancia para que omita el apagado del SO invitado, el resultado contendrá el campo skipGuestOsShutdown con el valor true, como en el siguiente ejemplo:

...
scheduling:
  automaticRestart: true
  skipGuestOsShutdown: true
  onHostMaintenance: MIGRATE
  preemptible: false
  provisioningModel: STANDARD
...

De lo contrario, si falta el campo skipGuestOsShutdown o se le asigna el valor false, el SO invitado usará el tiempo de apagado predeterminado.

REST

Para ver los detalles de una instancia y si omite el apagado del SO invitado, haz una solicitud GET al método instances.get:

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME

Haz los cambios siguientes:

  • PROJECT_ID: el ID del proyecto en el que se encuentra la instancia.

  • ZONE: la zona en la que se encuentra la instancia.

  • INSTANCE_NAME: el nombre de la instancia.

Si has configurado la instancia para que omita el apagado del SO invitado, el resultado contendrá el campo skipGuestOsShutdown con el valor true, como en el siguiente ejemplo:

{
  ...
  "scheduling": {
    "automaticRestart": true,
    "skipGuestOsShutdown": true,
    "onHostMaintenance": "MIGRATE",
    "preemptible": false,
    "provisioningModel": "STANDARD"
  },
  ...
}

De lo contrario, si falta el campo skipGuestOsShutdown o se le asigna el valor false, el SO invitado usará el tiempo de apagado predeterminado.

Siguientes pasos