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, na sigla em inglês). Os scripts de inicialização podem ser aplicados a todas as VMs em um projeto
ou a uma única VM. Os scripts de inicialização especificados pelos metadados da VM modificam
os scripts de inicialização especificados pelos metadados do projeto, e os scripts de inicialização
são executados apenas quando uma rede está disponível. Neste documento, descrevemos como usar scripts
de inicialização em instâncias de VM do Linux. Saiba mais sobre como adicionar um
script de inicialização no nível do projeto em 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 #!
à parte superior do arquivo. Por
exemplo, para usar um script de inicialização do Python 3, adicione #! /usr/bin/python3
na parte superior
do arquivo.
Se você especificar um script de inicialização usando um dos procedimentos neste documento, o Compute Engine:
Copiará o script de inicialização na VM
Definirá as permissões de execução no script de inicialização
Executará o script de inicialização como o usuário
root
quando a VM for inicializada
Para informações sobre as várias tarefas relacionadas a scripts de inicialização e quando executar cada um, consulte a Visão geral.
Antes de começar
- Leia a visão geral dos scripts de inicialização.
- Leia sobre 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.
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
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- Set a default region and zone.
No Console do Google Cloud, acesse a página Criar uma instância.
Em Disco de inicialização, selecione Alterar e escolha um sistema operacional Linux.
Expanda a seção Opções avançadas e faça isto:
- Expanda a seção Gerenciamento.
Na seção Automação, adicione o seguinte 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
Clique em Criar.
No console do Google Cloud, acesse a página Instâncias de VMs.
Clique no Nome da VM.
Clique em Editar.
Em Automação, adicione o conteúdo do script de inicialização.
VM_NAME: o nome da VM
ZONE: a zona da VM
PROJECT_ID: o ID do projeto
ZONE: a zona em que a VM será criada
Receba 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:
PROJECT_ID: o ID do projeto
ZONE: a zona da VM
VM_NAME: a zona da VM
Transmita o script de inicialização usando o valor
fingerprint
com a chave e o valor de metadados 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:
PROJECT_ID: o ID do projeto
ZONE: a zona da VM
VM_NAME: a zona da VM
FINGERPRINT: o valor
tags.fingerprint
recebido 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 comando 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 impeçam esse acesso.
Se o bucket ou objeto do Cloud Storage for menos seguro que os metadados, haverá 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.- O Container-Optimized OS tem compatibilidade limitada ou não é compatível com alguns recursos,
como a ferramenta
gsutil
. No Console do Google Cloud, acesse a página Criar uma instância.
Especifique os detalhes da VM.
Em Disco de inicialização, selecione Alterar e escolha um sistema operacional Linux.
Na seção Identidade e acesso à API, selecione uma conta de serviço que tenha o papel Leitor de objetos do Storage (
roles/storage.objectViewer
).Expanda a seção Opções avançadas e depois faça o seguinte:
- Expanda a seção Gerenciamento.
Na seção Metadados, adicione valores para:
Chave: a chave de metadados. Defina como
startup-script-url
para adicionar um script de inicialização pelo Cloud Storage.Valor: o valor dos metadados. Defina como 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 da gsutil:
gs://BUCKET/FILE
Substitua:
- 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:
Para criar a VM, clique em Criar.
No Console do Google Cloud, acesse a página Instâncias de VMs.
Clique no Nome da VM.
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 formatos a seguir:
- URL autenticado:
https://storage.googleapis.com/BUCKET/FILE
- URI da gsutil:
gs://BUCKET/FILE
- URL autenticado:
VM_NAME: o nome da VM.
CLOUD_STORAGE_URL: o valor dos metadados. Defina como 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 da gsutil:
gs://BUCKET/FILE
- URL autenticado:
VM_NAME: o nome da VM.
ZONE: a zona da VM.
CLOUD_STORAGE_URL: o valor dos metadados. Defina como 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 da gsutil:
gs://BUCKET/FILE
- URL autenticado:
PROJECT_ID: o ID do projeto;
ZONE: a zona em que a nova VM será criada.
CLOUD_STORAGE_URL: o valor dos metadados. Defina como 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 da gsutil:
gs://BUCKET/FILE
- URL autenticado:
Receba 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:
PROJECT_ID: o ID do projeto
ZONE: a zona da VM
VM_NAME: a zona da VM
Transmita o script de inicialização usando o valor
fingerprint
com a chave e o valor de metadados 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:
PROJECT_ID: o ID do projeto;
ZONE: a zona da VM.
VM_NAME: a zona da VM.
FINGERPRINT: o valor
tags.fingerprint
recebido usando o métodoinstances.get
.CLOUD_STORAGE_URL: o valor dos metadados. Defina como 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 da gsutil:
gs://BUCKET/FILE
- URL autenticado:
Crie um script de inicialização que consulte o valor de uma chave de metadados. Por exemplo, o script de inicialização de arquivo bash (
.sh
) a seguir 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 seguinte comandogcloud compute instances create
. Neste exemplo, o script de inicialização é transmitido 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:
VM_NAME: o nome da VM
FILE_PATH: o caminho relativo para o arquivo de script de inicialização
Para mais informações sobre como especificar um par de chave-valor/chave de metadados, consulte Como configurar metadados personalizados.
Na estação de trabalho local, veja o IP externo em um navegador da Web para verificar se o script de inicialização gera o valor
foo
. Talvez seja necessário aguardar cerca de um 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 comando a seguir:
sudo journalctl -u google-startup-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
.Saiba como usar scripts de inicialização em VMs do Windows.
Saiba como resolver problemas de scripts de inicialização.
Saiba 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.
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
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 é transmitido 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 está armazenado localmente ou 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 podem ser usadas 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 Use para startup-script
Transmitir um script de inicialização bash ou não bash armazenado localmente ou adicionado diretamente de até 256 KB startup-script-url
Transmitir um script de inicialização bash ou não bash armazenado no Cloud Storage e que seja maior que 256 KB. A string inserida aqui é usada como está para executar gsutil
. Se astartup-script-url
tiver caracteres de espaço, não substitua os espaços por%20
nem adicione aspas duplas (""
) à stringstartup-script-url
.Ordem de execução de scripts de inicialização do Linux
É possível usar vários scripts de inicialização. Scripts de inicialização armazenados localmente ou adicionados diretamente são executados antes de 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 Como transmitir um script de inicialização do Linux diretamente
É possível adicionar o conteúdo de um script de inicialização diretamente a uma VM ao criá-la. Os procedimentos a seguir mostram como criar uma VM com um script de inicialização que instala o Apache e cria uma página da Web básica.
Console
Como transmitir um script de inicialização do Linux diretamente para uma nova VM
Como transmitir um script de inicialização do Linux diretamente para uma VM existente
Como verificar 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 um minuto para que o script de inicialização de amostra seja concluído.
gcloud
Como transmitir 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 seguinte comando
gcloud compute instances create
.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.
Como transmitir um script de inicialização do Linux diretamente para uma VM existente
Adicione o script de inicialização diretamente a uma VM atual 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:
Como verificar 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 um minuto para que o script de inicialização de amostra seja concluído.
REST
Como transmitir 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 seguinte método
instances.insert
.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:
Como transmitir um script de inicialização do Linux diretamente para uma VM existente
Como verificar 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 um minuto para que o script de inicialização de amostra seja concluído.
Como transmitir um script de inicialização do Linux de um arquivo local
É possível armazenar um script de inicialização em um arquivo local na estação de trabalho e transmitir o arquivo local como metadados para uma VM ao criá-la. Não é possível usar arquivos armazenados em VMs como scripts de inicialização.
Antes de transmitir um script de inicialização do Linux de um arquivo local para uma VM, faça o seguinte:
gcloud
Como transmitir 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 a ser usado como o script de inicialização utilizando 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:
Como transmitir um script de inicialização do Linux de um arquivo local para uma VM atual
Transmita um script de inicialização para uma VM atual 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:
Como verificar 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 um minuto para que o script de inicialização de amostra seja concluído.
Como transmitir um script de inicialização do Linux do Cloud Storage
É possível armazenar um script de inicialização no Cloud Storage e transmiti-lo para uma VM ao criá-la. Depois de adicionar um script de inicialização ao Cloud Storage, você tem um URL que pode ser utilizado para fazer referência ao script de inicialização ao criar uma VM.
Antes de adicionar um script de inicialização a partir de um bucket do Cloud Storage, faça o seguinte:
Implicações de segurança
Limitações
Console
Como transmitir um script de inicialização armazenado no Cloud Storage para uma nova VM
Como transmitir um script de inicialização armazenado no Cloud Storage para uma VM atual
Como verificar 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 um minuto para que o script de inicialização de amostra seja concluído.
gcloud
Como 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 seguinte comando
gcloud compute instances create
. 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:
Como transmitir um script de inicialização armazenado no Cloud Storage para uma VM atual
Transmita um script de inicialização armazenado no Cloud Storage para uma VM atual 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:
Como verificar 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 um minuto para que o script de inicialização de amostra seja concluído.
REST
Como 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 seguinte método
instances.insert
. No 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:
Como transmitir um script de inicialização armazenado no Cloud Storage para uma VM atual
Como verificar 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 um minuto para que o script de inicialização de amostra seja concluído.
Como acessar metadados de um script de inicialização do Linux
Em um script de inicialização, é possível acessar valores de metadados. Por exemplo, é possível usar o mesmo script para várias VMs e parametrizar cada script individualmente transmitindo valores de metadados diferentes para cada VM.
Para acessar um valor de metadados personalizado em um script de inicialização, faça o seguinte:
Como executar um script de inicialização do Linux novamente
Execute novamente um script de inicialização:
Como visualizar a saída de um script de inicialização do Linux
É possível visualizar a saída em um script de inicialização do Linux seguindo um destes procedimentos:
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 2024-09-24 UTC.
-