Diminuir o tempo de encerramento das instâncias do Compute Engine


Neste documento, explicamos como diminuir o tempo de encerramento de uma instância do Compute Engine configurando-a para ignorar o encerramento do SO convidado ao parar ou excluir.

Se você configurar uma instância para ignorar o encerramento do SO convidado ao parar ou excluir, o Compute Engine vai encerrar imediatamente o SO convidado quando o estado da instância mudar para STOPPING. Essa ação ajuda a liberar cota ou recursos mais rapidamente, acelerando a interrupção ou exclusão de uma instância. Para saber mais sobre as fases que uma instância passa durante a interrupção ou exclusão, incluindo o intervalo padrão para o encerramento limpo do SO convidado, consulte Operação de interrupção.

Antes de começar

  • Configure a autenticação, caso ainda não tenha feito isso. A autenticação verifica sua identidade para acesso a serviços e APIs do Google Cloud . Para executar códigos ou amostras de um ambiente de desenvolvimento local, autentique-se no Compute Engine selecionando uma das seguintes opções:

    Select the tab for how you plan to use the samples on this page:

    gcloud

    1. Instale a CLI do Google Cloud. Após a instalação, inicialize a CLI do Google Cloud executando o seguinte comando:

      gcloud init

      Ao usar um provedor de identidade (IdP) externo, primeiro faça login na gcloud CLI com sua identidade federada.

    2. Set a default region and zone.

    REST

    Para usar as amostras da API REST nesta página em um ambiente de desenvolvimento local, use as credenciais fornecidas para gcloud CLI.

      Instale a CLI do Google Cloud. Após a instalação, inicialize a CLI do Google Cloud executando o seguinte comando:

      gcloud init

      Ao usar um provedor de identidade (IdP) externo, primeiro faça login na gcloud CLI com sua identidade federada.

    Para mais informações, consulte Autenticar para usar REST na documentação de autenticação do Google Cloud .

Funções exigidas

Para ter as permissões necessárias para configurar uma instância e ignorar o encerramento do SO convidado, peça ao administrador para conceder a você o papel do IAM de Administrador da instância da computação (v1) (roles/compute.instanceAdmin.v1) no projeto. Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.

Esse papel predefinido contém as permissões necessárias para configurar uma instância e ignorar o desligamento do SO convidado. Para conferir as permissões exatas necessárias, expanda a seção Permissões necessárias:

Permissões necessárias

As seguintes permissões são necessárias para configurar uma instância para ignorar o desligamento do SO convidado:

  • Para criar uma instância:
    • compute.instances.create no projeto
    • Para usar uma imagem personalizada para criar a VM: compute.images.useReadOnly na imagem
    • Usar um snapshot para criar a VM: compute.snapshots.useReadOnly no snapshot
    • Usar um modelo de instância para criar a VM: compute.instanceTemplates.useReadOnly no modelo de instância
    • Atribuir uma rede legada à VM: compute.networks.use no projeto
    • Especificar um endereço IP estático para a VM: compute.addresses.use no projeto
    • Atribuir um endereço IP externo à VM ao usar uma rede legada: compute.networks.useExternalIp no projeto
    • Especificar uma sub-rede para a VM: compute.subnetworks.use no projeto ou na sub-rede escolhida
    • Atribuir um endereço IP externo à VM ao usar uma rede VPC: compute.subnetworks.useExternalIp no projeto ou na sub-rede escolhida
    • Definir os metadados da instância de VM para a VM: compute.instances.setMetadata no projeto
    • Definir tags para a VM: compute.instances.setTags na VM
    • Definir rótulos para a VM: compute.instances.setLabels na VM
    • Definir uma conta de serviço para a VM usar: compute.instances.setServiceAccount na VM
    • Criar um disco para a VM: compute.disks.create no projeto
    • Anexar um disco atual no modo somente leitura ou de leitura e gravação: compute.disks.use no disco
    • Anexar um disco atual no modo somente leitura: compute.disks.useReadOnly no disco
  • Para criar um modelo de instância: compute.instanceTemplates.create no projeto
  • Para atualizar uma instância: compute.instances.update na instância

Essas permissões também podem ser concedidas com funções personalizadas ou outros papéis predefinidos.

Configurar instâncias para ignorar o encerramento do SO convidado

Para configurar uma instância de computação para ignorar o desligamento do SO convidado ao parar ou excluir a instância, use um dos seguintes métodos:

Configurar o desligamento do SO convidado em uma instância atual

Só é possível configurar uma instância de computação para ignorar o encerramento do SO convidado se a instância estiver interrompida (TERMINATED).

Para configurar uma instância para ignorar o desligamento do SO convidado, selecione uma das seguintes opções:

