Executar scripts de encerramento

Crie e execute scripts de encerramento que executam comandos imediatamente antes de uma instância de máquina virtual (VM) ser parada ou reiniciada. Isto é útil se depender de scripts automatizados para iniciar e encerrar instâncias, o que permite que as instâncias tenham tempo para limpar ou realizar tarefas, como exportar registos ou sincronizar com outros sistemas.

Os scripts de encerramento são especialmente úteis para VMs num grupo de instâncias gerido com um escalador automático. Se o escalador automático encerrar uma VM no grupo, o script de encerramento é executado antes de a VM parar e o script de encerramento executa todas as ações que definir. O script é executado durante o período de encerramento limitado antes de a VM parar. Por exemplo, o script de encerramento pode copiar os dados processados para o Cloud Storage ou fazer uma cópia de segurança de quaisquer registos.

Os scripts de encerramento funcionam de forma muito semelhante aos scripts de arranque. Grande parte da documentação dos scripts de arranque também se aplica aos scripts de encerramento.

Para as tarefas de encerramento e reinício, as VMs executam sempre scripts de encerramento da seguinte forma:

  • Para VMs Linux, através do utilizador root.
  • Para VMs do Windows, através da conta System.

Antes de começar

  • Saiba mais sobre os guiões de arranque.
  • Compreenda o que é o servidor de metadados.
  • Se ainda não o tiver feito, configure a autenticação. A autenticação valida a sua identidade para aceder a Trusted Cloud by S3NS 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:

    Console

    When you use the Trusted Cloud console to access Trusted Cloud by S3NS services and APIs, you don't need to set up authentication.

    gcloud

    1. Instale a CLI Google Cloud e, em seguida, inicie sessão na CLI gcloud com a sua identidade federada. Depois de iniciar sessão, inicialize a CLI gcloud executando o seguinte comando:

      gcloud init
    2. Set a default region and zone.

    Terraform

    Para usar os exemplos do Terraform nesta página num ambiente de desenvolvimento local, instale e inicialize a CLI gcloud e, em seguida, configure as credenciais predefinidas da aplicação com as suas credenciais de utilizador.

      Instale a CLI Google Cloud e, em seguida, inicie sessão na CLI gcloud com a sua identidade federada.

      Create local authentication credentials for your user account:

      gcloud auth application-default login

      If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

    Para mais informações, consulte Set up authentication for a local development environment.

    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 e, em seguida, inicie sessão na CLI gcloud com a sua identidade federada.

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

Autorizações necessárias para esta tarefa

Para realizar esta tarefa, tem de ter as seguintes autorizações:

  • Todas as autorizações necessárias para criar uma instância
  • compute.instances.setMetadata na instância

Especificações

As secções seguintes descrevem as especificações dos scripts de encerramento.

Limitações

Existem algumas limitações a ter em atenção quando usar scripts de encerramento:

  • O Compute Engine executa scripts de encerramento apenas com base no melhor esforço. Em casos raros, o Compute Engine não pode garantir que o script de encerramento é concluído.
  • No Windows, a Política de Grupo Local é usada para iniciar o script de encerramento.
    • O pacote de instalação configura a definição da política de grupo local Computer Configuration/Windows Setting/Scripts (Startup/Shutdown) para iniciar o script no encerramento do sistema.

Invocar script de encerramento

Os scripts de encerramento são acionados quando a instância é encerrada após a ocorrência de qualquer um dos seguintes eventos:

  • Faça o seguinte:

  • O Compute Engine para uma instância como parte de uma paragem programada ou de uma operação de eliminação.

  • O Compute Engine para uma VM do Spot ou uma instância preemptível como parte do processo de preemptão.

Um script de encerramento pode ser de qualquer tipo de ficheiro. Se existir um script de encerramento na instância, o Compute Engine faz o seguinte:

  1. Copia o script para um ficheiro local na instância.
  2. Define autorizações no ficheiro para tornar o script executável.
  3. Executa o ficheiro quando a instância é encerrada.

Por exemplo, pode fornecer um guião Python em vez de um guião bash. Tenha em atenção que o Compute Engine executa o script literalmente, independentemente do tipo de script.

Para executar um script que não seja bash, adicione uma linha shebang na parte superior do ficheiro para informar o sistema operativo sobre o intérprete a usar. Por exemplo, para um script Python, pode adicionar uma linha shebang como:

#!/usr/bin/python

Tempo de execução do guião de encerramento

Os scripts de encerramento começam a ser executados quando o Compute Engine define o estado da instância como STOPPING. Os seus scripts têm de ser concluídos antes de a instância ser totalmente parada, ou seja, quando o respetivo estado muda para TERMINATED. O tempo que a instância demora a atingir o estado TERMINATED varia consoante o tipo de instância.

Se os seus scripts demorarem mais tempo do que o necessário para a instância parar, o Compute Engine para os scripts à força, o que pode levar à perda de dados ou a tarefas incompletas. Para evitar esta situação, pare a instância a partir do respetivo SO convidado. Esta abordagem mantém o estado da instância como STOPPING até que os scripts de encerramento terminem a execução.

Use um script de encerramento local

Um script de encerramento local é um script que reside no seu computador local. Transmita um script de encerramento local como um ficheiro ou fornecendo o conteúdo diretamente ao Compute Engine.

Os scripts de encerramento podem realizar todas as ações necessárias, mas se estiver a transmitir o ficheiro localmente, o script não pode exceder o limite de comprimento do valor dos metadados de 256 KB. Para usar um script que exceda o limite de comprimento, armazene o ficheiro no Cloud Storage. Consulte Use o script de encerramento do Cloud Storage para mais informações.

