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


Este documento explica como diminuir o tempo de encerramento de uma instância do Compute Engine configurando a instância para ignorar o encerramento do SO convidado na paragem ou na eliminação.

Se configurar uma instância para ignorar o encerramento do SO convidado na paragem ou eliminação, o Compute Engine encerra imediatamente o SO convidado quando o estado da instância muda para STOPPING. Esta ação ajuda a libertar quota ou recursos mais rapidamente, acelerando a paragem ou a eliminação de uma instância. Para saber mais acerca das fases pelas quais uma instância passa durante a paragem ou a eliminação, incluindo o intervalo predefinido para o encerramento do SO convidado limpo, consulte Operação de paragem.

Antes de começar

  • Se ainda não o tiver feito, configure a autenticação. A autenticação valida a sua identidade para aceder a Google Cloud serviços e APIs. Para executar código ou exemplos a partir de um ambiente de desenvolvimento local, pode autenticar-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 Google Cloud. Após a instalação, inicialize a CLI gcloud executando o seguinte comando:

      gcloud init

      Se estiver a usar um fornecedor de identidade (IdP) externo, primeiro tem de iniciar sessão na CLI gcloud com a sua identidade federada.

    2. Set a default region and zone.

    REST

    Para usar os exemplos da API REST nesta página num ambiente de desenvolvimento local, usa as credenciais que fornece à CLI gcloud.

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

      gcloud init

      Se estiver a usar um fornecedor de identidade (IdP) externo, primeiro tem de iniciar sessão na CLI gcloud com a sua identidade federada.

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

Funções necessárias

Para receber as autorizações de que precisa para configurar uma instância de modo a ignorar o encerramento do SO convidado, peça ao seu administrador para lhe conceder a função IAM Administrador de instâncias do Compute (v1) (roles/compute.instanceAdmin.v1) no seu projeto. Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.

Esta função predefinida contém as autorizações necessárias para configurar uma instância para ignorar o encerramento do SO convidado. Para ver as autorizações exatas que são necessárias, expanda a secção Autorizações necessárias:

Autorizações necessárias

São necessárias as seguintes autorizações para configurar uma instância de modo a ignorar o encerramento 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
    • Para usar um instantâneo para criar a VM: compute.snapshots.useReadOnly no instantâneo
    • Para usar um modelo de instância para criar a VM: compute.instanceTemplates.useReadOnly no modelo de instância
    • Para atribuir uma rede antiga à VM: compute.networks.use no projeto
    • Para especificar um endereço IP estático para a VM: compute.addresses.use no projeto
    • Para atribuir um endereço IP externo à VM quando usar uma rede antiga: compute.networks.useExternalIp no projeto
    • Para especificar uma sub-rede para a VM: compute.subnetworks.use no projeto ou na sub-rede escolhida
    • Para atribuir um endereço IP externo à VM quando usar uma rede VPC: compute.subnetworks.useExternalIp no projeto ou na sub-rede escolhida
    • Para definir os metadados da instância de VM para a VM: compute.instances.setMetadata no projeto
    • Para definir etiquetas para a VM: compute.instances.setTags na VM
    • Para definir etiquetas para a VM: compute.instances.setLabels na VM
    • Para definir uma conta de serviço para a VM usar: compute.instances.setServiceAccount na VM
    • Para criar um novo disco para a VM: compute.disks.create no projeto
    • Para anexar um disco existente no modo de leitura ou leitura/escrita: compute.disks.use no disco
    • Para anexar um disco existente no modo de 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

Também pode conseguir estas autorizações com funções personalizadas ou outras funções predefinidas.

Configure instâncias para ignorar o encerramento do SO convidado

Para configurar uma instância de computação de modo a ignorar o encerramento do SO convidado quando parar ou eliminar a instância, use um dos seguintes métodos:

Configure o encerramento do SO convidado numa instância existente

Só pode configurar uma instância de computação para ignorar o encerramento do SO convidado se a instância estiver parada (TERMINATED).

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

gcloud

  1. Se ainda não o fez, pare a instância.

  2. Para configurar uma instância para ignorar o encerramento 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 o seguinte:

    • INSTANCE_NAME: o nome da instância.

    • ZONE: a zona onde a instância existe.

REST

  1. Se ainda não o fez, pare a instância.

  2. Para configurar uma instância para ignorar o encerramento do SO convidado, faça um pedido ao método instances.setSchedulingbeta.POST No corpo do pedido, 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 o artigo Atualize as propriedades da instância.

Configure o encerramento do SO convidado enquanto cria uma instância

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

gcloud

Para criar uma instância configurada para ignorar o encerramento 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 o seguinte:

  • INSTANCE_NAME: o nome da instância.

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

  • ZONE: a zona onde quer criar a instância.

REST