gcloud

  1. Se ainda não tiver feito isso, pare a instância.

  2. Para configurar uma instância para ignorar o desligamento do SO convidado, use o comando gcloud beta compute instances set-scheduling com a flag --skip-guest-os-shutdown:

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

    Substitua:

    • INSTANCE_NAME: o nome da instância.

    • ZONE: a zona em que a instância existe.

REST

  1. Se ainda não tiver feito isso, pare a instância.

  2. Para configurar uma instância para ignorar o desligamento do SO convidado, faça uma solicitação POST para o método instances.setScheduling da versão Beta. No corpo da solicitação, inclua o campo skipGuestOsShutdown e defina-o como true:

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

Para mais informações sobre como atualizar uma instância, consulte Atualizar propriedades da instância.

Configurar o encerramento do SO convidado ao criar uma instância

Para criar uma instância de computação configurada para ignorar o desligamento do SO convidado, selecione uma das seguintes opções:

gcloud

Para criar uma instância configurada para ignorar o desligamento do SO convidado, use o comando gcloud compute instances create com a flag --skip-guest-os-shutdown:

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

Substitua:

  • INSTANCE_NAME: o nome da instância.

  • MACHINE_TYPE: o tipo de máquina a ser usado para a instância.

  • ZONE: a zona em que você quer criar a instância.

REST

Para criar uma instância configurada para ignorar o desligamento do SO convidado, faça uma solicitação POST para o método instances.insert. No corpo da solicitação, inclua o campo skipGuestOsShutdown definido 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
  }
}

Substitua:

  • PROJECT_ID: o ID do projeto em que você quer criar a instância.

  • ZONE: a zona em que você quer criar a instância.

  • INSTANCE_NAME: o nome da instância.

  • MACHINE_TYPE: o tipo de máquina a ser usado para a instância.

  • IMAGE_PROJECT: o projeto de imagem que contém a imagem, por exemplo, debian-cloud. Para mais informações sobre os projetos de imagem com suporte, consulte Imagens públicas.

  • IMAGE: especifique uma destas opções:

    • Uma versão específica da imagem do SO. Por exemplo: debian-12-bookworm-v20240617

    • Uma família de imagens, que precisa ser formatada como family/IMAGE_FAMILY. Esse valor especifica a imagem do SO mais recente e não descontinuada. Por exemplo, se você especificar family/debian-12, o Compute Engine usará a versão mais recente na família de imagens do Debian 12. Para mais informações sobre como usar famílias de imagens, consulte Práticas recomendadas para famílias de imagens.

Para mais informações sobre como criar uma instância, consulte Criar e iniciar uma instância do Compute Engine.

Configurar o desligamento do SO convidado ao criar instâncias em massa

Para criar instâncias de computação em massa configuradas para ignorar o desligamento do SO convidado, selecione uma das seguintes opções:

gcloud

Para criar instâncias em massa configuradas para ignorar o desligamento do SO convidado, use o comando gcloud compute instances bulk create com a flag --skip-guest-os-shutdown.

Por exemplo, para criar instâncias em massa que usam um padrão de nome em uma única zona, execute o seguinte comando:

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

