Use 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). 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 Windows Server. Para obter informações sobre como adicionar um script de inicialização no nível do projeto, consulte gcloud compute project-info add-metadata .

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

Se você especificar um script de inicialização usando um dos procedimentos deste documento, o Compute Engine fará o seguinte:

  1. Copia o script de inicialização para a VM

  2. O Agendador de tarefas executa o script de inicialização como a conta LocalSystem 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 o documento de visão geral dos scripts de inicialização .

Antes de começar

  • Leia a visão geral dos scripts de inicialização .
  • Leia sobre os conceitos básicos de metadados de VM .
  • 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

    1. 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.

    2. Set a default region and zone.
    3. 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 Windows

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

A tabela a seguir mostra as chaves de metadados que você pode usar para scripts de inicialização do Windows e fornece informações sobre qual chave usar com base no local de armazenamento, tamanho e tipo de arquivo do script de inicialização.

Chave de metadados Usar para
sysprep-specialize-script-ps1 Passando um script do PowerShell não assinado que é armazenado localmente ou adicionado diretamente e que tem até 256 KB de tamanho
sysprep-specialize-script-cmd Passando um script de shell de comando armazenado localmente ou adicionado diretamente e com tamanho de até 256 KB
sysprep-specialize-script-bat Passando um script de arquivo em lote armazenado localmente ou adicionado diretamente e com tamanho de até 256 KB
sysprep-specialize-script-url Transmitir um arquivo em lote, shell de comando, script do PowerShell assinado/não assinado ou executável armazenado no Cloud Storage e com tamanho superior a 256 KB
windows-startup-script-ps1 Passando um script do PowerShell não assinado que é armazenado localmente ou adicionado diretamente e que tem até 256 KB de tamanho
windows-startup-script-cmd Passando um script de shell de comando armazenado localmente ou adicionado diretamente e com tamanho de até 256 KB
windows-startup-script-bat Passando um script de arquivo em lote armazenado localmente ou adicionado diretamente e com tamanho de até 256 KB
windows-startup-script-url Transmitir um arquivo em lote, shell de comando, script do PowerShell assinado/não assinado ou executável armazenado no Cloud Storage e com tamanho superior a 256 KB

Para obter 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 dos scripts de inicialização do Windows

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. 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 inicialização
sysprep-specialize-script-cmd Segundo durante a inicialização inicial
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

Passando um script de inicialização do Windows diretamente

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

Console

Passando 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 .

    Vá para Criar uma instância

  2. Para 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 Opções avançadas 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 : definida como windows-startup-script-ps1 .

        Os scripts de inicialização passados ​​para a VM usando chaves de metadados começando com windows-startup-script são executados em cada inicialização após a inicialização 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 .

Passando um script de inicialização do Windows diretamente para uma VM existente

  1. No console do Google Cloud, acesse a página de instâncias de VM .

    Acesse as instâncias de VM

  2. Clique no nome da VM.

  3. Clique em Editar .

  4. Em Metadados , especifique o seguinte:

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

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

gcloud (Bash)

Passando 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á-lo 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.

Passando um script de inicialização do Windows 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 \
  --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.

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

gcloud (prompt de comando)

Passando 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á-lo 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.

Passando um script de inicialização do Windows 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 ^
  --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.

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

gcloud (PowerShell)

Passando 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á-lo 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.

Passando um script de inicialização do Windows 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 `
  --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.

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

DESCANSAR

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

Passe o conteúdo de um script de inicialização diretamente para uma VM do Windows Server ao criá-lo 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": "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 o seguinte:

  • PROJECT_ID : o ID do projeto

  • ZONE : a zona para criar a nova VM

Passando um script de inicialização do Windows diretamente para uma VM existente

  1. Obtenha 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 o seguinte:

    • PROJECT_ID : o ID do projeto

    • ZONE : a zona da VM

    • VM_NAME : a zona da VM

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

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

Passando um script de inicialização do Windows a partir de um arquivo local

Você pode armazenar um script de inicialização em um arquivo em lote local, um script de shell de comando ou um script do PowerShell não assinado em sua estação de trabalho e transmitir 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 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 CLI 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)

Passando 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 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=windows-cloud \
  --image-family=windows-2019-core \
  --metadata-from-file=windows-startup-script-ps1=FILE_PATH

Substitua o seguinte:

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

Substitua o seguinte:

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

gcloud (prompt de comando)

Passando 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 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=windows-cloud ^
  --image-family=windows-2019-core ^
  --metadata-from-file=windows-startup-script-ps1=FILE_PATH

Substitua o seguinte:

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

Substitua o seguinte:

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

gcloud (PowerShell)

Passando 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 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=windows-cloud `
  --image-family=windows-2019-core `
  --metadata-from-file=windows-startup-script-ps1=FILE_PATH

Substitua o seguinte:

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

Substitua o seguinte:

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

Passando um script de inicialização do Windows do Cloud Storage

Você pode armazenar um script de inicialização como um arquivo em lote, um script de shell de comando, um script do PowerShell assinado/não assinado ou um executável 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:

  1. Crie um arquivo para armazenar o script de inicialização. Este exemplo usa um arquivo PowerShell ( .ps1 ).

  2. Adicione o seguinte script do PowerShell ao arquivo, que instala um servidor web e cria uma página 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 intervalo do Cloud Storage .

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

Console

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 .

    Vá para Criar uma instância

  2. Para 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 a função de Visualizador de Objetos de Armazenamento .

  4. Expanda a seção Opções avançadas e faça o seguinte:

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

      • 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.

      • Valor : 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

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

Transmitir um script de inicialização armazenado no Cloud Storage para uma VM existente

  1. No console do Google Cloud, acesse a página de instâncias de VM .

    Acesse as instâncias de VM

  2. Clique no nome da VM.

  3. Clique em Editar .

  4. Em Metadados , adicione os seguintes valores:

    • URL autenticado : https://storage.googleapis.com/ BUCKET / FILE
    • URI de armazenamento gcloud : gs:// BUCKET / FILE

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

gcloud (Bash)

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

Passe 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 o seguinte:

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

Substitua o seguinte:

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

gcloud (prompt de comando)

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

Passe 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 o seguinte:

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

Substitua o seguinte:

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

gcloud (PowerShell)

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

Passe 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 o seguinte:

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

Substitua o seguinte:

  • VM_NAME : o nome da VM.
  • CLOUD_STORAGE_URL : os valores dos metadados. Configure o local 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
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 10 minutos 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 do Windows Server usando o método instances.insert a seguir. Ao 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 o seguinte:

  • 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

Transmitir um script de inicialização armazenado no Cloud Storage para uma VM existente

  1. Obtenha 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 o seguinte:

    • PROJECT_ID : o ID do projeto

    • ZONE : a zona da VM

    • VM_NAME : a zona da VM

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

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

Acessando metadados de um script de inicialização do Windows

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:

  1. Crie um script de inicialização que consulte o valor de uma chave de metadados. Por exemplo, o seguinte script de inicialização do PowerShell ( .ps1 ) 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 comando gcloud 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=windows-cloud \
      --image-family=windows-2019 \
      --metadata-from-file=windows-startup-script-ps1=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 Definir e remover metadados personalizados .

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

Executando novamente um script de inicialização do Windows

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

  1. Conectando-se à VM .

  2. Executando o seguinte comando:

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

Visualizando 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 procedimentos e verificando eventos GCEMetadataScripts :

O que vem a seguir