Como usar scripts de inicialização em VMs do Windows


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 Windows Server. Saiba mais sobre como adicionar um script de inicialização no nível do projeto em gcloud compute project-info add-metadata.

Os scripts de inicialização do Windows precisam ser shell de comando (.cmd), PowerShell (.ps1) ou scripts de arquivos em lote (.bat) e ter a extensão de arquivo apropriada.

Se você especificar um script de inicialização usando um dos procedimentos neste documento, o Compute Engine:

  1. Copiará o script de inicialização na VM

  2. Executará o script de inicialização como a conta LocalSystem 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

Chaves de metadados para scripts de inicialização do Windows

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 ou do tipo de arquivo do script de inicialização.

A tabela a seguir mostra as chaves de metadados que podem ser usadas para os scripts de inicialização do Windows, além de informações sobre qual chave usar com base no local de armazenamento, no tamanho e no tipo de arquivo do script de inicialização.

Chave de metadados Use para
sysprep-specialize-script-ps1 Transmitir um script não assinado do PowerShell armazenado localmente ou adicionado diretamente de até 256 KB
sysprep-specialize-script-cmd Transmitir um script de shell de comando armazenado localmente ou adicionado diretamente de até 256 KB
sysprep-specialize-script-bat Transmitir um script de arquivo em lote armazenado localmente ou adicionado diretamente de 256 KB
sysprep-specialize-script-url Transmitir um arquivo de lote, shell de comando, script do PowerShell assinado ou não assinado armazenado no Cloud Storage e que tenha mais de 256 KB
windows-startup-script-ps1 Transmitir um script não assinado do PowerShell armazenado localmente ou adicionado diretamente de até 256 KB
windows-startup-script-cmd Transmitir um script de shell de comando armazenado localmente ou adicionado diretamente de até 256 KB
windows-startup-script-bat Transmitir um script de arquivo em lote armazenado localmente ou adicionado diretamente de 256 KB
windows-startup-script-url Transmitir um arquivo de lote, shell de comando, script do PowerShell assinado ou não assinado armazenado no Cloud Storage e que tenha mais de 256 KB

Para mais informações sobre a ordem de execução dos vários tipos de scripts de inicialização, consulte o repositório GoogleCloudPlatform/compute-image-windows no GitHub.

Ordem de execução de scripts de inicialização do Windows

É 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. O tipo de arquivo que contém o script também afeta a ordem de execução. A tabela a seguir mostra, com base na chave de metadados, a ordem de execução dos scripts de inicialização do Windows.

Chave de metadados Ordem de execução
sysprep-specialize-script-ps1 Primeiro durante a primeira inicialização
sysprep-specialize-script-cmd Segundo durante a primeira inicialização
sysprep-specialize-script-bat Terceiro durante a inicialização inicial
sysprep-specialize-script-url Quarto durante a inicialização inicial
windows-startup-script-ps1 Primeiro durante cada inicialização após a inicialização inicial
windows-startup-script-cmd Segundo durante cada inicialização após a inicialização inicial
windows-startup-script-bat Terceiro durante cada inicialização após a inicialização inicial
windows-startup-script-url Quarto durante cada inicialização após a inicialização inicial

Como transmitir um script de inicialização do Windows diretamente

Transmita o conteúdo de um arquivo em lote, um shell de comando ou um script de inicialização do PowerShell não assinado diretamente para uma VM do Windows Server. Os procedimentos a seguir mostram como transmitir um script do PowerShell não assinado.

Console

Como transmitir um script de inicialização do Windows diretamente para uma nova VM

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

    Acesse "Criar uma instância"

  2. Em Disco de inicialização, selecione Alterar e faça o seguinte:

    1. Na guia Imagens públicas, escolha um sistema operacional Windows Server.
    2. Clique em Selecionar.
  3. Expanda a seção Rede, discos, segurança, gerenciamento, locatário único e faça o seguinte:

    1. Expanda a seção Gerenciamento.
    2. Na seção Metadados, clique em Adicionar item para definir a Chave e o Valor:

      • Chave: defina como windows-startup-script-ps1.

        Scripts de inicialização transmitidos à VM usando chaves de metadados que começam com windows-startup-script são executados em cada inicialização após a inicialização inicial da VM.

      • Valor: adicione o seguinte script:

        # Installing IIS
        Import-Module servermanager
        Install-WindowsFeature Web-Server -IncludeAllSubFeature
        
        # Ensure the directory exists
        if (-not (Test-Path("C:\inetpub\wwwroot"))) {New-Item "C:\inetpub\wwwroot" -Type Directory}
        
        # Write the expanded string out to the file, overwriting the file if it already exists.
        "<html><body><p>Windows startup script added directly.</p></body></html>" | Out-File -FilePath C:\inetpub\wwwroot\index.html -Encoding ascii -  Force
        
  4. Clique em Criar.

