Como suspender e retomar uma instância

Este documento descreve como suspender e retomar uma instância de máquina virtual (VM, na sigla em inglês). Para informações sobre como parar e iniciar uma instância, consulte Como parar e iniciar uma instância. Para informações sobre o ciclo de vida da instância, consulte a documentação do Ciclo de vida da instância.

Suspender uma instância envia um sinal ACPI S3 Suspend para o sistema operacional da instância. A suspensão de uma instância é análoga ao fechamento do laptop, colocando-a no estado SUSPENDED. Suspender uma instância é ideal para:

  • Ambientes de desenvolvimento e teste que não estão sendo totalmente utilizados durante períodos de inatividade, como durante noites ou fins de semana, para economizar custos ou inicialização mais rápida do que criar novas instâncias de VM
  • Aplicativos que exigem um longo período de inicialização depois que a instância inicializa, mas antes que o aplicativo esteja pronto para atender à primeira solicitação, como estações de trabalho de desenvolvedores virtuais ou aplicativos Java complexos

A suspensão de uma instância é diferente da interrupção de uma instância das seguintes maneiras:

  • As instâncias suspensas preservam a memória do SO convidado, o estado do dispositivo e o estado do aplicativo.
  • O Google cobra por instâncias suspensas.
  • Só é possível suspender uma instância por até 60 dias. Após 60 dias, a instância é movida automaticamente para o estado TERMINATED.

Com exceção dos dados SSD locais, todos os recursos anexados à instância permanecem conectados a ela e serão cobrados, incluindo discos permanentes e endereços IP externos estáticos ou reservados. Todos esses recursos são cobrados de acordo com a tabela de preços, mesmo que uma instância seja suspensa.

Não é possível suspender uma instância usando os processos padrão integrados ao ambiente convidado. Não há comandos disponíveis, como o systemctl suspend no Ubuntu 16.04 e versões posteriores. Só é possível usar a ferramenta de linha de comando gcloud ou a API do Compute Engine para suspender uma instância.

Se você não se importa em restaurar a memória de uma instância e o estado do dispositivo ao retomar a instância posteriormente, é possível interromper a instância, o que não gera cobranças extras de armazenamento.

Antes de começar

Restrições da versão Beta

Durante a versão Beta, as seguintes restrições se aplicam a esse recurso:

  • Não é possível suspender uma instância que usa uma GPU.
  • É possível suspender uma instância que tenha anexado SSD local, mas o conteúdo do SSD local precisa ser descartado por meio de uma sinalização especial para descartar dados de SSD local. Para mais informações, consulte Como suspender uma instância de VM.
  • Não é possível suspender uma instância usando os processos padrão integrados ao ambiente convidado. Não há comandos disponíveis, como o systemctl suspend no Ubuntu 16.04 e versões posteriores. O sinal de convidado é ignorado.
  • A instância só pode ser suspensa por até 60 dias antes que a VM seja interrompida automaticamente.
  • Não é possível suspender instâncias com mais de 120 GB de memória.
  • É possível suspender instâncias preemptivas, mas elas podem ser encerradas antes de serem suspensas.
  • Durante a versão Beta, o Compute Engine pode descartar o estado de memória preservada de uma instância suspensa. Se for necessário descartar o estado preservado da memória, a instância será movida pelo Compute Engine para o estado TERMINATED e poderá ser reinicializada normalmente com o método instances.start.

Compatibilidade do SO

A maioria dos sistemas operacionais oferecidos no Compute Engine é compatível com a funcionalidade de suspensão e retomada, mas alguns SOs não são compatíveis. Use a tabela a seguir para determinar se um SO é compatível com a suspensão e a retomada.

Família de imagens Versões Status Observações
SOs compatíveis
Ubuntu 16, 18, 19 ou posterior Compatível Nenhum
Container-Optimized OS 69, 73, 77, 81 ou posterior Compatível Nenhum
RHEL 7 Compatível Nenhum
CentOS 7 Compatível Nenhum
Windows 2012, 2016, 2019 ou posterior Compatível Nenhum
SUSE (SLES) 12, 15 ou posterior Compatível Nenhum
Debian 8 e 9 Compatível, mas requer configurações Instruções para configurar o Debian 8 e 9
SO não compatível
CentOS 6 e 8 Não compatível Nenhum
RHEL 6 e 8 Não compatível Nenhum
SQL Server no Windows Server Todos Não compatível Nenhum
RHEL para SAP Todos Não compatível Nenhum
Debian 10 Não compatível Nenhum
CoreOS Todos Não compatível Nenhum

