Suspende y reanuda una instancia

En este documento, se describe cómo suspender y reanudar una instancia de máquina virtual (VM). Para obtener información sobre cómo iniciar y detener una instancia, consulta Inicia y detén una instancia. Para obtener más información sobre el ciclo de vida de las instancias, consulta la documentación del Ciclo de vida de la instancia.

Cuando suspendes una instancia, se envía una señal de suspensión S3 de ACPI al sistema operativo de la instancia. La suspensión de una instancia es similar al cierre de la tapa de tu laptop, que pone la instancia en un estado SUSPENDED. La suspensión de una instancia es ideal en los siguientes casos:

  • Entornos de prueba y desarrollo que no se usan por completo durante los períodos de inactividad, como las noches o los fines de semana, para reducir los costos o realizar una inicialización más rápida que la creación de instancias de VM nuevas.
  • Aplicaciones que requieren un largo período de inicialización después de que la instancia termina de iniciarse, pero antes de que la aplicación esté lista para realizar su primera solicitud, como estaciones de trabajo de desarrolladores virtuales o aplicaciones complejas de Java.

La suspensión de una instancia difiere de la detención de una instancia de las siguientes maneras:

  • Las instancias suspendidas conservan la memoria del SO de invitado y los estados del dispositivo y la aplicación.
  • Google cobra por las instancias suspendidas.
  • Solo puedes suspender una instancia durante un máximo de 60 días. Después de 60 días, la instancia cambia de forma automática al estado TERMINATED.

A excepción de los datos del SSD local, todos los recursos que están conectados a la instancia permanecerán conectados y se cobrarán, incluidos los discos persistentes y las direcciones IP externas estáticas o reservadas. Todos estos recursos se cobran según la hoja de precios, incluso si se suspende una instancia.

No puedes suspender una instancia mediante los procesos estándar integrados en el entorno invitado. Los comandos, como el comando systemctl suspend en Ubuntu 16.04 y versiones posteriores, no están disponibles. Solo puedes usar la herramienta de línea de comandos de gcloud o la API de Compute Engine para suspender una instancia.

Si no te importa restablecer la memoria de una instancia y el estado del dispositivo cuando reanudes la instancia más tarde, puedes detenerla, lo que no genera cargos adicionales de almacenamiento.

Antes de comenzar

Restricciones de la versión Beta

En la versión Beta, se aplican las siguientes restricciones para esta función:

  • No puedes suspender una instancia que usa una GPU.
  • Puedes suspender una instancia que tenga un SSD local conectado, pero el contenido de este debe descartarse con una marca especial para descartar datos del SSD local. Para obtener más información, consulta Suspende una instancia de VM.
  • No puedes suspender una instancia mediante los procesos estándar integrados en el entorno invitado. Los comandos, como el comando systemctl suspend en Ubuntu 16.04 y versiones posteriores, no están disponibles. Se ignora la señal del invitado.
  • Solo puedes suspender una instancia durante un máximo de 60 días antes de que se detenga la VM de forma automática.
  • No puedes suspender instancias con más de 120 GB de memoria.
  • Puedes suspender instancias interrumpibles, pero es posible que se finalicen antes de suspenderse de forma correcta.
  • Durante la versión Beta, Compute Engine podría descartar el estado de memoria preservado de una instancia suspendida. Si Compute Engine debe descartar el estado de memoria preservado, el estado de la instancia cambiará a TERMINATED y podrás reiniciarla con normalidad mediante el método instances.start.

Compatibilidad con los SO

La mayoría de los sistemas operativos que se ofrecen en Compute Engine son compatibles con la funcionalidad de suspensión y reanudación, pero algunos SO no lo son. Usa la siguiente tabla para determinar si un SO es compatible con la suspensión y la reanudación.

Familia de imágenes Versiones Estado Notas
SO compatible
Ubuntu 16, 18, 19 o una versión posterior Compatible Ninguna
Container‑Optimized OS 69, 73, 77, 81 o una versión posterior Compatible Ninguna
RHEL 7 Compatible Ninguna
CentOS 7 Compatible Ninguna
Windows 2012, 2016, 2019 o una versión posterior Compatible Ninguna
SUSE (SLES) 12, 15 o una versión posterior Compatible Ninguna
Debian 8, 9 Compatible, pero requiere cierta configuración Instrucciones para configurar Debian 8 y 9
SO no compatible
CentOS 6, 8 No compatible Ninguna
RHEL 6, 8 No compatible Ninguna
SQL Server en Windows Server Todas No compatible Ninguna
RHEL para SAP Todas No compatible Ninguna
Debian 10 No compatible Ninguna
CoreOS Todas No compatible Ninguna

Precios

Cuando suspendes una instancia, se te cobra por lo siguiente:

Suspende una instancia

Para suspender una instancia, usa Cloud Console, la herramienta de gcloud o la API Beta.