Para criar uma instância configurada para ignorar o encerramento do SO convidado, faça um pedido POST ao método instances.insert. No corpo do pedido, 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 o seguinte:

  • PROJECT_ID: o ID do projeto onde quer criar a instância.

  • ZONE: a zona onde quer criar a instância.

  • INSTANCE_NAME: o nome da instância.

  • MACHINE_TYPE: o tipo de máquina a usar 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 imagens suportados, consulte o artigo Imagens públicas.

  • IMAGE: especifique uma das seguintes opções:

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

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

Para mais informações sobre como criar uma instância, consulte o artigo Crie e inicie uma instância do Compute Engine.

Configure o encerramento do SO convidado enquanto cria instâncias em massa

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

gcloud

Para criar instâncias em massa configuradas para ignorar o encerramento 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 numa ú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 o seguinte:

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

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

  • NAME_PATTERN: o padrão de nome para as instâncias. Para substituir uma sequência de números num nome de instância, use uma sequência de carateres de cardinal (#). Por exemplo, se usar instance-# como um padrão de nome, o Compute Engine gera instâncias com nomes que começam por instance-1, instance-2 e continua este padrão incremental até ao número de instâncias que especificar em COUNT.

  • ZONE: a zona onde quer criar instâncias.

REST

Para criar instâncias em massa configuradas para ignorar o encerramento do SO convidado, faça um pedido POST ao método instances.bulkInsert. No corpo do pedido, inclua o campo skipGuestOsShutdown definido como true.

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

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 o seguinte:

  • PROJECT_ID: o ID do projeto onde quer criar instâncias em massa.

  • ZONE: a zona onde quer criar instâncias.

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

  • NAME_PATTERN: o padrão de nome para as instâncias. Para substituir uma sequência de números num nome de instância, use uma sequência de carateres de cardinal (#). Por exemplo, se usar instance-# como um padrão de nome, o Compute Engine gera instâncias com nomes que começam por instance-1, instance-2 e continua este padrão incremental até ao número de instâncias que especificar em COUNT.

  • MACHINE_TYPE: o tipo de máquina a usar 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 imagens suportados, consulte o artigo Imagens públicas.

  • IMAGE: especifique uma das seguintes opções:

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

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

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

Configure o encerramento do SO convidado enquanto cria um modelo de instância

Depois de criar um modelo de instância configurado para ignorar o encerramento do SO convidado quando para ou elimina instâncias de computação, pode usar o modelo de instância 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 encerramento 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 que deve ignorar o encerramento 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 o seguinte:

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

  • REGION: a região onde quer criar o modelo de instância.

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

REST

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

No corpo do pedido, inclua o campo skipGuestOsShutdown definido como true.

Por exemplo, para criar um modelo de instância regional que especifique a omissão do encerramento do SO convidado, faça um pedido POST da seguinte forma:

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 o seguinte:

  • PROJECT_ID: o ID do projeto onde quer criar o modelo de instância.

  • REGION: a região onde 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 imagens suportados, consulte o artigo Imagens públicas.

  • IMAGE: especifique uma das seguintes opções:

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

    • Uma família de imagens, que tem de estar formatada como family/IMAGE_FAMILY. Isto especifica a imagem do SO não descontinuada mais recente. Por exemplo, se especificar family/debian-12, é usada a versão mais recente na família de imagens do Debian 12. Para mais informações sobre a utilização de famílias de imagens, consulte o artigo Práticas recomendadas para famílias de imagens.

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

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

Veja a definição de encerramento do SO convidado

Pode verificar se o Compute Engine ignora o encerramento do SO convidado quando para ou elimina uma instância de computação.

Para ver a hora de encerramento do SO convidado numa instância, selecione uma das seguintes opções:

gcloud

Para ver os detalhes de uma instância e se esta ignora o encerramento do SO convidado, use o comando gcloud compute instances describe:

gcloud compute instances describe INSTANCE_NAME \
    --zone=ZONE

Substitua o seguinte:

  • INSTANCE_NAME: o nome da instância.

  • ZONE: a zona onde a instância existe.

Se configurou a instância para ignorar o encerramento do SO convidado, o resultado contém o campo skipGuestOsShutdown definido como true, como no exemplo seguinte:

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

Caso contrário, se o campo skipGuestOsShutdown estiver em falta ou estiver definido como false, o SO convidado usa o tempo de encerramento predefinido.

REST

Para ver os detalhes de uma instância e se esta ignora o encerramento do SO convidado, faça um pedido GET ao método instances.get:

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

Substitua o seguinte:

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

  • ZONE: a zona onde a instância existe.

  • INSTANCE_NAME: o nome da instância.

Se configurou a instância para ignorar o encerramento do SO convidado, o resultado contém o campo skipGuestOsShutdown definido como true, como no exemplo seguinte:

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

Caso contrário, se o campo skipGuestOsShutdown estiver em falta ou estiver definido como false, o SO convidado usa o tempo de encerramento predefinido.

O que se segue?