Limitar o ambiente de execução de uma VM


Neste documento, explicamos como usar o encerramento automático para limitar o ambiente de execução de instâncias de máquina virtual (VM) novas ou atuais e como monitorar esse ambiente.

É possível otimizar cargas de trabalho temporárias limitando de modo automático os ambientes de execução da VM, o que ajuda a minimizar os custos e liberar cotas. O encerramento automático permite programar uma VM para ser encerrada (interrompida ou excluída) ao atingir um limite de tempo específico (duração ou tempo).

Para saber como interromper uma VM, consulte Interromper e iniciar uma VM. Para saber mais sobre como excluir uma VM, consulte Excluir uma VM.

Como alternativa, para programar ambientes de execução de VM com relação a cargas de trabalho recorrentes, consulte Programar uma VM para ser iniciada e encerrada.

Antes de começar

  • Para receber as permissões necessárias para o encerramento automático, peça ao administrador para conceder a você o papel do IAM de Administrador da instância do Compute (v1) (roles/compute.instanceAdmin.v1) no projeto. Para mais informações sobre como conceder papéis, consulte Gerenciar acesso.

    Também é possível conseguir as permissões necessárias com papéis personalizados ou outros papéis predefinidos.

  • Configure a autenticação, caso ainda não tenha feito isso. A autenticação é o processo de verificação da 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 da seguinte maneira.

    Selecione a guia para como planeja usar as amostras nesta página:

    Console

    Quando você usa o console do Google Cloud para acessar os serviços e as APIs do Google Cloud, não é necessário configurar a autenticação.

    gcloud

    1. Instale a Google Cloud CLI e inicialize-a executando o seguinte comando:

      gcloud init
    2. Defina uma região e uma zona padrão.

    REST

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

      Instale a Google Cloud CLI e inicialize-a executando o seguinte comando:

      gcloud init

Restrições

O encerramento automático tem as seguintes restrições:

  • O encerramento automático é apagado sempre que a VM for interrompida ou suspensa. Essa restrição visa evitar o encerramento acidental de uma VM que concluiu a execução ou foi encerrada e iniciada novamente sem ser atualizada.

  • A rescisão automática tem um limite de tempo mínimo de 30 segundos e máximo de 120 dias.

  • O encerramento automático pode levar até 30 segundos a mais do que a duração ou o tempo especificado para começar o processo de interrupção ou exclusão da VM.

  • Não é possível usar o encerramento automático com VMs preemptivas legadas. Em vez disso, use o encerramento automático com VMs spot.

Também é possível usar as programações de instância quando você quer programar uma VM para ser encerrada independentemente de interrupções ou com relação a um limite máximo de tempo maior.

Limitar o ambiente de execução de uma nova VM

Confira nas seções a seguir como configurar o encerramento automático ao criar uma nova VM.

Para especificar quando a VM será encerrada, defina o limite de tempo como duration ou tempo.

Definir uma duração

Uma duração representa o ambiente de execução total desejado de uma VM. Para criar uma VM que é encerrada de modo automático após ser executada por uma duração específica, use o console do Google Cloud, a CLI do Google Cloud ou a API Compute Engine.

Console

  1. No console do Google Cloud, acesse a página Criar uma instância.

    Acesse "Criar uma instância"

  2. Na seção Políticas de disponibilidade, abra Configurações avançadas do modelo de provisionamento de VM.

  3. Para ativar o encerramento automático, marque a caixa de seleção Definir um limite de tempo para a VM. O campo Tipo de limite de tempo é exibido.

  4. No campo Tipo de limite de tempo, selecione Por horas (padrão) para especificar o limite de tempo como uma duração. No campo a seguir, insira a duração em horas.

  5. Na lista No encerramento da VM, selecione o que acontece quando o ambiente de execução da VM atinge o limite de tempo especificado:

    • Para encerrar a VM de modo automático, selecione Parar (padrão).
    • Para excluir a VM, selecione Excluir.
  6. Opcional: especifique outras opções de VM. Para mais informações, consulte Como criar e iniciar uma instância de VM.

  7. Para criar e iniciar a VM, clique em Criar.