Preços

Ao suspender uma instância, você é cobrado por:

Como suspender uma instância

Para suspender uma instância, use o Console do Cloud, a ferramenta gcloud ou a API Beta.

Não é possível suspender uma instância usando os processos padrão integrados ao ambiente convidado. É possível usar o Console do Cloud, a ferramenta de linha de comando gcloud ou a API para suspender uma instância.

Console

  1. No Console do Cloud, acesse a página Instâncias de VM.

    Acessar a página "Instâncias de VM"

  2. Selecione uma ou mais instâncias a serem suspensas.

  3. Clique em Suspender.

  4. Quando solicitado, se quiser descartar os dados do SSD local, selecione Descartar o conteúdo do SSD. Quando a instância for retomada, todos os dados de SSD locais da instância terão sido descartados.

gcloud

Para suspender uma instância na ferramenta de linha de comando gcloud:

 gcloud beta compute instances suspend INSTANCE_NAME

Depois que você faz uma solicitação para suspender uma instância, pode levar algum tempo para o Compute Engine preservar todos os dados necessários para a instância. Durante esse período, você continuará sendo cobrado pela instância enquanto ela continuar em execução.

Uma instância suspensa é marcada com o status SUSPENDED. Verifique o status de uma instância fazendo uma solicitação describe:

gcloud compute instances describe INSTANCE_NAME

Para suspender uma instância com dados da SSD local, é preciso descartar esses dados fornecendo a sinalização --discard-local-ssd:

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

API

Na API, faça uma solicitação usando o método instances.suspend:

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

Substitua o seguinte:

  • PROJECT_ID: o ID do projeto;
  • ZONE: a zona da VM;
  • INSTANCE_NAME: a instância que você quer suspender.

Depois que você faz uma solicitação para suspender uma instância, pode levar algum tempo para o Compute Engine preservar todos os dados necessários para a instância. Durante esse período, você será cobrado pela instância enquanto ela permanecer em execução.

O Compute Engine marca a instância suspensa com o status SUSPENDED. Verifique o status de uma instância fazendo uma solicitação GET:

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

O status da instância é visível no campo de status. Por exemplo:

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

Para suspender uma instância com dados da SSD local, é preciso descartar esses dados fornecendo o parâmetro de consulta discardLocalSsd opcional:

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

Retomada de uma instância suspensa

Para retomar uma instância suspensa, use o Console do Cloud, a ferramenta gcloud ou a API Beta.

Console

  1. No Console do Google Cloud, acesse a página Instâncias de VMs.

    Acessar a página "Instâncias de VM"

  2. Selecione uma ou mais instâncias para retomar.

  3. Clique em Iniciar / continuar.

gcloud

Para retomar uma instância na ferramenta de linha de comando gcloud:

 gcloud beta compute instances resume INSTANCE_NAME

Depois de fazer uma solicitação para retomar uma instância, pode levar algum tempo para o Compute Engine restaurar todos os dados necessários para ela. Durante esse período, você será cobrado pela instância enquanto ela estiver sendo retomada.

Uma instância é retomada quando está marcada como RUNNING. Verifique o status de uma instância fazendo uma solicitação de descrição:

gcloud compute instances describe INSTANCE_NAME

API

Faça uma solicitação ao método instances.resume:

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

Substitua o seguinte:

  • PROJECT_ID: o ID do projeto desta solicitação;
  • ZONE: a zona da VM;
  • INSTANCE_NAME: a instância a ser retomada.

Depois de fazer uma solicitação para retomar uma instância, pode levar algum tempo para o Compute Engine restaurar todos os dados necessários para ela. Durante esse período, você será cobrado pela instância enquanto ela estiver sendo retomada.

O Compute Engine marca a instância com o status RUNNING quando a retomada é concluída. Verifique o status de uma instância fazendo uma solicitação GET:

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

O status da instância é visível no campo de status. Exemplo:

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

Como retomar instâncias que têm discos criptografados

Se a instância a ser retomada usar chaves de criptografia fornecidas pelo cliente, forneça essas chaves ao tentar retomá-la.

Retome a instância por meio da ferramenta gcloud ou da API.

gcloud

Forneça a chave usando a sinalização --csek-key-file e o nome da instância a ser iniciada. Se você estiver usando uma chave incorporada por RSA, utilize o componente gcloud beta:

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

