Crie e execute scripts de desligamento que executam comandos antes que uma instância de máquina virtual (VM) seja interrompida ou reiniciada. Isso é útil quando você conta com scripts automatizados para iniciar e encerrar instâncias para que elas tenham tempo de limpar ou fazer tarefas, como exportar registros ou fazer a sincronização com outros sistemas.
Os scripts de desligamento são úteis principalmente para VMs em um grupo gerenciado de instâncias com um escalonador automático. Se o escalonador automático encerra uma VM no grupo, o script de desligamento é executado antes de a VM ser interrompida e o script de desligamento executa todas as ações definidas por você. O script é executado durante o período de desligamento limitado antes da interrupção da instância. Por exemplo, o script de desligamento pode copiar dados processados no Cloud Storage ou fazer backup de todos os registros.
As funções dos scripts de desligamento são similares às dos scripts de inicialização. Grande parte da documentação de scripts de inicialização também se aplica aos scripts de desligamento.
Para tarefas de desligamento e reinicialização, as VMs sempre executam scripts de desligamento da seguinte maneira:
- Para VMs do Linux, usando o usuário
root
. - Para VMs do Windows, usando a conta
System
.
Antes de começar
- Saiba mais sobre scripts de inicialização.
- Entenda o que é o servidor de metadados.
-
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
-
Instale a Google Cloud CLI e inicialize-a executando o seguinte comando:
gcloud init
- Defina uma região e uma zona padrão.
Terraform
Para usar as amostras de Terraform nesta página de um ambiente de desenvolvimento local, instale e inicialize a CLI gcloud e, em seguida, configure o Application Default Credentials com as credenciais de usuário.
- Instale a CLI do Google Cloud.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init
-
Crie as credenciais de autenticação para sua Conta do Google:
gcloud auth application-default login
Veja mais informações em: Configurar a autenticação para um ambiente de desenvolvimento local.
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
-
Permissões exigidas para a tarefa
Para executar esta tarefa, é preciso ter a permissão a seguir:
- Todas as permissões necessárias para criar uma instância
compute.instances.setMetadata
na instância
Especificações
Limitações
Existem algumas limitações a serem observadas ao usar scripts de desligamento:
- Os scripts de desligamento têm um tempo limitado para concluir a execução antes que a instância seja interrompida:
- Instâncias sob demanda: 90 segundos depois que você parar ou excluir uma instância
- Instâncias preemptivas: 30 segundos depois da instância preemptiva
- O Compute Engine só executa scripts de desligamento com base no melhor esforço. Em casos raros, o Compute Engine não pode garantir que o script de desligamento seja concluído.
- No Windows, a Política de Grupo Local é usada para iniciar o script de desligamento.
- O pacote de instalação define a configuração da Política de Grupo Local
Computer Configuration/Windows Setting/Scripts (Startup/Shutdown)
para iniciar o script após o encerramento do sistema.
- O pacote de instalação define a configuração da Política de Grupo Local
Invocação de script de desligamento
Os scripts de desligamento são acionados por determinados eventos da Interface avançada de energia e configuração (ACPI, na sigla em inglês), como reinicializações ou encerramentos. Há muitas maneiras de reiniciar ou interromper uma instância, mas apenas algumas ações acionam a execução do script de desligamento. Esse script é executado como parte das seguintes ações:
- Quando uma instância é desligada devido a uma solicitação
instances.delete
ouinstances.stop
à API. - Quando o Compute Engine interrompe uma instância preemptiva como parte do processo preemptivo.
- Quando uma instância é desligada devido a uma solicitação ao sistema convidado, como
sudo shutdown
ousudo reboot
. - Ao desligar uma instância manualmente usando o console do Google Cloud ou a ferramenta
gcloud compute
.
O script de desligamento não será executado se a instância for redefinida usando instances().reset
.
Um script de desligamento pode ser de qualquer tipo de arquivo. Quando há um script de desligamento, o Compute Engine:
- copia o script para um arquivo local na instância;
- define as permissões no arquivo para torná-lo executável;
- executa o arquivo quando a instância é interrompida.
Por exemplo, é possível fornecer um script Python em vez de um script bash. Lembre-se de que o Compute Engine executa o script na íntegra, independentemente do tipo.
Para executar um script que não é bash, adicione uma linha shebang na parte superior do arquivo para permitir que o sistema operacional saiba qual intérprete usar. Por exemplo, para um script Python, adicione uma linha shebang como:
#!/usr/bin/python
Tempo de execução do script de desligamento
Antes de uma instância ser encerrada ou reiniciada, a execução do script de desligamento precisa ocorrer dentro um período de tempo limitado. Durante esse período, o Compute Engine
tenta executar o script de desligamento. Se a conclusão do script demorar
mais do que o período limitado, a instância será interrompida automaticamente e todas
as tarefas em execução serão encerradas. Se você desligar ou reiniciar uma instância fazendo uma solicitação ao sistema operacional convidado com o comando sudo shutdown
, o limite não será aplicado.
A duração do período de desligamento é diferente, dependendo do tipo de instância. Instâncias preemptivas têm um período de desligamento mais curto do que instâncias normais. Para mais informações sobre os limites de tempo de desligamento em cada tipo de instância, consulte Período de desligamento.
Em geral, é necessário que a conclusão da execução do script de desligamento ocorra dentro do período de desligamento para que o sistema operacional tenha tempo de concluir o processo de desligamento e liberar buffers para o disco.
Usar um script de desligamento local
Um script de desligamento local é um script que reside no computador local. Transfira um script de desligamento local como um arquivo ou fornecendo o conteúdo diretamente ao Compute Engine.
Scripts de desligamento podem executar quantas ações forem necessárias. No entanto, se você estiver transferindo o arquivo localmente, o script não poderá exceder o limite de 256 KB. Para usar um script que exceda o limite de tamanho, armazene o arquivo no Cloud Storage. Consulte Usar um script de desligamento do Cloud Storage para mais informações.
Fornecer um arquivo de script de desligamento
Um arquivo de script de desligamento local só pode ser transferido por meio da ferramenta de linha de comando gcloud
.
gcloud
Para transferir um arquivo de script de desligamento local, use a sinalização --metadata-from-file
seguida por um par de chaves de metadados, shutdown-script=PATH/TO/FILE
, em que PATH/TO/FILE
é um caminho relativo para o script de desligamento. 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.
Fornecer conteúdo do script desligamento diretamente
Como alternativa, transfira diretamente o conteúdo do script de desligamento.
Console
No console do Google Cloud, especifique um script de desligamento diretamente usando a chave de metadados shutdown-script
:
Acesse a página Criar uma instância.
Especifique os detalhes da VM.
Expanda a seção Opções avançadas.
Expanda Gerenciamento e faça o seguinte:
- Na seção Metadados, clique em Adicionar item.
- No campo Chave, insira
shutdown-script
para a chave de metadados. - No campo Valor, adicione o conteúdo do script de desligamento.
Continue com o processo de criação da VM.
gcloud
Com a CLI do Google Cloud, use a sinalização --metadata
para inserir
o conteúdo do script de desligamento, seguido pelo par de chaves shutdown-script=CONTENTS
, em que CONTENTS
é o conteúdo do script de desligamento.
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.
REST
Na API, quando você criar uma instância, forneça um script de desligamento como parte da propriedade de metadados em sua solicitação. Use shutdown-script
como 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"
}
]
}...
}
Inserir um script de desligamento em instâncias do Windows
Execute scripts de desligamento em instâncias do Windows usando as seguintes chaves de metadados específicas do Windows. Escolha entre as chaves especializadas listadas abaixo. Cada chave deve corresponder ao tipo de script que você quer executar.
É possível especificar vários scripts de desligamento passando chaves diferentes para a instância, mas cada chave só pode ser definida uma vez por máquina virtual.
As chaves a seguir podem ser utilizadas com um script de desligamento local, seguindo as mesmas instruções acima.
Scripts de desligamento cmd |
Scripts de desligamento bat |
Scripts de desligamento ps1 |
---|---|---|
windows-shutdown-script-cmd |
windows-shutdown-script-bat |
windows-shutdown-script-ps1 |
Usar um script de desligamento do Cloud Storage
É possível armazenar e usar um script de desligamento do Cloud Storage. Siga as instruções da documentação Scripts de inicialização, mas substitua startup-script-url
por shutdown-script-url
.
Para instâncias do Windows, substitua windows-startup-script-url
por windows-shutdown-script-url
.
Aplicar um script de desligamento a instâncias em execução
Para adicionar um script de desligamento a uma instância em execução, siga as instruções da documentação Como aplicar um script de desligamento a instâncias em execução, mas substitua as chaves de metadados por uma das chaves a seguir:
shutdown-script
: use essa chave para inserir diretamente o conteúdo do script de desligamento. Com a CLI do Google Cloud, é possível inserir o caminho para um arquivo de script de desligamento usando a sinalização--metadata-from-file
e a chave de metadadosshutdown-script
.shutdown-script-url
: use essa chave para inserir um URL do Cloud Storage para o arquivo de script de desligamento.
Como visualizar a saída de um script de desligamento
Linux
É possível visualizar a saída em um script de desligamento do Linux seguindo um destes procedimentos:
Conectando-se à instância e executando o comando a seguir:
sudo journalctl -u google-shutdown-scripts.service
Como visualizar a saída pela porta serial 1 no console do Google Cloud e verificar se há eventos
google_metadata_script_runner
.IAP Desktop em uma estação de trabalho do Windows. Para mais informações, consulte o repositório GoogleCloudPlatform/iap-desktop no GitHub.
Windows
Visualize a saída de um script de desligamento do Windows Server usando qualquer um dos
seguintes itens e verificando eventos GCEMetadataScripts
:
Porta serial 1 no Console do Google Cloud. Para mais informações, consulte Como visualizar a saída da porta serial.
Registro do aplicativo do Visualizador de eventos do Windows.
IAP Desktop em uma estação de trabalho do Windows. Para mais informações, consulte o repositório GoogleCloudPlatform/iap-desktop no GitHub.