gcloud

Para criar uma VM a partir da CLI gcloud, use o comando gcloud beta compute instances create. Para criar uma VM que é encerrada automaticamente após um período específico, inclua o flag --max-run-duration. Para especificar a ação de encerramento, inclua o flag --instance-termination-action, que é opcional para VMs do Spot.

gcloud beta compute instances create VM_NAME \
    --max-run-duration=DURATION \
    --instance-termination-action=TERMINATION_ACTION

Substitua:

  • VM_NAME: o nome da nova VM.
  • DURATION: a duração desejada para a execução da VM antes de ela ser encerrada de modo automático. Formate a duração como o número de dias, horas, minutos e segundos seguidos por d, h, m e s, respectivamente. Por exemplo, especifique 30m para uma duração de 30 minutos ou especifique 1d2h3m4s para uma duração de um dia, duas horas, três minutos e quatro segundos. A duração mínima é de 30 segundos (30s) e a máxima é de 120 dias (120d).
  • TERMINATION_ACTION: a ação de encerramento da VM, que pode ser uma ação de parada (STOP) ou exclusão (DELETE). A imposição desse campo como obrigatório ou a inclusão de um valor padrão para ele variam com base no modelo de provisionamento da VM:
    • Se for uma VM spot (se a VM usar o flag --provisioning-model=SPOT), o flag --instance-termination-action=TERMINATION_ACTION será opcional. Se esse flag for omitida, a ação de encerramento padrão será interrompida.
    • Caso contrário, o padrão é o flag --instance-termination-action=TERMINATION_ACTION.

Para mais informações sobre as opções que você pode especificar ao criar uma VM, consulte Como criar e iniciar uma instância de VM.

REST

Para criar uma VM a partir da API Compute Engine, use o método Beta instances.insert. Especifique um nome, um tipo de máquina e um disco de inicialização para a VM.

Para criar uma VM que seja encerrada de modo automático após um período específico, inclua o campo maxRunDuration. Para especificar a ação de encerramento, inclua o campo instanceTerminationAction, que é opcional para VMs spot.

POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/instances
{
  "machineType": "zones/ZONE/machineTypes/MACHINE_TYPE",
  "name": "VM_NAME",
  "disks": [
    {
      "initializeParams": {
        "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
      },
      "boot": true
    }
  ]
  "scheduling":
  {
    "maxRunDuration":
    {
      "seconds": DURATION
    },
    "instanceTerminationAction": "TERMINATION_ACTION"
  },
}

Substitua:

  • PROJECT_ID: o ID do projeto em que a VM será criada.
  • ZONE: a zona em que a VM será criada. A zona também precisa ser compatível com o tipo de máquina a ser usado na nova VM;
  • MACHINE_TYPE: o tipo de máquina predefinido ou personalizado da nova VM.
  • VM_NAME: o nome da nova VM.
  • IMAGE_PROJECT: o projeto que contém a imagem. Por exemplo, se você especificar family/debian-10 como a imagem, especifique debian-cloud como o projeto da imagem.
  • IMAGE: a imagem da nova VM. Você pode especificar uma versão específica de uma imagem pública ou uma família de imagens. Por exemplo, se você especificar family/debian-10 como a imagem e debian-cloud como o projeto de imagem, o Compute Engine criará uma VM a partir da versão mais recente da imagem do SO na família de imagens Debian 10.
  • DURATION: a duração em segundos da execução dessa VM antes do encerramento automático. A duração mínima é de 30 segundos (30s) e a máxima é de 120 dias (120d).
  • TERMINATION_ACTION: a ação de encerramento da VM, que pode ser uma ação de parada (STOP) ou exclusão (DELETE). A imposição desse campo como obrigatório ou a inclusão de um valor padrão para ele variam com base no modelo de provisionamento da VM:
    • No caso de uma VM spot (quando ela usa o campo "provisioningModel": "SPOT"), o campo "instanceTerminationAction": "TERMINATION_ACTION" é opcional. Se esse campo for omitido, a ação de encerramento padrão será interrompida.
    • Caso contrário, como padrão, o campo "instanceTerminationAction": "TERMINATION_ACTION" é obrigatório.