Substitua:

  • COUNT: o número de instâncias a serem criadas.

  • MACHINE_TYPE: o tipo de máquina a ser usado para as instâncias.

  • NAME_PATTERN: o padrão de nome para as instâncias. Para substituir uma sequência de números no nome de uma instância, use uma sequência de caracteres hash (#). Por exemplo, se você usar instance-# como um padrão de nome, o Compute Engine vai gerar instâncias com nomes que começam com instance-1, instance-2 e continuam esse padrão incremental até o número de instâncias que você especificar em COUNT.

  • ZONE: a zona em que você quer criar instâncias.

REST

Para criar instâncias em massa configuradas para ignorar o desligamento do SO convidado, faça uma solicitação POST para o método instances.bulkInsert. No corpo da solicitação, inclua o campo skipGuestOsShutdown definido como true.

Por exemplo, para criar instâncias em massa que usam um padrão de nome em uma única zona, faça uma solicitação POST da seguinte maneira:

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

Substitua:

  • PROJECT_ID: o ID do projeto em que você quer criar instâncias em massa.

  • ZONE: a zona em que você quer criar instâncias.

  • COUNT: o número de instâncias a serem criadas.

  • NAME_PATTERN: o padrão de nome para as instâncias. Para substituir uma sequência de números no nome de uma instância, use uma sequência de caracteres hash (#). Por exemplo, se você usar instance-# como um padrão de nome, o Compute Engine vai gerar instâncias com nomes que começam com instance-1, instance-2 e continuam esse padrão incremental até o número de instâncias que você especificar em COUNT.

  • MACHINE_TYPE: o tipo de máquina a ser usado para as instâncias.

  • IMAGE_PROJECT: o projeto de imagem que contém a imagem, por exemplo, debian-cloud. Para mais informações sobre os projetos de imagem com suporte, consulte Imagens públicas.

  • IMAGE: especifique uma destas opções:

    • Uma versão específica da imagem do SO. Por exemplo: debian-12-bookworm-v20240617

    • Uma família de imagens, que precisa ser formatada como family/IMAGE_FAMILY. Esse valor especifica a imagem do SO mais recente e não descontinuada. Por exemplo, se você especificar family/debian-12, o Compute Engine usará a versão mais recente na família de imagens do Debian 12. Para mais informações sobre como usar famílias de imagens, consulte Práticas recomendadas para famílias de imagens.

Para mais informações sobre como criar instâncias em massa, consulte Criar instâncias em massa.

Configurar o desligamento do SO convidado ao criar um modelo de instância

Depois de criar um modelo de instância configurado para ignorar o encerramento do SO convidado ao parar ou excluir instâncias de computação, use o modelo para fazer o seguinte:

Para criar um modelo de instância configurado para ignorar o encerramento do SO convidado, selecione uma das seguintes opções:

gcloud

Para criar um modelo de instância configurado para ignorar o desligamento do SO convidado, use o comando gcloud compute instance-templates create com a flag --skip-guest-os-shutdown.

Por exemplo, para criar um modelo de instância regional que especifique a ação de ignorar o desligamento do SO convidado, execute o seguinte comando. Se quiser criar um modelo de instância global, use o mesmo comando sem a flag --instance-template-region.

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

Substitua:

  • INSTANCE_TEMPLATE_NAME: o nome do modelo de instância.

  • REGION: a região em que você quer criar o modelo de instância.

  • MACHINE_TYPE: o tipo de máquina a ser especificado no modelo de instância.

REST

Para criar um modelo de instância configurado para ignorar o desligamento do SO convidado, faça uma solicitação POST para um dos seguintes métodos:

No corpo da solicitação, inclua o campo skipGuestOsShutdown definido como true.

Por exemplo, para criar um modelo de instância regional que especifique a ação de ignorar o desligamento do SO convidado, faça uma solicitação POST da seguinte maneira:

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

Substitua:

  • PROJECT_ID: o ID do projeto em que você quer criar o modelo de instância.

  • REGION: a região em que você quer criar o modelo de instância.

  • INSTANCE_TEMPLATE_NAME: o nome do modelo de instância.

  • IMAGE_PROJECT: o projeto de imagem que contém a imagem, por exemplo, debian-cloud. Para mais informações sobre os projetos de imagem com suporte, consulte Imagens públicas.

  • IMAGE: especifique uma destas opções:

    • Uma versão específica da imagem do SO. Por exemplo: debian-12-bookworm-v20240617

    • Uma família de imagens, que precisa ser formatada como family/IMAGE_FAMILY. Especifica a imagem do SO mais recente e não descontinuada. Por exemplo, se você especificar family/debian-12, a versão mais recente na família de imagens do Debian 12 será usada. Para mais informações sobre o uso de famílias de imagens, consulte Práticas recomendadas para famílias de imagens.

  • MACHINE_TYPE: o tipo de máquina a ser especificado no modelo de instância.

Para mais informações sobre como criar um modelo de instância, consulte Criar modelos de instância.

Ver a configuração de desligamento do SO convidado

É possível verificar se o Compute Engine ignora o encerramento do SO convidado ao parar ou excluir uma instância de computação.

Para conferir o tempo de desligamento do SO convidado em uma instância, selecione uma das seguintes opções:

gcloud

Para conferir os detalhes de uma instância e se ela ignora o desligamento do SO convidado, use o comando gcloud compute instances describe:

gcloud compute instances describe INSTANCE_NAME \
    --zone=ZONE

Substitua:

  • INSTANCE_NAME: o nome da instância.

  • ZONE: a zona em que a instância existe.

Se você configurou a instância para ignorar o desligamento do SO convidado, a saída vai conter o campo skipGuestOsShutdown definido como true, como no exemplo a seguir:

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

Caso contrário, se o campo skipGuestOsShutdown estiver ausente ou definido como false, o SO convidado usará o tempo de desligamento padrão.

REST

Para conferir os detalhes de uma instância e saber se ela ignora o desligamento do SO convidado, faça uma solicitação GET para o método instances.get:

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

Substitua:

  • PROJECT_ID: o ID do projeto em que a instância existe.

  • ZONE: a zona em que a instância existe.

  • INSTANCE_NAME: o nome da instância.

Se você configurou a instância para ignorar o desligamento do SO convidado, a saída vai conter o campo skipGuestOsShutdown definido como true, como no exemplo a seguir:

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

Caso contrário, se o campo skipGuestOsShutdown estiver ausente ou definido como false, o SO convidado usará o tempo de desligamento padrão.

A seguir