Substitua o seguinte:

  • INSTANCE_NAME: o nome da instância.
  • ENCRYPTION_KEY: o caminho relativo para o arquivo que contém a chave de criptografia usada para criptografar discos permanentes anexados à instância.

API

Crie uma solicitação POST para o método instances.resume a fim de retomar a instância usando uma chave de criptografia.

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

Substitua o seguinte:

  • INSTANCE_NAME: o nome da instância.
  • PROJECT_ID: o ID do projeto desta solicitação;
  • ZONE: a zona desta instância;
  • DISK_NAME: o disco anexado que é criptografado com uma chave de criptografia fornecida pelo cliente;
  • ENCRYPTION_KEY: a chave de criptografia que você usa para criptografar os discos permanentes que estão anexados à instância.

Cada disco criptografado precisa estar listado com o diskEncryptionKey correspondente, porque o Compute Engine não armazenará essas chaves nos servidores enquanto a instância estiver no estado SUSPENDED.

Processo de suspensão

Ao fazer uma solicitação de suspensão, você envia um sinal de suspensão ACPI para a instância da VM. Se a VM não responder ao sinal de suspensão ACPI S3 em alguns minutos, o Compute Engine cancelará a tentativa de suspensão e retornará a VM para um estado RUNNING.

A tabela a seguir descreve o efeito da suspensão de uma instância de VM nos recursos associados:

Recurso Suporte
Memória Somente VMs com 120 GB ou menos de memória podem ser suspensas.
SSD local Os dados do SSD local são descartados.
Disco permanente Os discos SSD e HDD permanentes são mantidos.
Endereços IP Os IPs temporários são liberados durante a suspensão, mas os IPs estáticos permanecem anexados às instâncias de VM. Se você quiser manter o ID temporário, promova-o.
Configuração de VM (como tipo de máquina, metadados, rótulos etc.) Todas as configurações de VM, exceto os endereços IP temporários, são preservadas e restauradas quando a instância é retomada.

SSDs locais e VMs preemptivas

O conteúdo da SSD local não é preservado quando uma instância é suspensa. Por padrão, a suspensão de uma instância que tem um SSD local retorna um erro. É possível modificar esse comportamento padrão especificando uma sinalização para descartar dados da SSD local, o que permite que a instância seja suspensa e retomada, mas descarta o conteúdo da SSD local no processo. Nesse cenário, o Compute Engine retoma a instância com o mesmo número de volumes SSD locais anexados, mas os volumes estarão vazios e não inicializados.

É possível suspender uma VM preemptiva, mas se a preempção (não o aviso antecipado que precede a preempção) ocorrer antes da conclusão da operação de suspensão, a suspensão será encerrada e a instância sofrerá preempção.

Como configurar uma VM do Debian para aceitar a suspensão e a retomada

As VMs que executam o Debian 8 e 9 podem suspender e retomar, mas precisam ser configuradas com antecedência. Para configurar sua instância do Debian, conclua um dos seguintes conjuntos de instruções, opção A ou B. Recomendamos que você configure o ACPID, se possível (opção A).

Opção A

Essa opção configura o ACPID para processar o evento do botão de suspensão e adiciona um script de shell para manipular o evento de suspensão.

  1. Conecte-se à instância de VM com ssh:

    gcloud compute instances ssh INSTANCE_NAME
    
  2. Na instância da VM, crie um diretório na pasta acpi:

    sudo mkdir -p /etc/acpi/events/
    
  3. Configure o ACPID para processar o evento do botão de suspensão:

    cat <<EOF | sudo tee /etc/acpi/events/sleepbtn-acpi-support
    event=button[ /]sleep
    action=/etc/acpi/sleepbtn-acpi-support.sh
    EOF
    
  4. Crie o script de manipulação de eventos de suspensão:

    cat <<EOF | sudo tee /etc/acpi/sleepbtn-acpi-support.sh
    #!/bin/sh
    echo mem > /sys/power/state
    EOF
    
  5. Configure as permissões do script:

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

    sudo systemctl restart acpid.service
    

Opção B

  1. Conecte-se à instância de VM com ssh:

    gcloud compute instances ssh INSTANCE_NAME
    
  2. Na instância da VM, instale dbus:

    sudo apt-get install dbus
    
  3. Restart logind:

    sudo systemctl restart systemd-logind.service
    

A seguir