Para mais informações sobre as opções que você pode especificar ao criar uma VM, consulte Como criar e iniciar uma instância de VM.

Definir um tempo

Um tempo representa a data, a hora e o fuso horário em que você quer que a VM seja encerrada. Para criar uma VM que é encerrada automaticamente em um tempo específico, use o console do Google Cloud, a Google Cloud CLI ou a API Compute Engine.

Console

  1. No console do Google Cloud, acesse a página Criar uma instância.

    Acesse "Criar uma instância"

  2. Na seção Políticas de disponibilidade, abra Configurações avançadas do modelo de provisionamento de VM.

  3. Para ativar o encerramento automático, marque a caixa de seleção Definir um limite de tempo para a VM. O campo Tipo de limite de tempo é exibido.

  4. No campo Tipo de limite de tempo, selecione Por data para especificar o limite como um horário e data. No campo a seguir, clique em Selecionar data e hora e escolha a data, a hora e o fuso horário para o encerramento automático.

  5. Na lista No encerramento da VM, selecione o que acontece quando o ambiente de execução da VM atinge o limite de tempo especificado:

    • Para encerrar a VM de modo automático, selecione Parar (padrão).
    • Para excluir a VM, selecione Excluir.
  6. Opcional: especifique outras opções de VM. Para mais informações, consulte Como criar e iniciar uma instância de VM.

  7. Para criar e iniciar a VM, clique em Criar.

gcloud

Para criar uma VM a partir da CLI gcloud, use o comando gcloud beta compute instances create. Para criar uma VM que é encerrada automaticamente em um horário específico, é preciso incluir o flag --termination-time. Para especificar a ação de encerramento, inclua o flag --instance-termination-action, que é opcional para VMs do Spot.

gcloud beta compute instances create VM_NAME \
    --termination-time=TIME \
    --instance-termination-action=TERMINATION_ACTION

Substitua:

  • VM_NAME: o nome da nova VM.
  • TIME: o tempo em que você quer que a VM seja encerrada automaticamente. O tempo especificado precisa ser pelo menos 30 segundos no futuro e no máximo 120 dias no futuro. Formate o tempo como um carimbo de data/hora RFC 3339:

    YYYY-MM-DDTHH:MM:SSOFFSET
    

    Substitua:

    • YYYY-MM-DD: uma data formatada como um ano de quatro dígitos, um mês de dois dígitos e um dia de dois dígitos do mês, separado por hifens.
    • HH:MM:SS: um horário formatado como uma hora de dois dígitos usando o horário de 24 horas, minutos de dois dígitos e segundos de dois dígitos separados por hífens.
    • OFFSET: fuso horário formatado como um deslocamento Tempo Universal Coordenado (UTC). Por exemplo, para usar o Horário Padrão do Pacífico (PST), que é oito horas antes do UTC, especifique -08:00. Como alternativa, para não usar deslocamento (UTC+0), especifique Z.
  • TERMINATION_ACTION: a ação de encerramento desta VM, que pode ser parar (STOP) ou excluir (DELETE). Se o campo é obrigatório ou tem um valor padrão varia com base no modelo de provisionamento da VM:

    • Se for uma VM spot (se a VM usar o flag --provisioning-model=SPOT), o flag --instance-termination-action=TERMINATION_ACTION será opcional. Se esse flag for omitida, a ação de encerramento padrão será interrompida.
    • Caso contrário, o padrão é o flag --instance-termination-action=TERMINATION_ACTION.

Para mais informações sobre as opções que você pode especificar ao criar uma VM, consulte Como criar e iniciar uma instância de VM.

REST

Para criar uma VM a partir da API Compute Engine, use o método Beta instances.insert. Especifique um nome, um tipo de máquina e um disco de inicialização para a VM.

Para criar uma VM que é encerrada de modo automático em um horário específico, é preciso incluir o campo terminationTime. Para especificar a ação de encerramento, inclua o campo instanceTerminationAction, que é opcional para VMs spot.

POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/instances
{
  "machineType": "zones/ZONE/machineTypes/MACHINE_TYPE",
  "name": "VM_NAME",
  "disks": [
    {
      "initializeParams": {
        "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
      },
      "boot": true
    }
  ]
  "scheduling":
  {
    "terminationTime": "TIME",
    "instanceTerminationAction": "TERMINATION_ACTION"
  },
}

Substitua:

  • PROJECT_ID: o ID do projeto em que a VM será criada.
  • ZONE: a zona em que a VM será criada. A zona também precisa ser compatível com o tipo de máquina a ser usado na nova VM;
  • MACHINE_TYPE: o tipo de máquina predefinido ou personalizado da nova VM.
  • VM_NAME: o nome da nova VM.
  • IMAGE_PROJECT: o projeto que contém a imagem. Por exemplo, se você especificar family/debian-10 como a imagem, especifique debian-cloud como o projeto da imagem.
  • IMAGE: a imagem da nova VM. Você pode especificar uma versão específica de uma imagem pública ou uma família de imagens. Por exemplo, se você especificar family/debian-10 como a imagem e debian-cloud como o projeto de imagem, o Compute Engine criará uma VM a partir da versão mais recente da imagem do SO na família de imagens Debian 10.
  • TIME: o tempo em que você quer que a VM seja encerrada automaticamente. O tempo especificado precisa ser pelo menos 30 segundos no futuro e no máximo 120 dias no futuro. Formate o tempo como um carimbo de data/hora RFC 3339:

    YYYY-MM-DDTHH:MM:SSOFFSET
    

    Substitua:

    • YYYY-MM-DD: uma data formatada como um ano de quatro dígitos, um mês de dois dígitos e um dia de dois dígitos do mês, separado por hifens.
    • HH:MM:SS: um horário formatado como uma hora de dois dígitos usando o horário de 24 horas, minutos de dois dígitos e segundos de dois dígitos separados por hífens.
    • OFFSET: fuso horário formatado como um deslocamento Tempo Universal Coordenado (UTC). Por exemplo, para usar o Horário Padrão do Pacífico (PST), que é oito horas antes do UTC, especifique -08:00. Como alternativa, para não usar deslocamento (UTC+0), especifique Z.
  • TERMINATION_ACTION: a ação de encerramento da VM, que pode ser uma ação de parada (STOP) ou exclusão (DELETE). A imposição desse campo como obrigatório ou a inclusão de um valor padrão para ele variam com base no modelo de provisionamento da VM:

    • No caso de uma VM spot (quando ela usa o campo "provisioningModel": "SPOT"), o campo "instanceTerminationAction": "TERMINATION_ACTION" é opcional. Se esse campo for omitido, a ação de encerramento padrão será interrompida.
    • Caso contrário, como padrão, o campo "instanceTerminationAction": "TERMINATION_ACTION" é obrigatório.

Para mais informações sobre as opções que você pode especificar ao criar uma VM, consulte Como criar e iniciar uma instância de VM.

Limitar o ambiente de execução de uma VM existente

É possível limitar o ambiente de execução de uma VM atual atualizando a programação dela. Se você ainda não sabe como definir as configurações do encerramento automático, reveja primeiro as seções anteriores sobre como limitar o ambiente de execução de uma nova VM.

É possível usar o console do Google Cloud, a CLI do Google Cloud ou a API Compute Engine para atualizar a programação da VM, conforme descrito nesta seção. No entanto, esse método exige que você primeiro interrompa a VM, defina a programação dela e a reinicie. Como alternativa, para atualizar várias propriedades da VM de uma só vez e interromper e reiniciar uma VM de modo automático durante a definição das propriedades dela, consulte Atualizar as propriedades da instância.