Como transmitir um script de inicialização do Windows diretamente para uma VM atual

  1. Clique em Editar.

  2. Em Metadados personalizados, especifique o seguinte:

    • key: windows-startup-script-ps1
    • value: o conteúdo do script de inicialização

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 10 minutos para que o script de inicialização de amostra seja concluído.

gcloud (Bash)

Como transmitir um script de inicialização do Windows diretamente para uma nova VM

Transmita o conteúdo de um script de inicialização diretamente para uma VM do Windows Server ao criá-la usando o seguinte comando gcloud compute instances create:

gcloud compute instances create VM_NAME \
  --image-project=windows-cloud \
  --image-family=windows-2019-core \
  --metadata=windows-startup-script-ps1='Import-Module servermanager
  Install-WindowsFeature Web-Server -IncludeAllSubFeature
  "<html><body><p>Windows startup script added directly.</p></body></html>" > C:\inetpub\wwwroot\index.html'

Substitua VM_NAME pelo nome da VM.

Como transmitir um script de inicialização do Windows diretamente para uma VM atual

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 \
  --image-project=windows-cloud \
  --image-family=windows-2019-core \
  --metadata=windows-startup-script-ps1='Import-Module servermanager
  Install-WindowsFeature Web-Server -IncludeAllSubFeature
  "<html><body><p>Windows startup script added directly.</p></body></html>" > C:\inetpub\wwwroot\index.html'

Substitua VM_NAME pelo nome da VM.

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 10 minutos para que o script de inicialização de amostra seja concluído.

gcloud (Prompt de comando)

Como transmitir um script de inicialização do Windows diretamente para uma nova VM

Transmita o conteúdo de um script de inicialização diretamente para uma VM do Windows Server ao criá-la usando o seguinte comando gcloud compute instances create:

gcloud compute instances create VM_NAME ^
  --image-project=windows-cloud ^
  --image-family=windows-2019-core ^
  --metadata=windows-startup-script-ps1='Import-Module servermanager
  Install-WindowsFeature Web-Server -IncludeAllSubFeature
  "<html><body><p>Windows startup script added directly.</p></body></html>" > C:\inetpub\wwwroot\index.html'

Substitua VM_NAME pelo nome da VM.

Como transmitir um script de inicialização do Windows diretamente para uma VM atual

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 ^
  --image-project=windows-cloud ^
  --image-family=windows-2019-core ^
  --metadata=windows-startup-script-ps1='Import-Module servermanager
  Install-WindowsFeature Web-Server -IncludeAllSubFeature
  "<html><body><p>Windows startup script added directly.</p></body></html>" > C:\inetpub\wwwroot\index.html'

Substitua VM_NAME pelo nome da VM.

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 10 minutos para que o script de inicialização de amostra seja concluído.

gcloud (PowerShell)

Como transmitir um script de inicialização do Windows diretamente para uma nova VM

Transmita o conteúdo de um script de inicialização diretamente para uma VM do Windows Server ao criá-la usando o seguinte comando gcloud compute instances create:

gcloud compute instances create VM_NAME `
  --image-project=windows-cloud `
  --image-family=windows-2019-core `
  --metadata=windows-startup-script-ps1='Import-Module servermanager
  Install-WindowsFeature Web-Server -IncludeAllSubFeature
  "<html><body><p>Windows startup script added directly.</p></body></html>" > C:\inetpub\wwwroot\index.html'

Substitua VM_NAME pelo nome da VM.

Como transmitir um script de inicialização do Windows diretamente para uma VM atual

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 `
  --image-project=windows-cloud `
  --image-family=windows-2019-core `
  --metadata=windows-startup-script-ps1='Import-Module servermanager
  Install-WindowsFeature Web-Server -IncludeAllSubFeature
  "<html><body><p>Windows startup script added directly.</p></body></html>" > C:\inetpub\wwwroot\index.html'

