Um script de inicialização é um arquivo que executa tarefas durante o processo de inicialização de uma instância de máquina virtual (VM). Os scripts de inicialização podem ser aplicados a todas as VMs de um projeto ou a uma única VM. Os scripts de inicialização especificados pelos metadados no nível da VM substituem os scripts de inicialização especificados pelos metadados no nível do projeto, e os scripts de inicialização só são executados quando uma rede está disponível. Este documento descreve como usar scripts de inicialização em instâncias de VM do Linux. Para obter informações sobre como adicionar um script de inicialização no nível do projeto, consulte gcloud compute project-info add-metadata
.
Para scripts de inicialização do Linux, você pode usar um arquivo bash ou não bash. Para usar um arquivo não-bash, designe o intérprete adicionando um #!
para o topo do arquivo. Por exemplo, para usar um script de inicialização do Python 3, adicione #! /usr/bin/python3
no topo do arquivo.
Se você especificar um script de inicialização usando um dos procedimentos deste documento, o Compute Engine fará o seguinte:
Copia o script de inicialização para a VM
Define permissões de execução no script de inicialização
Executa o script de inicialização como usuário
root
quando a VM é inicializada
Para obter informações sobre as diversas tarefas relacionadas aos scripts de inicialização e quando executar cada uma delas, consulte Visão Geral .
Antes de começar
- Leia a visão geral dos scripts de inicialização .
- Leia sobre o servidor de metadados .
- Se ainda não o fez, configure a autenticação. Autenticação é o processo pelo qual sua identidade é verificada para acesso a Google Cloud serviços e APIs. Para executar códigos ou amostras em um ambiente de desenvolvimento local, você pode se autenticar 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 Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.
gcloud
-
After installing the Google Cloud CLI, initialize it by running the following command:
gcloud init
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
- Set a default region and zone.
No console do Google Cloud, acesse a página Criar uma instância .
Para usar um sistema operacional Linux, faça o seguinte:
No menu de navegação, clique em SO e armazenamento .
Clique em Alterar .
No painel Disco de inicialização exibido, selecione um sistema operacional Linux.
Para adicionar diretamente um script de inicialização do Linux, faça o seguinte:
No menu de navegação, clique em Avançado .
Na seção Automação , insira o seguinte no campo Script de inicialização :
#! /bin/bash apt update apt -y install apache2 cat <<EOF > /var/www/html/index.html <html><body><p>Linux startup script added directly.</p></body></html> EOF
Opcional: Especifique outras opções de configuração. Para obter mais informações, consulte Opções de configuração durante a criação da instância .
Para criar e iniciar a instância, clique em Criar .
No console do Google Cloud, acesse a página de instâncias de VM .
Clique no Nome da instância.
Clique em Editar .
Em Automation , adicione o conteúdo do seu script de inicialização.
VM_NAME : o nome da VM
ZONE : a zona da VM
PROJECT_ID : o ID do projeto
ZONE : a zona para criar a VM
Obtenha o valor
tags.fingerprint
da VM usando o métodoinstances.get
.GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME
Substitua o seguinte:
PROJECT_ID : o ID do projeto
ZONE : a zona da VM
VM_NAME : a zona da VM
Passe o script de inicialização usando o valor
fingerprint
, juntamente com a chave de metadados e o valor do script de inicialização, em uma chamada para o métodoinstances.setMetadata
:POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setMetadata { "fingerprint": FINGERPRINT, "items": [ { "key": "startup-script", "value": "#! /bin/bash\napt update\napt -y install apache2\ncat <<EOF > /var/www/html/index.html\n<html><body><p>Linux startup script added directly.</p></body></html>\nEOF" } ], ... }
Substitua o seguinte:
PROJECT_ID : o ID do projeto
ZONE : a zona da VM
VM_NAME : a zona da VM
FINGERPRINT : o valor
tags.fingerprint
obtido usando o métodoinstances.get
Crie um arquivo local para armazenar o script de inicialização.
Observe o caminho relativo da CLI gcloud para o script de inicialização.
Adicione o seguinte script de inicialização ao arquivo:
#! /bin/bash apt update apt -y install apache2 cat <<EOF > /var/www/html/index.html <html><body><p>Linux startup script from a local file.</p></body></html> EOF
VM_NAME : o nome da VM
FILE_PATH : o caminho relativo para o arquivo de script de inicialização
VM_NAME : o nome da VM
ZONE : a zona da VM
FILE_PATH : o caminho relativo para o arquivo de script de inicialização
Crie um arquivo para armazenar o script de inicialização. Este exemplo usa um arquivo bash (
.sh
).Adicione o seguinte ao arquivo bash, que instala o Apache e cria uma página da web simples:
#! /bin/bash apt update apt -y install apache2 cat <<EOF > /var/www/html/index.html <html><body><p>Linux startup script from Cloud Storage.</p></body></html> EOF
Por padrão, os proprietários e editores de projetos podem acessar arquivos do Cloud Storage no mesmo projeto, a menos que haja controles de acesso explícitos que não permitam isso.
Se o bucket ou objeto do Cloud Storage for menos seguro que os metadados, há risco de escalonamento de privilégios se o script de inicialização for modificado e a VM for reinicializada. Isso ocorre porque após a reinicialização da VM, o script de inicialização é executado como
root
e pode usar as permissões da conta de serviço anexada para acessar outros recursos.No console do Google Cloud, acesse a página Criar uma instância .
Para usar um sistema operacional Linux, faça o seguinte:
No menu de navegação, clique em SO e armazenamento .
Na seção Sistema operacional e armazenamento , clique em Alterar . Em seguida, selecione um sistema operacional Linux.
Para permitir que a instância acesse o bucket do Cloud Storage que contém o script de inicialização do Linux, faça o seguinte:
No menu de navegação, clique em Segurança .
Na lista Conta de serviço , selecione uma conta de serviço que tenha a função do IAM Visualizador de objetos de armazenamento (
roles/storage.objectViewer
) no bucket do Cloud Storage.
Para adicionar um script de inicialização do Linux especificando um arquivo no Cloud Storage, faça o seguinte:
No menu de navegação, clique em Avançado .
Na seção Metadados , clique em
Adicionar item . Os campos Chave e Valor aparecem.No campo Chave , insira
startup-script-url
.No campo Valor , insira o local do Cloud Storage do arquivo de script de inicialização usando um dos seguintes formatos:
- URL autenticado :
https://storage.googleapis.com/ BUCKET / FILE
URI de armazenamento gcloud :
gs:// BUCKET / FILE
Substitua o seguinte:
BUCKET : o nome do bucket que contém o arquivo de script de inicialização
FILE : o nome do arquivo de script de inicialização
- URL autenticado :
Opcional: Especifique outras opções de configuração. Para obter mais informações, consulte Opções de configuração durante a criação da instância .
Para criar e iniciar a instância, clique em Criar .
No console do Google Cloud, acesse a página de instâncias de VM .
Clique no Nome da instância.
Clique em Editar .
Em Metadados , adicione os seguintes valores:
Chave :
startup-script-url
Valor : o local do Cloud Storage do arquivo de script de inicialização usando um dos seguintes formatos:
- URL autenticado :
https://storage.googleapis.com/ BUCKET / FILE
- URI de armazenamento gcloud :
gs:// BUCKET / FILE
- URL autenticado :
VM_NAME : o nome da VM.
CLOUD_STORAGE_URL : o valor dos metadados. Defina o local do Cloud Storage do arquivo de script de inicialização usando um dos seguintes formatos:
- URL autenticado :
https://storage.googleapis.com/ BUCKET / FILE
- URI de armazenamento gcloud :
gs:// BUCKET / FILE
- URL autenticado :
VM_NAME : o nome da VM.
ZONE : a zona da VM.
CLOUD_STORAGE_URL : o valor dos metadados. Defina o local do Cloud Storage do arquivo de script de inicialização usando um dos seguintes formatos:
- URL autenticado :
https://storage.googleapis.com/ BUCKET / FILE
- URI de armazenamento gcloud :
gs:// BUCKET / FILE
- URL autenticado :
PROJECT_ID : o ID do projeto.
ZONE : a zona na qual criar a nova VM.
CLOUD_STORAGE_URL : o valor dos metadados. Defina o local do Cloud Storage do arquivo de script de inicialização usando um dos seguintes formatos:
- URL autenticado :
https://storage.googleapis.com/ BUCKET / FILE
- URI de armazenamento gcloud :
gs:// BUCKET / FILE
- URL autenticado :
Obtenha o valor
tags.fingerprint
da VM usando o métodoinstances.get
.GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME
Substitua o seguinte:
PROJECT_ID : o ID do projeto
ZONE : a zona da VM
VM_NAME : a zona da VM
Passe o script de inicialização usando o valor
fingerprint
, juntamente com a chave de metadados e o valor do script de inicialização, em uma chamada para o métodoinstances.setMetadata
:POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setMetadata { "fingerprint": FINGERPRINT, "items": [ { "key": "startup-script-url", "value": "CLOUD_STORAGE_URL" } ], ... }
Substitua o seguinte:
PROJECT_ID : o ID do projeto.
ZONE : a zona da VM.
VM_NAME : a zona da VM.
FINGERPRINT : o valor
tags.fingerprint
obtido usando o métodoinstances.get
.CLOUD_STORAGE_URL : o valor dos metadados. Defina o local do Cloud Storage do arquivo de script de inicialização usando um dos seguintes formatos:
- URL autenticado :
https://storage.googleapis.com/ BUCKET / FILE
- URI de armazenamento gcloud :
gs:// BUCKET / FILE
- URL autenticado :
Crie um script de inicialização que consulte o valor de uma chave de metadados. Por exemplo, o seguinte script de inicialização do arquivo bash (
.sh
) consulta o valor da chave de metadadosfoo
.#! /bin/bash METADATA_VALUE=$(curl http://metadata.google.internal/computeMetadata/v1/instance/attributes/foo -H "Metadata-Flavor: Google") apt update apt -y install apache2 cat <<EOF > /var/www/html/index.html <html><body><p>Accessing metadata value of foo: $METADATA_VALUE</p></body></html> EOF
Defina o valor da chave de metadados
foo
ao criar uma VM usando o comandogcloud compute instances create
a seguir. Neste exemplo, o script de inicialização é passado para a VM a partir de um arquivo local.gcloud
gcloud compute instances create VM_NAME \ --image-project=debian-cloud \ --image-family=debian-10 \ --metadata-from-file=startup-script=FILE_PATH \ --metadata=foo=bar
Substitua o seguinte:
VM_NAME : o nome da VM
FILE_PATH : o caminho relativo para o arquivo de script de inicialização
Para obter mais informações sobre como especificar um par chave/valor de metadados, consulte Configurando metadados personalizados .
Na estação de trabalho local, visualize o IP externo em um navegador da web para verificar se o script de inicialização gera o valor de
foo
. Talvez seja necessário aguardar cerca de 1 minuto para que o script de inicialização de amostra seja concluído.Executando o seguinte comando:
sudo google_metadata_script_runner startup
Conectando-se à instância e executando o seguinte comando:
sudo journalctl -u google-startup-scripts.service
Visualização da saída por meio da porta serial 1 no console do Google Cloud e verificação de eventos
google_metadata_script_runner
.Saiba como usar scripts de inicialização em VMs do Windows .
Saiba como solucionar problemas de scripts de inicialização .
Aprenda como adicionar um script de desligamento .
Saiba mais sobre como armazenar e recuperar metadados .
REST
Para usar as amostras da API REST nesta página em um ambiente de desenvolvimento local, use as credenciais fornecidas para gcloud CLI.
After installing the Google Cloud CLI, initialize it by running the following command:
gcloud init
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
Para mais informações, consulte Autenticar para usar REST na documentação de autenticação do Google Cloud.
Chaves de metadados para scripts de inicialização do Linux
Um script de inicialização é passado para uma VM a partir de um local especificado por uma chave de metadados. Uma chave de metadados especifica se o script de inicialização é armazenado localmente, no Cloud Storage ou transmitido diretamente para a VM. A chave de metadados usada também pode depender do tamanho do script de inicialização.
A tabela a seguir mostra as chaves de metadados que você pode usar para scripts de inicialização do Linux e fornece informações sobre qual chave usar com base no local de armazenamento e no tamanho do script de inicialização.
Chave de metadados Usar para startup-script
Passando um script de inicialização bash ou não bash que é armazenado localmente ou adicionado diretamente e que tem até 256 KB de tamanho startup-script-url
Transmitir um script de inicialização bash ou não bash armazenado no Cloud Storage e com tamanho superior a 256 KB. A string inserida aqui é usada como está para executar gcloud storage
. Se o seustartup-script-url
contiver caracteres de espaço, não substitua os espaços por%20
nem adicione aspas duplas (""
) à stringstartup-script-url
.Ordem de execução dos scripts de inicialização do Linux
Você pode usar vários scripts de inicialização. Os scripts de inicialização armazenados localmente ou adicionados diretamente são executados antes dos scripts de inicialização armazenados no Cloud Storage. A tabela a seguir mostra, com base na chave de metadados, a ordem de execução dos scripts de inicialização do Linux.
Chave de metadados Ordem de execução startup-script
Primeiro durante cada inicialização após a inicialização inicial startup-script-url
Segundo durante cada inicialização após a inicialização inicial Passando um script de inicialização do Linux diretamente
Você pode adicionar o conteúdo de um script de inicialização diretamente a uma VM ao criar a VM. Os procedimentos a seguir mostram como criar uma VM com um script de inicialização que instala o Apache e cria uma página web básica.
Console
Passando um script de inicialização do Linux diretamente para uma nova VM
Passando um script de inicialização do Linux diretamente para uma VM existente
Verificando o script de inicialização
Depois que a instância for iniciada, visualize o IP externo em um navegador da Web para verificar se o script de inicialização criou o site. Talvez seja necessário aguardar cerca de 1 minuto para que o script de inicialização de amostra seja concluído.
gcloud
Passando um script de inicialização do Linux diretamente para uma nova VM
Transmita o conteúdo de um script de inicialização diretamente para uma VM ao criá-la usando o comando
gcloud compute instances create
a seguir.gcloud compute instances create VM_NAME \ --image-project=debian-cloud \ --image-family=debian-10 \ --metadata=startup-script='#! /bin/bash apt update apt -y install apache2 cat <<EOF > /var/www/html/index.html <html><body><p>Linux startup script added directly.</p></body></html> EOF'
Substitua VM_NAME pelo nome da VM.
Passando um script de inicialização do Linux diretamente para uma VM existente
Adicione o script de inicialização diretamente a uma VM existente usando o seguinte comando
gcloud compute instances add-metadata
:gcloud compute instances add-metadata VM_NAME \ --zone=ZONE \ --metadata=startup-script='#! /bin/bash apt update apt -y install apache2 cat <<EOF > /var/www/html/index.html <html><body><p>Linux startup script added directly.</p></body></html> EOF'
Substitua o seguinte:
Verificando o script de inicialização
Depois que a VM for iniciada, visualize o IP externo em um navegador da Web para verificar se o script de inicialização criou o site. Talvez seja necessário aguardar cerca de 1 minuto para que o script de inicialização de amostra seja concluído.
DESCANSAR
Passando um script de inicialização do Linux diretamente para uma nova VM
Passe o conteúdo de um script de inicialização diretamente para uma VM ao criá-la usando o método
instances.insert
a seguir.POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances { ... "networkInterfaces": [ { "accessConfigs": [ { "type": "ONE_TO_ONE_NAT" } ] } ], "metadata": { "items": [ { "key": "startup-script", "value": "#! /bin/bash\napt update\napt -y install apache2\ncat <<EOF > /var/www/html/index.html\n<html><body><p>Linux startup script added directly.</p></body></html>\nEOF" } ] }, ... }
Substitua o seguinte:
Passando um script de inicialização do Linux diretamente para uma VM existente
Verificando o script de inicialização
Depois que a VM for iniciada, visualize o IP externo em um navegador da Web para verificar se o script de inicialização criou o site. Talvez seja necessário aguardar cerca de 1 minuto para que o script de inicialização de amostra seja concluído.
Passando um script de inicialização do Linux a partir de um arquivo local
Você pode armazenar um script de inicialização em um arquivo local em sua estação de trabalho e passar o arquivo local como metadados para uma VM ao criá-lo. Você não pode usar arquivos armazenados em VMs como scripts de inicialização.
Antes de passar um script de inicialização do Linux de um arquivo local para uma VM, faça o seguinte:
gcloud
Passando um script de inicialização do Linux de um arquivo local para uma nova VM
Crie uma VM e transmita o conteúdo de um arquivo local para ser usado como script de inicialização usando o comando
gcloud compute instances create
com a sinalização--metadata-from-file
.gcloud compute instances create VM_NAME \ --image-project=debian-cloud \ --image-family=debian-10 \ --metadata-from-file=startup-script=FILE_PATH
Substitua o seguinte:
Passando um script de inicialização do Linux de um arquivo local para uma VM existente
Transmita um script de inicialização para uma VM existente a partir de um arquivo local usando o seguinte comando
gcloud compute instances add-metadata
:gcloud compute instances add-metadata VM_NAME \ --zone=ZONE \ --metadata-from-file startup-script=FILE_PATH
Substitua o seguinte:
Verificando o script de inicialização
Visualize o IP externo em um navegador da web para verificar se o script de inicialização criou o site. Talvez seja necessário aguardar cerca de 1 minuto para que o script de inicialização de amostra seja concluído.
Passando um script de inicialização do Linux do Cloud Storage
Você pode armazenar um script de inicialização no Cloud Storage e passá-lo para uma VM ao criá-lo. Depois de adicionar um script de inicialização ao Cloud Storage, você terá um URL que poderá usar para fazer referência ao script de inicialização ao criar uma VM.
Antes de adicionar um script de inicialização de um bucket do Cloud Storage, faça o seguinte:
Implicações de segurança
Limitações
Console
Transmitir um script de inicialização armazenado no Cloud Storage para uma nova VM
Transmitir um script de inicialização armazenado no Cloud Storage para uma VM existente
Verificando o script de inicialização
Visualize o IP externo em um navegador da web para verificar se o script de inicialização criou o site. Talvez seja necessário aguardar cerca de 1 minuto para que o script de inicialização de amostra seja concluído.
gcloud
Transmitir um script de inicialização armazenado no Cloud Storage para uma nova VM
Transmita um script de inicialização armazenado no Cloud Storage para uma VM ao criá-la usando o comando
gcloud compute instances create
a seguir. Para o valor da sinalização--scope
, usestorage-ro
para que a VM possa acessar o Cloud Storage.gcloud compute instances create VM_NAME \ --image-project=debian-cloud \ --image-family=debian-10 \ --scopes=storage-ro \ --metadata=startup-script-url=CLOUD_STORAGE_URL
Substitua o seguinte:
Transmitir um script de inicialização armazenado no Cloud Storage para uma VM existente
Transmita um script de inicialização armazenado no Cloud Storage para uma VM existente usando o seguinte comando
gcloud compute instances add-metadata
:gcloud compute instances add-metadata VM_NAME \ --zone=ZONE \ --metadata startup-script-url=CLOUD_STORAGE_URL
Substitua o seguinte:
Verificando o script de inicialização
Visualize o IP externo em um navegador da web para verificar se o script de inicialização criou o site. Talvez seja necessário aguardar cerca de 1 minuto para que o script de inicialização de amostra seja concluído.
DESCANSAR
Transmitir um script de inicialização armazenado no Cloud Storage para uma nova VM
Transmita um script de inicialização armazenado no Cloud Storage para uma VM ao criá-la usando o método
instances.insert
a seguir. Ao camposcopes
, adicionehttps://www.googleapis.com/auth/devstorage.read_only
para que a VM possa acessar o Cloud Storage.POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances { ... "networkInterfaces": [ { "accessConfigs": [ { "type": "ONE_TO_ONE_NAT" } ] } ], "serviceAccounts": [ { "email": "default", "scopes": [ "https://www.googleapis.com/auth/devstorage.read_only" ] } ], "metadata": { "items": [ { "key": "startup-script-url", "value": "CLOUD_STORAGE_URL" } ] }, ... }
Substitua o seguinte:
Transmitir um script de inicialização armazenado no Cloud Storage para uma VM existente
Verificando o script de inicialização
Visualize o IP externo em um navegador da web para verificar se o script de inicialização criou o site. Talvez seja necessário aguardar cerca de 1 minuto para que o script de inicialização de amostra seja concluído.
Acessando metadados de um script de inicialização do Linux
Em um script de inicialização você pode acessar valores de metadados. Por exemplo, você pode usar o mesmo script para várias VMs e parametrizar cada script individualmente, passando diferentes valores de metadados para cada VM.
Para acessar um valor de metadados personalizado de um script de inicialização, faça o seguinte:
Executando novamente um script de inicialização do Linux
Execute novamente um script de inicialização fazendo o seguinte:
Visualizando a saída de um script de inicialização do Linux
Você pode visualizar a saída de um script de inicialização do Linux seguindo um destes procedimentos:
O que vem a seguir
Exceto em caso de indicação contrária, o conteúdo desta página é licenciado de acordo com a Licença de atribuição 4.0 do Creative Commons, e as amostras de código são licenciadas de acordo com a Licença Apache 2.0. Para mais detalhes, consulte as políticas do site do Google Developers. Java é uma marca registrada da Oracle e/ou afiliadas.
Última atualização 2025-04-21 UTC.
-