No puedes suspender una instancia mediante los procesos estándar integrados en el entorno invitado. Puedes usar Cloud Console, la herramienta de línea de comandos de gcloud o la API para suspender una instancia.

Console

  1. En Cloud Console, ve a la página Instancias de VM.

    Ir a la página Instancias de VM

  2. Selecciona una o más instancias que desees suspender.

  3. Haz clic en Suspender.

  4. Cuando se te solicite, si deseas descartar datos del SSD local, selecciona Discard the SSD content. Cuando se reanuda tu instancia, todos los datos del SSD local en la instancia se habrán descartado.

gcloud

Para suspender una instancia en la herramienta de línea de comandos de gcloud, haz lo siguiente:

 gcloud beta compute instances suspend INSTANCE_NAME

Una vez que hayas realizado una solicitud para suspender una instancia, puede transcurrir un tiempo hasta que se conserven todos los datos necesarios para la instancia en Compute Engine. Durante este tiempo, se te seguirá cobrando por la instancia mientras siga en ejecución.

Una instancia suspendida presenta la marca de estado SUSPENDED. Para verificar el estado de una instancia, realiza una solicitud describe:

gcloud compute instances describe INSTANCE_NAME

Para suspender una instancia con datos del SSD local, debes descartar esos datos mediante la marca --discard-local-ssd:

gcloud beta compute instances suspend INSTANCE_NAME --discard-local-ssd

API

En la API, realiza una solicitud mediante el método instances.suspend:

https://www.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME/suspend

Reemplaza los siguientes elementos:

  • PROJECT_ID: El ID del proyecto
  • ZONE: La zona de la VM
  • INSTANCE_NAME: La instancia que deseas suspender

Una vez que hayas realizado una solicitud para suspender una instancia, puede transcurrir un tiempo hasta que se conserven todos los datos necesarios para la instancia en Compute Engine. Durante este tiempo, se te cobra por la instancia mientras siga en ejecución.

En Compute Engine, se marca la instancia suspendida con el estado SUSPENDED. Para verificar el estado de una instancia, haz una solicitud GET como la siguiente:

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

El estado de la instancia se puede ver en el campo de estado. Por ejemplo:

...
"zone": "https://content.googleapis.com/compute/v1/projects/example-project/zones/us-central1-a",
"status": "SUSPENDED",
"name": "example-vm",
...

Para suspender una instancia con datos del SSD local, debes descartar esos datos mediante el parámetro de consulta opcional discardLocalSsd:

https://www.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME/suspend?discardLocalSsd=true

Reanuda una instancia suspendida

Para reanudar una instancia suspendida, usa Cloud Console, la herramienta de gcloud o la API Beta.

Console

  1. En Google Cloud Console, ve a la página Instancias de VM.

    Ir a la página Instancias de VM

  2. Selecciona una o más instancias que desees reanudar.

  3. Haz clic en Iniciar/Reanudar.

gcloud

Para reanudar una instancia en la herramienta de línea de comandos de gcloud, haz lo siguiente:

 gcloud beta compute instances resume INSTANCE_NAME

Una vez que hayas realizado una solicitud para reanudar una instancia, puede transcurrir un tiempo hasta que se restablezcan todos los datos necesarios para la instancia en Compute Engine. Durante este tiempo, se te cobra por la instancia mientras se reanuda.

Una instancia se reanuda cuando presenta la marca RUNNING. Para verificar el estado de una instancia, realiza la siguiente solicitud de descripción:

gcloud compute instances describe INSTANCE_NAME

API

Realiza una solicitud al método instances.resume.

https://www.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME/resume

Reemplaza los siguientes elementos:

  • PROJECT_ID: El ID del proyecto de esta solicitud
  • ZONE: La zona de la VM
  • INSTANCE_NAME: La instancia que se reanudará

Una vez que hayas realizado una solicitud para reanudar una instancia, puede transcurrir un tiempo hasta que se restablezcan todos los datos necesarios para la instancia en Compute Engine. Durante este tiempo, se te cobra por la instancia mientras se reanuda.

Una vez que la instancia se reanuda, en Compute Engine, se marca con el estado RUNNING. Para verificar el estado de una instancia, haz una solicitud GET como la siguiente:

GET https://compute.googleapis.com/compute/v1/projects/example-project/zones/us-central1-a/instances/example-instance

El estado de la instancia se puede ver en el campo de estado. Por ejemplo:

...
"zone": "https://content.googleapis.com/compute/v1/projects/example-project/zones/us-central1-a",
"status": "RUNNING",
"name": "example-instance",
...

Reanuda las instancias que tienen discos encriptados

Si la instancia que deseas reanudar usa claves de encriptación proporcionadas por el cliente, debes brindar esas claves cuando intentes reanudarla.

Reanuda la instancia mediante la herramienta de gcloud o la API.

gcloud

Proporciona la clave mediante la marca --csek-key-file y el nombre de la instancia que se debe iniciar. Si usas una clave unida con RSA, usa el componente gcloud beta:

gcloud beta compute instances resume INSTANCE_NAME \
  --csek-key-file ENCRYPTION_KEY_FILE

Reemplaza lo siguiente:

  • INSTANCE_NAME: El nombre de la instancia
  • ENCRYPTION_KEY: La ruta de acceso relativa al archivo que contiene la clave de encriptación que usaste para encriptar los discos persistentes conectados a la instancia

API

Crea una solicitud POST al método instances.resume para reanudar la instancia mediante una clave de encriptación.

POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME/resume
{
  "disk": [
    {
       "source": "DISK_NAME",
       "diskEncryptionKey": {
         "rsaEncryptedKey": "ENCRYPTION_KEY"
       }
    }
  ]
}

Reemplaza los siguientes elementos:

  • INSTANCE_NAME: El nombre de la instancia
  • PROJECT_ID: El ID del proyecto de esta solicitud
  • ZONE: La zona de esta instancia
  • DISK_NAME: El disco conectado que se encriptó con una clave de encriptación proporcionada por el cliente
  • ENCRYPTION_KEY: La clave de encriptación que usas para encriptar los discos persistentes conectados a la instancia

Cada disco encriptado debe estar detallado con la diskEncryptionKey coincidente, ya que Compute Engine no almacena estas claves en sus servidores mientras la instancia tiene un estado SUSPENDED.

Proceso de suspensión

Cuando realizas una solicitud de suspensión, envías una señal de suspensión de ACPI a la instancia de VM. Si la VM no responde a la señal de suspensión S3 de ACPI en un par de minutos, Compute Engine cancela el intento de suspensión y la VM vuelve al estado RUNNING.

En la siguiente tabla, se describe el efecto de suspender una instancia de VM en sus recursos asociados:

Recurso Compatibilidad
Memoria Solo se pueden suspender las VM menores o iguales a 120 GB de memoria.
SSD local Se descartan los datos de los SSD locales.
Disco persistente Se conservan los discos SSD y HDD persistentes.
Direcciones IP Las IP efímeras se liberan durante la suspensión, pero las IP estáticas permanecen conectadas a las instancias de VM. Si deseas conservar tu ID efímero, promuévelo.
Configuración de VM (como tipo de máquina, metadatos, etiquetas, etcétera) Todas las opciones de configuración de VM, excepto las direcciones IP efímeras, se conservan y restablecen cuando se reanuda la instancia.

SSD locales y VM interrumpibles

El contenido del SSD local no se conserva cuando se suspende una instancia. De forma predeterminada, si se suspende una instancia que tiene un SSD local, se muestra un error. Si deseas anular este comportamiento predeterminado, especifica una marca para descartar los datos del SSD local; esto permite suspender y reanudar la instancia, pero descarta el contenido del SSD local en el proceso. En esta situación, Compute Engine reanuda la instancia con la misma cantidad de volúmenes de SSD locales conectados, pero los volúmenes estarán vacíos y sin iniciarse.

Puedes suspender una VM interrumpible, pero si la interrupción (no la advertencia previa) sucede antes de que se complete la operación de suspensión, la suspensión finaliza y la instancia se interrumpe.

Configura una VM de Debian para que admita la suspensión y la reanudación

Las VM que ejecutan Debian 8 y 9 pueden suspenderse y reanudarse, pero deben configurarse con anticipación. Para configurar tu instancia de Debian, completa uno de los siguientes conjuntos de instrucciones, opción A o B. Recomendamos configurar el ACPID si es posible (opción A).

Opción A

Esta opción configura el ACPID para controlar el evento del botón de suspensión y agrega una secuencia de comandos de shell con el fin de controlar el evento de suspensión.

  1. Conéctate a tu instancia de VM mediante SSH:

    gcloud compute instances ssh INSTANCE_NAME
    
  2. En la instancia de VM, crea un directorio en la carpeta acpi:

    sudo mkdir -p /etc/acpi/events/
    
  3. Configura el ACPID para controlar el evento del botón de suspensión:

    cat <<EOF | sudo tee /etc/acpi/events/sleepbtn-acpi-support
    event=button[ /]sleep
    action=/etc/acpi/sleepbtn-acpi-support.sh
    EOF
    
  4. Crea la secuencia de comandos para controlar eventos de suspensión:

    cat <<EOF | sudo tee /etc/acpi/sleepbtn-acpi-support.sh
    #!/bin/sh
    echo mem > /sys/power/state
    EOF
    
  5. Configura los permisos para la secuencia de comandos:

    sudo chmod 755 /etc/acpi/sleepbtn-acpi-support.sh
    
  6. Reinicia ACPID:

    sudo systemctl restart acpid.service
    

Opción B

  1. Conéctate a tu instancia de VM mediante SSH:

    gcloud compute instances ssh INSTANCE_NAME
    
  2. En la instancia de VM, instala dbus:

    sudo apt-get install dbus
    
  3. Reinicia logind:

    sudo systemctl restart systemd-logind.service
    

Próximos pasos