Substitua VM_NAME pelo nome da VM.

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 10 minutos para que o script de inicialização de amostra seja concluído.

API

Como transmitir um script de inicialização do Windows diretamente para uma nova VM

Transmita o conteúdo de um script de inicialização diretamente para uma VM do Windows Server 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": "windows-startup-script-ps1",
        "value": "Import-Module servermanager\nInstall-WindowsFeature Web-Server -IncludeAllSubFeature\necho '<html><body><p>Windows startup script added directly.</p></body></html>' > C:\\inetpub\\wwwroot\\index.html"
      }
    ]
  },
  ...
}

Substitua:

  • PROJECT_ID: o ID do projeto;

  • ZONE: zona em que a VM será criada

Como transmitir um script de inicialização do Windows diretamente para uma VM atual

  1. Receba o valor tags.fingerprint da VM usando o método instances.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;

  2. 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étodo instances.setMetadata:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setMetadata
    
    {
      "fingerprint": FINGERPRINT,
      "items": [
        {
          "key": "windows-startup-script-ps1",
          "value": "Import-Module servermanager\nInstall-WindowsFeature Web-Server -IncludeAllSubFeature\necho '<html><body><p>Windows startup script added directly.</p></body></html>' > C:\\inetpub\\wwwroot\\index.html"
        }
      ],
      ...
    }
    

    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étodo instances.get

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 10 minutos para que o script de inicialização de amostra seja concluído.

Como transmitir um script de inicialização do Windows de um arquivo local

É possível armazenar um script de inicialização em um arquivo de lote local, um script de shell de comando ou um script do PowerShell não assinado 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 Windows de um arquivo local para uma VM, faça o seguinte:

  1. Crie um arquivo local (.ps1) para armazenar o script de inicialização.

  2. Observe o caminho relativo da ferramenta gcloud para o script de inicialização.

  3. Adicione o seguinte script de inicialização ao arquivo:

    # Installing IIS
    Import-Module servermanager
    Install-WindowsFeature Web-Server -IncludeAllSubFeature
    
    # Ensure the directory exists
    if (-not (Test-Path("C:\inetpub\wwwroot"))) {New-Item "C:\inetpub\wwwroot" -Type Directory}
    
    # Write the expanded string out to the file, overwriting the file if it already exists.
    "<html><body><p>Windows startup script passed from a file on your local workstation.</p></body></html>" | Out-File -FilePath C:\inetpub\wwwroot\index.html -Encoding ascii -Force
    

gcloud (Bash)

Como transmitir um script de inicialização do Windows 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=windows-cloud \
  --image-family=windows-2019-core \
  --metadata-from-file=windows-startup-script-ps1=FILE_PATH

Substitua:

  • VM_NAME: O nome da VM.
  • FILE_PATH: o caminho relativo para o arquivo de script de inicialização
Como transmitir um script de inicialização do Windows 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 \
  --metadata-from-file=windows-startup-script-ps1=FILE_PATH

Substitua:

  • VM_NAME: O nome da VM.
  • FILE_PATH: o caminho relativo para o arquivo de script de inicialização
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 10 minutos para que o script de inicialização de amostra seja concluído.

gcloud (Prompt de comando)

Como transmitir um script de inicialização do Windows 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=windows-cloud ^
  --image-family=windows-2019-core ^
  --metadata-from-file=windows-startup-script-ps1=FILE_PATH

Substitua:

  • VM_NAME: O nome da VM.
  • FILE_PATH: o caminho relativo para o arquivo de script de inicialização
Como transmitir um script de inicialização do Windows 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 ^
  --metadata-from-file=windows-startup-script-ps1=FILE_PATH

Substitua:

  • VM_NAME: O nome da VM.
  • FILE_PATH: o caminho relativo para o arquivo de script de inicialização
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 10 minutos para que o script de inicialização de amostra seja concluído.

