Cómo 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 cuando se detiene o borra.

Si configuras una instancia para que omita el cierre del SO invitado cuando se detiene o borra, Compute Engine cierra de inmediato el SO invitado cuando el estado de la instancia cambia a STOPPING. Esta acción te ayuda a liberar cuota o recursos más rápido, ya que acelera la detención o 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 el borrado, incluido el intervalo predeterminado para el cierre limpio del SO invitado, consulta Operación de detención.

Antes de comenzar

  • Si aún no lo hiciste, configura la autenticación. La autenticación verifica tu identidad para acceder a los servicios y las APIs de Google Cloud . 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:

    gcloud

    1. Instala Google Cloud CLI. Después de la instalación, inicializa Google Cloud CLI ejecutando el siguiente comando:

      gcloud init

      Si usas un proveedor de identidad externo (IdP), primero debes acceder a gcloud CLI con tu identidad federada.

    2. Set a default region and zone.

    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 proporciones a gcloud CLI.

      Instala Google Cloud CLI. Después de la instalación, inicializa Google Cloud CLI ejecutando el siguiente comando:

      gcloud init

      Si usas un proveedor de identidad externo (IdP), primero debes acceder a gcloud CLI con tu identidad federada.

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

Roles requeridos

Para obtener los permisos que necesitas para configurar una instancia de modo que omita el cierre del SO invitado, pídele a tu administrador que te otorgue el rol de IAM Administrador de instancias de Compute (v1) (roles/compute.instanceAdmin.v1) en tu proyecto. Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.

Este rol predefinido contiene los permisos necesarios para configurar una instancia de modo que omita el cierre del SO invitado. Para ver los permisos exactos que son necesarios, expande la sección Permisos requeridos:

Permisos necesarios

Se requieren los siguientes permisos para configurar una instancia de modo que omita el cierre del SO invitado:

  • Para crear una instancia, haz lo siguiente:
    • compute.instances.create en el proyecto
    • Para usar una imagen personalizada con el fin de crear la VM, sigue estos pasos: compute.images.useReadOnly en la imagen
    • Si deseas usar una instantánea para crear la VM, sigue estos pasos: compute.snapshots.useReadOnly en la instantánea
    • Para usar una plantilla de instancias a fin de crear la VM, haz lo siguiente: compute.instanceTemplates.useReadOnly en la plantilla de instancias
    • Para asignar una red heredada a la VM: compute.networks.use en el proyecto
    • Si deseas especificar una dirección IP estática para la VM; compute.addresses.use en el proyecto
    • Para asignar una dirección IP externa a la VM cuando se usa una red y punto heredado; compute.networks.useExternalIp en el proyecto
    • A fin de 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
    • A fin de configurar los metadatos de la instancia de VM para la VM y los puntos, sigue estos pasos: compute.instances.setMetadata en el proyecto
    • A fin de configurar etiquetas para la VM y los puntos; compute.instances.setTags en la VM
    • Si deseas configurar etiquetas para la VM, haz lo siguiente: compute.instances.setLabels en la VM
    • A fin de configurar una cuenta de servicio para que la VM la usecompute.instances.setServiceAccount en la VM
    • Si deseas crear un disco nuevo para la VM: compute.disks.create en el proyecto
    • Para conectar un disco existente en modo de solo lectura o de lectura y escritura, haz lo siguiente: compute.disks.use en el disco
    • Para conectar un disco existente en modo de solo lectura y dos puntos, sigue estos pasos: compute.disks.useReadOnly en el disco
  • Para crear una plantilla de instancias: compute.instanceTemplates.create en el proyecto
  • Para actualizar una instancia, haz compute.instances.update en ella.

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

Configura instancias para omitir el cierre del SO invitado

Para configurar una instancia de procesamiento de modo que omita el cierre del SO invitado cuando detengas o borres la instancia, usa uno de los siguientes métodos:

Configura el cierre del SO invitado en una instancia existente

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

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

gcloud

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

  2. Para configurar una instancia de modo que omita el cierre 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
    

    Reemplaza lo siguiente:

    • INSTANCE_NAME: El nombre de la instancia.

    • ZONE: Es la zona en la que existe la instancia.

REST

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

  2. Para configurar una instancia de modo que omita el cierre del SO invitado, realiza una solicitud POST al método instances.setScheduling en versión beta. En el cuerpo de la solicitud, incluye el campo skipGuestOsShutdown y configúralo como 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 Actualiza las propiedades de las instancias.

Configura el cierre del SO invitado mientras creas una instancia

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

gcloud

Para crear una instancia configurada para omitir el cierre 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

Reemplaza lo siguiente:

  • INSTANCE_NAME: El nombre de la instancia.

  • MACHINE_TYPE: Es el tipo de máquina que se usará para la instancia.

  • ZONE: Es la zona en la que deseas crear la instancia.

REST

Para crear una instancia configurada para omitir el cierre del SO invitado, realiza una solicitud POST al método instances.insert. En el cuerpo de la solicitud, incluye el campo skipGuestOsShutdown configurado como 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
  }
}

Reemplaza lo siguiente:

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

  • ZONE: Es la zona en la que deseas crear la instancia.

  • INSTANCE_NAME: El nombre de la instancia.

  • MACHINE_TYPE: Es el tipo de máquina que se usará para 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 compatibles, consulta Imágenes públicas.

  • IMAGE: especifica una de las siguientes opciones:

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

    • Una familia de imágenes, que debes formatear como family/IMAGE_FAMILY. Este valor especifica la imagen de SO no obsoleta más reciente. Por ejemplo, si especificas family/debian-12, Compute Engine usa 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 las familias de imágenes, consulta Prácticas recomendadas para las familias de imágenes.