Console

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

    Acessar instâncias de VM

  2. Na coluna Nome, clique no nome da VM que você quer atualizar.

  3. Na página Detalhes da instância, siga estas etapas:

    1. Se a VM estiver em execução, clique em Parar.
    2. Para editar a VM, clique em Editar.
    3. Na página Editar instância, siga estas etapas:

      1. Na seção Políticas de disponibilidade, modifique a caixa de seleção Definir um limite de tempo para a VM e todos os campos abaixo dela como quiser.

        Para saber como configurar as propriedades relacionadas ao encerramento automático, consulte Limitar o ambiente de execução de uma nova VM.

      2. Para salvar as alterações, clique em Save.

    4. Opcional: para começar a executar a VM agora, clique em Iniciar.

gcloud

Para atualizar a programação de uma VM com relação ao encerramento automático usando a gcloud CLI, siga estas etapas:

  1. Se a VM estiver em execução, interrompa-a usando o comando gcloud compute instances stop:

    gcloud compute instances stop VM_NAME
    

    Substitua VM_NAME pelo nome da VM a ser atualizada.

  2. Use o comando gcloud beta compute instances set-scheduling para atualizar as configurações da VM com relação ao encerramento automático. É necessário incluir o flag --max-run-duration ou --termination-time para definir o limite de tempo como uma duração ou tempo, respectivamente:

    • Para definir uma duração, use o seguinte comando:

      gcloud beta compute instances set-scheduling VM_NAME \
          --max-run-duration=DURATION \
          --instance-termination-action=TERMINATION_ACTION
      
    • Para definir um tempo, use o seguinte comando:

      gcloud beta compute instances set-scheduling VM_NAME \
          --termination-time=TIME \
          --instance-termination-action=TERMINATION_ACTION
      

    Substitua:

    • VM_NAME: o nome da VM que você quer atualizar.
    • DURATION: a duração desejada para a execução da VM antes de ela ser encerrada de modo automático. Formate a duração como o número de dias, horas, minutos e segundos seguidos por d, h, m e s, respectivamente. Por exemplo, especifique 30m para uma duração de 30 minutos ou especifique 1d2h3m4s para uma duração de um dia, duas horas, três minutos e quatro segundos. A duração mínima é de 30 segundos (30s) e a máxima é de 120 dias (120d).
    • TIME: o tempo em que você quer que a VM seja encerrada automaticamente. O tempo especificado precisa ser pelo menos 30 segundos no futuro e no máximo 120 dias no futuro. Formate o tempo como um carimbo de data/hora RFC 3339:

      YYYY-MM-DDTHH:MM:SSOFFSET
      

      Substitua:

      • YYYY-MM-DD: uma data formatada como um ano de quatro dígitos, um mês de dois dígitos e um dia de dois dígitos do mês, separado por hifens.
      • HH:MM:SS: um horário formatado como uma hora de dois dígitos usando o horário de 24 horas, minutos de dois dígitos e segundos de dois dígitos separados por hífens.
      • OFFSET: fuso horário formatado como um deslocamento Tempo Universal Coordenado (UTC). Por exemplo, para usar o Horário Padrão do Pacífico (PST), que é oito horas antes do UTC, especifique -08:00. Como alternativa, para não usar deslocamento (UTC+0), especifique Z.
    • TERMINATION_ACTION: a ação de encerramento desta VM, que pode ser parar (STOP) ou excluir (DELETE). Se o campo é obrigatório ou tem um valor padrão varia com base no modelo de provisionamento da VM:

      • Se for uma VM spot (se a VM usar o flag --provisioning-model=SPOT), o flag --instance-termination-action=TERMINATION_ACTION será opcional. Se esse flag for omitida, a ação de encerramento padrão será interrompida.
      • Caso contrário, o padrão é o flag --instance-termination-action=TERMINATION_ACTION.
  3. Para que a VM comece a ser executada, inicie-a usando o comando gcloud compute instances start:

    gcloud compute instances start VM_NAME
    

    Substitua VM_NAME pelo nome da VM.

REST