gcloud (PowerShell)

Como transmitir um script de inicialização do Windows 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=windows-cloud `
  --image-family=windows-2019-core `
  --metadata-from-file=windows-startup-script-ps1=FILE_PATH

Substitua:

  • VM_NAME: O nome da VM.
  • FILE_PATH: o caminho relativo para o arquivo de script de inicialização
Como transmitir um script de inicialização do Windows 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 `
  --metadata-from-file=windows-startup-script-ps1=FILE_PATH

Substitua:

  • VM_NAME: O nome da VM.
  • FILE_PATH: o caminho relativo para o arquivo de script de inicialização
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 10 minutos para que o script de inicialização de amostra seja concluído.

Como transmitir um script de inicialização do Windows do Cloud Storage

É possível armazenar um script de inicialização em um arquivo de lote local, um script de shell de comando ou um script do PowerShell não assinado no Cloud Storage e transmiti-lo a 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:

  1. Crie um arquivo para armazenar o script de inicialização. Neste exemplo, usamos um arquivo PowerShell (.ps1).

  2. Adicione o script do PowerShell a seguir ao arquivo, que instala um servidor da Web e cria uma página da Web simples:

    # Installing IIS
    Import-Module servermanager
    Install-WindowsFeature Web-Server -IncludeAllSubFeature
    
    # Ensure the directory exists
    if (-not (Test-Path("C:\inetpub\wwwroot"))) {New-Item "C:\inetpub\wwwroot" -Type Directory}
    
    # Write the expanded string out to the file, overwriting the file if it already exists.
    "<html><body><p>Windows startup script passed from Cloud Storage.</p></body></html>" | Out-File -FilePath C:\inetpub\wwwroot\index.html -Encoding ascii -Force
    
  3. Crie um bucket do Cloud Storage.

  4. Adicione o arquivo no bucket do Cloud Storage.

Implicações de segurança

  • 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 LocalSystem e pode usar as permissões da conta de serviço anexada para acessar outros recursos.

Console

Como transmitir um script de inicialização armazenado no Cloud Storage para uma nova VM

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

    Acesse "Criar uma instância"

  2. Em Disco de inicialização, selecione Alterar e faça o seguinte:

    1. Na guia Imagens públicas, escolha um sistema operacional Windows Server.
    2. Clique em Selecionar.
  3. Na seção Identidade e acesso à API, selecione uma conta de serviço que tenha o papel Visualizador de objetos do Storage.

  4. Expanda a seção Rede, discos, segurança, gerenciamento, locatário único e faça o seguinte:

    1. Expanda a seção Gerenciamento.
    2. Na seção Metadados, adicione valores para:

      • Chave: a chave de metadados. Especifique a chave de metadados windows-startup-script-url para que o script seja executado durante cada inicialização após a inicialização inicial.

      • 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
  5. Para criar a VM, clique em Criar.

Como transmitir um script de inicialização armazenado no Cloud Storage para uma VM atual

Edite a VM e, em Metadados personalizados, use os seguintes valores para os metadados:

  • Chave: windows-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

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 10 minutos para que o script de inicialização de amostra seja concluído.

gcloud (Bash)

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 do Windows Server usando o comando gcloud compute instances create a seguir. Para o valor da sinalização --scopes, use storage-ro para que a VM possa acessar o Cloud Storage.

gcloud compute instances create VM_NAME \
  --image-project=windows-cloud \
  --image-family=windows-2019-core \
  --scopes=storage-ro \
  --metadata=windows-startup-script-url=CLOUD_STORAGE_URL

Substitua:

  • VM_NAME: o nome da VM.
  • CLOUD_STORAGE_URL: os valores de metadados. Defina como o local 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
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 \
  --metadata=windows-startup-script-url=CLOUD_STORAGE_URL

Substitua:

  • VM_NAME: o nome da VM.
  • CLOUD_STORAGE_URL: os valores de metadados. Defina como o local 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
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 10 minutos para que o script de inicialização de amostra seja concluído.

gcloud (Prompt de comando)

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 do Windows Server usando o comando gcloud compute instances create a seguir. Para o valor da sinalização --scopes, use storage-ro para que a VM possa acessar o Cloud Storage.

gcloud compute instances create VM_NAME ^
  --image-project=windows-cloud ^
  --image-family=windows-2019-core ^
  --scopes=storage-ro \
  --metadata=windows-startup-script-url=CLOUD_STORAGE_URL

Substitua:

  • VM_NAME: o nome da VM.
  • CLOUD_STORAGE_URL: os valores de metadados. Defina como o local 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
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 ^
  --metadata=windows-startup-script-url=CLOUD_STORAGE_URL

Substitua:

  • VM_NAME: o nome da VM.
  • CLOUD_STORAGE_URL: os valores de metadados. Defina como o local 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
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 10 minutos para que o script de inicialização de amostra seja concluído.

gcloud (PowerShell)

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 do Windows Server usando o comando gcloud compute instances create a seguir. Para o valor da sinalização --scopes, use storage-ro para que a VM possa acessar o Cloud Storage.

gcloud compute instances create VM_NAME `
  --image-project=windows-cloud `
  --image-family=windows-2019-core `
  --scopes=storage-ro \
  --metadata=windows-startup-script-url=CLOUD_STORAGE_URL