Para obtener más información sobre cómo crear una instancia, consulta Crea y, luego, inicia una instancia de Compute Engine.

Configura el cierre del SO invitado mientras creas instancias de forma masiva

Para crear instancias de procesamiento de forma masiva que estén configuradas para omitir el cierre del SO invitado, selecciona una de las siguientes opciones:

gcloud

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

Por ejemplo, para crear instancias de forma masiva 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

Reemplaza lo siguiente:

  • COUNT: Es la cantidad de instancias que se crearán.

  • MACHINE_TYPE: Es el tipo de máquina que se usará para las instancias.

  • NAME_PATTERN: Es el patrón del nombre de las instancias. Para reemplazar una secuencia de números en el nombre de una instancia, usa una secuencia de caracteres hash (#). Por ejemplo, si usas instance-# como patrón de nombre, Compute Engine genera instancias con nombres que comienzan con instance-1, instance-2 y continúa con este patrón incremental hasta la cantidad de instancias que especifiques en COUNT.

  • ZONE: Es la zona en la que deseas crear instancias.

REST

Para crear instancias de forma masiva que estén configuradas para omitir el cierre del SO invitado, realiza una solicitud POST al método instances.bulkInsert. En el cuerpo de la solicitud, incluye el campo skipGuestOsShutdown configurado como true.

Por ejemplo, para crear instancias de forma masiva que usen un patrón de nombre en una sola zona, realiza 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
    }
  }
}

Reemplaza lo siguiente:

  • PROJECT_ID: Es el ID del proyecto en el que deseas crear instancias de forma masiva.

  • ZONE: Es la zona en la que deseas crear instancias.

  • COUNT: Es la cantidad de instancias que se crearán.

  • NAME_PATTERN: Es el patrón del nombre de las instancias. Para reemplazar una secuencia de números en el nombre de una instancia, usa una secuencia de caracteres hash (#). Por ejemplo, si usas instance-# como patrón de nombre, Compute Engine genera instancias con nombres que comienzan con instance-1, instance-2 y continúa con este patrón incremental hasta la cantidad de instancias que especifiques en COUNT.

  • MACHINE_TYPE: Es el tipo de máquina que se usará para 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 compatibles, consulta Imágenes públicas.

  • IMAGE: especifica una de las siguientes opciones:

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

    • Una familia de imágenes, que debes formatear como family/IMAGE_FAMILY. Este valor especifica la imagen de SO no obsoleta más reciente. Por ejemplo, si especificas family/debian-12, Compute Engine usa 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 las familias de imágenes, consulta Prácticas recomendadas para las familias de imágenes.

Para obtener más información sobre cómo crear instancias de forma masiva, consulta Crea instancias de forma masiva.

Configura el cierre del SO invitado mientras creas una plantilla de instancias

Después de crear una plantilla de instancias configurada para omitir el cierre del SO invitado cuando detienes o borras instancias de procesamiento, puedes usar la plantilla de instancias para hacer lo siguiente:

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

gcloud

Para crear una plantilla de instancias configurada para omitir el cierre 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 instancias regional que especifique que se omita el cierre del SO invitado, ejecuta el siguiente comando. Si deseas crear una plantilla de instancias 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

Reemplaza lo siguiente:

  • INSTANCE_TEMPLATE_NAME: el nombre de la plantilla de instancias.

  • REGION: Es la región en la que deseas crear la plantilla de instancias.

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

REST

Para crear una plantilla de instancias configurada para omitir el cierre del SO invitado, realiza una solicitud POST a uno de los siguientes métodos:

En el cuerpo de la solicitud, incluye el campo skipGuestOsShutdown configurado como true.

Por ejemplo, para crear una plantilla de instancias regional que especifique que se omita el cierre del SO invitado, realiza 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
    }
  }
}

Reemplaza lo siguiente:

  • PROJECT_ID: Es el ID del proyecto en el que deseas crear la plantilla de instancias.

  • REGION: Es la región en la que deseas crear la plantilla de instancias.

  • INSTANCE_TEMPLATE_NAME: el nombre de la plantilla de 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 compatibles, consulta Imágenes públicas.

  • IMAGE: especifica una de las siguientes opciones:

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

    • Una familia de imágenes, que debe tener el formato family/IMAGE_FAMILY. Esto especifica la imagen de SO no obsoleta más reciente. Por ejemplo, si especificas family/debian-12, se usa la versión más reciente de la familia de imágenes de Debian 12. Para obtener más información sobre el uso de las familias de imágenes, consulta Prácticas recomendadas para las familias de imágenes.

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

Para obtener más información sobre cómo crear una plantilla de instancias, consulta Crea plantillas de instancias.

Cómo ver la configuración de apagado del SO invitado

Puedes verificar si Compute Engine omite el cierre del SO invitado cuando detienes o borras una instancia de procesamiento.

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

gcloud

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

gcloud compute instances describe INSTANCE_NAME \
    --zone=ZONE

Reemplaza lo siguiente:

  • INSTANCE_NAME: El nombre de la instancia.

  • ZONE: Es la zona en la que existe la instancia.

Si configuraste la instancia para que omita el cierre del SO invitado, el resultado contendrá el campo skipGuestOsShutdown establecido en 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 establece en false, el SO invitado usa el tiempo de apagado predeterminado.

REST

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

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

Reemplaza lo siguiente:

  • PROJECT_ID: Es el ID del proyecto en el que existe la instancia.

  • ZONE: Es la zona en la que existe la instancia.

  • INSTANCE_NAME: El nombre de la instancia.

Si configuraste la instancia para que omita el cierre del SO invitado, el resultado contendrá el campo skipGuestOsShutdown establecido en 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 establece en false, el SO invitado usa el tiempo de apagado predeterminado.

¿Qué sigue?