Faculte um ficheiro de script de encerramento

Só pode transmitir um ficheiro de script de encerramento local através da gcloudferramenta de linha de comandos.

gcloud

Para transmitir um ficheiro de script de encerramento local, forneça a flag --metadata-from-file, seguida de um par de chaves de metadados, shutdown-script=PATH/TO/FILE, em que PATH/TO/FILE é um caminho relativo para o script de encerramento. Por exemplo:

gcloud compute instances create example-instance \
    --metadata-from-file shutdown-script=examples/scripts/install.sh

Terraform

Para especificar um script de encerramento diretamente, use o recurso google_compute_instance com o caminho para o script de encerramento nos metadados.

resource "google_compute_instance" "shutdown_content_from_file" {
  name         = "instance-name-shutdown-content-from-file"
  machine_type = "f1-micro"
  zone         = "us-central1-c"
  metadata = {
    # Shuts down Apache server
    shutdown-script = file("${path.module}/shutdown-script.sh")
  }
  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-11"
    }
  }
  network_interface {
    # A default network is created for all Google Cloud projects
    network = "default"
    access_config {
    }
  }
}

Forneça diretamente o conteúdo do script de encerramento

Em alternativa, pode transmitir diretamente o conteúdo do seu script de encerramento.

Consola

Na Trusted Cloud consola, especifique um script de encerramento diretamente através da chave de metadados shutdown-script:

  1. Aceda à página Criar uma instância.

    Aceda a Criar uma instância

  2. Especifique os detalhes da VM.

  3. Expanda a secção Opções avançadas.

  4. Expanda Gestão e faça o seguinte:

    1. Na secção Metadados, clique em Adicionar item.
    2. No campo Chave, introduza shutdown-script para a chave de metadados.
    3. No campo Valor, adicione o conteúdo do guião de encerramento.
  5. Continue com o processo de criação da VM.

gcloud

Usando a CLI do Google Cloud, use a flag --metadata para fornecer o conteúdo do seu script de encerramento, seguido do par de chaves shutdown-script=CONTENTS, em que CONTENTS é o conteúdo do seu script de encerramento.

gcloud compute instances create example-instance --metadata shutdown-script="#! /bin/bash
> # Shuts down Apache server
> /etc/init.d/apache2 stop"

Terraform

Para especificar um script de encerramento diretamente, use o recurso google_compute_instance com o script de encerramento nos metadados.

resource "google_compute_instance" "default" {
  name         = "instance-name-shutdown-content-directly"
  machine_type = "f1-micro"
  zone         = "us-central1-c"
  metadata = {
    # Shuts down Apache server
    shutdown-script = "#! /bin/bash /etc/init.d/apache2 stop"
  }
  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-11"
    }
  }
  network_interface {
    # A default network is created for all Google Cloud projects
    network = "default"
    access_config {
    }
  }
}

REST

Na API, forneça um script de encerramento como parte da propriedade de metadados no seu pedido quando criar uma instância. Usar shutdown-script como a chave de metadados:

POST https://compute.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/instances

{...
  "metadata": {
    "items": [
      {
       "key": "shutdown-script",
       "value": "#! /bin/bash\n\n# Shuts down Apache server\n/etc/init.d/apache2 stop"
      }
    ]
  }...
}

Forneça um script de encerramento em instâncias do Windows

Execute scripts de encerramento em instâncias do Windows através das seguintes chaves de metadados específicas do Windows. Escolha qualquer uma das teclas especializadas indicadas abaixo. Cada chave deve corresponder ao tipo de script que quer executar.

Pode especificar vários scripts de encerramento transmitindo chaves diferentes à sua instância, mas cada chave só pode ser especificada uma vez por máquina virtual.

As seguintes teclas podem ser usadas com um script de encerramento local, seguindo as mesmas instruções acima.

cmd scripts de encerramento bat scripts de encerramento ps1 scripts de encerramento
windows-shutdown-script-cmd windows-shutdown-script-bat windows-shutdown-script-ps1

Use um script de encerramento do Cloud Storage

Pode armazenar e usar um script de encerramento a partir do Cloud Storage. Siga as instruções na documentação dos scripts de arranque, mas substitua startup-script-url por shutdown-script-url.

Para instâncias do Windows, substitua windows-startup-script-url por windows-shutdown-script-url.

Aplique um script de encerramento a instâncias em execução

Para adicionar um script de encerramento a uma instância em execução, siga as instruções na documentação Aplicar um script de arranque a instâncias em execução, mas substitua as chaves de metadados por uma das seguintes chaves:

  • shutdown-script: forneça o conteúdo do guião de encerramento diretamente com esta chave. Através da CLI do Google Cloud, pode indicar o caminho para um ficheiro de script de encerramento, usando a flag --metadata-from-file e a chave de metadados shutdown-script.
  • shutdown-script-url: forneça um URL do Cloud Storage para o ficheiro de script de encerramento com esta chave.

Ver a saída de um script de encerramento

Linux

Pode ver o resultado de um script de encerramento do Linux através de qualquer uma das seguintes ações:

Windows

Veja o resultado de um script de encerramento do Windows Server através de qualquer um dos seguintes métodos e verifique se existem eventos GCEMetadataScripts:

  • Porta de série 1 na Trusted Cloud consola. Para mais informações, consulte o artigo Ver a saída da porta série.

  • Registo de aplicações do Event Viewer do Windows.

  • IAP Desktop a partir de uma estação de trabalho do Windows. Para mais informações, consulte o repositório GoogleCloudPlatform/iap-desktop no GitHub.