Substitua:

  • VM_NAME: o nome da VM.
  • CLOUD_STORAGE_URL: os valores de metadados. Defina como o local 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
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 `
  --metadata=windows-startup-script-url=CLOUD_STORAGE_URL

Substitua:

  • VM_NAME: o nome da VM.
  • CLOUD_STORAGE_URL: os valores de metadados. Defina como o local 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
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 10 minutos para que o script de inicialização de amostra seja concluído.

API

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 do Windows Server usando o método instances.insert a seguir. No campo scopes, adicione https://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": "windows-startup-script-url",
        "value": "CLOUD_STORAGE_URL"
      },
      ...
    ]
  },
  ...
}

Substitua:

  • 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

Como transmitir um script de inicialização armazenado no Cloud Storage para uma VM atual

  1. Receba o valor tags.fingerprint da VM usando o método instances.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;

  2. 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étodo instances.setMetadata:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setMetadata
    
    {
      "fingerprint": FINGERPRINT,
      "items": [
        {
            "key": "windows-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étodo instances.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

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 10 minutos para que o script de inicialização de amostra seja concluído.

Como acessar metadados de um script de inicialização do Windows

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:

  1. Crie um script de inicialização que consulte o valor de uma chave de metadados. Por exemplo, o script de inicialização do PowerShell (.ps1) a seguir consulta o valor da chave de metadados foo.

    $METADATA_VALUE = (Invoke-RestMethod -Headers @{'Metadata-Flavor' = 'Google'} -Uri "http://metadata.google.internal/computeMetadata/v1/instance/attributes/foo")
    
    # Installing IIS
    Import-Module servermanager
    Install-WindowsFeature Web-Server -IncludeAllSubFeature
    
    # Ensure the directory exists
    if (-not (Test-Path("C:\inetpub\wwwroot"))) {New-Item "C:\inetpub\wwwroot" -Type Directory}
    
    # Write the expanded string out to the file, overwriting the file if it already exists.
    "<html><body><p>Accessing metadata value of foo: $METADATA_VALUE</p></body></html>" | Out-File -FilePath C:\inetpub\wwwroot\index.html -Encoding ascii -Force
    
  2. Defina o valor da chave de metadados foo ao criar uma VM usando o seguinte comando gcloud 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=windows-cloud \
      --image-family=windows-2019 \
      --metadata-from-file=windows-startup-script-ps1=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.

  3. Visualize 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 10 minutos para que o script de inicialização de amostra seja concluído.

Como executar um script de inicialização do Windows novamente

Execute novamente um script de inicialização em uma VM do Windows fazendo o seguinte:

  1. Como se conectar à VM.

  2. Executando o seguinte comando:

    C:\Program Files\Google\Compute Engine\metadata_scripts\run_startup_scripts.cmd
    

Como visualizar a saída de um script de inicialização do Windows

Visualize a saída de um script de inicialização do Windows Server usando qualquer um dos seguintes itens e verificando eventos GCEMetadataScripts:

A seguir