Para atualizar a programação de uma VM para o encerramento automático usando a API Compute Engine, siga estas etapas:

  1. Se a VM estiver em execução, interrompa-a usando o método instances.stop:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/stop
    

    Substitua:

    • PROJECT_ID: o ID do projeto que contém a VM.
    • ZONE: a zona que contém a VM.
    • VM_NAME: o nome da VM que você quer atualizar.
  2. Atualize a propriedade scheduling da VM incluindo campos para o encerramento automático por meio do método Beta instances.setScheduling. Inclua o campo maxRunDuration ou terminationTime para definir o limite de tempo como uma duração ou tempo, respectivamente:

    • Para definir uma duração, use a seguinte solicitação:

      POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setScheduling
      {
        "maxRunDuration":
        {
          "seconds": DURATION
        },
        "instanceTerminationAction": "TERMINATION_ACTION"
      }
      
    • Para definir um tempo, use a seguinte solicitação:

      POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setScheduling
      {
        "terminationTime": "TIME",
        "instanceTerminationAction": "TERMINATION_ACTION"
      }
      

    Substitua:

    • PROJECT_ID: o ID do projeto em que a VM será criada.
    • ZONE: a zona em que a VM será criada. A zona também precisa ser compatível com o tipo de máquina a ser usado na nova VM;
    • MACHINE_TYPE: o tipo de máquina predefinido ou personalizado da nova VM.
    • VM_NAME: o nome da nova VM.
    • IMAGE_PROJECT: o projeto que contém a imagem. Por exemplo, se você especificar family/debian-10 como a imagem, especifique debian-cloud como o projeto da imagem.
    • IMAGE: a imagem da nova VM. Você pode especificar uma versão específica de uma imagem pública ou uma família de imagens. Por exemplo, se você especificar family/debian-10 como a imagem e debian-cloud como o projeto de imagem, o Compute Engine criará uma VM a partir da versão mais recente da imagem do SO na família de imagens Debian 10.
    • DURATION: a duração em segundos da execução dessa VM antes do encerramento automático. A duração mínima é de 30 segundos (30s) e a máxima é de 120 dias (120d).
    • TIME: o tempo em que você quer que a VM seja encerrada automaticamente. O tempo especificado precisa ser pelo menos 30 segundos no futuro e no máximo 120 dias no futuro. Formate o tempo como um carimbo de data/hora RFC 3339:

      YYYY-MM-DDTHH:MM:SSOFFSET
      

      Substitua:

      • YYYY-MM-DD: uma data formatada como um ano de quatro dígitos, um mês de dois dígitos e um dia de dois dígitos do mês, separado por hifens.
      • HH:MM:SS: um horário formatado como uma hora de dois dígitos usando o horário de 24 horas, minutos de dois dígitos e segundos de dois dígitos separados por hífens.
      • OFFSET: fuso horário formatado como um deslocamento Tempo Universal Coordenado (UTC). Por exemplo, para usar o Horário Padrão do Pacífico (PST), que é oito horas antes do UTC, especifique -08:00. Como alternativa, para não usar deslocamento (UTC+0), especifique Z.
    • TERMINATION_ACTION: a ação de encerramento desta VM, que pode ser parar (STOP) ou excluir (DELETE). Se o campo é obrigatório ou tem um valor padrão varia com base no modelo de provisionamento da VM:

      • No caso de uma VM spot (quando ela usa o campo "provisioningModel": "SPOT"), o campo "instanceTerminationAction": "TERMINATION_ACTION" é opcional. Se esse campo for omitido, a ação de encerramento padrão será interrompida.
      • Caso contrário, como padrão, o campo "instanceTerminationAction": "TERMINATION_ACTION" é obrigatório.
  3. Para que a VM comece a ser executada, inicie-a usando o método instances.start:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/start
    

    Substitua:

Monitorar o ambiente de execução de uma VM

Para monitorar o ambiente de execução de uma VM, por exemplo, para conferir se uma VM foi interrompida antes de ser programada para o encerramento automático, consulte as operações da VM. Para identificar operações de VM causadas pelo encerramento automático, procure os seguintes tipos de operação:

  • compute.instances.deferredStop para uma ação de encerramento de parada
  • compute.instances.deferredDelete para uma ação de encerramento de exclusão

A seguir