Crie imagens BYOL personalizadas do Windows


Para criar uma VM do Windows em Google Cloud, você deverá usar uma imagem de VM que tenha o Windows ou o Windows Server pré-instalado. Google Cloud fornece imagens públicas para versões comumente usadas do Windows Server, mas essas imagens são adequadas apenas para licenciamento sob demanda . Para trazer sua própria licença do Windows (BYOL), você deve importar uma imagem existente ou criar uma imagem personalizada.

Este guia descreve como você pode criar uma imagem personalizada usando as mesmas ferramentas e processos que Google Cloud usa para criar as imagens públicas.

Para completar este guia, você precisa de:

  • Um arquivo ISO contendo a mídia de instalação do Windows ou do Windows Server.
  • Opcionalmente, um ou mais pacotes de atualização do Windows (no formato .msu ) para aplicar à imagem.

Antes de começar

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

Entenda o processo de construção

Para instalar o Windows do zero, uma abordagem comum é inicializar um computador a partir de um DVD ou arquivo ISO que contém os arquivos de instalação do Windows. Ao contrário de alguns hipervisores locais, o Compute Engine não permite inicializar a partir de um arquivo ISO.

Para instalar o Windows do zero, você deve seguir uma abordagem diferente que envolve as seguintes etapas:

  1. Criando um novo disco.
  2. Extraindo a imagem do Windows ( install.wim da mídia de instalação) para o disco.
  3. Adicionar os drivers necessários, configurar a Instalação do Windows para que funcione sem supervisão e tornar o disco inicializável.
  4. Inicializando a partir do novo disco para executar a Instalação do Windows.
  5. Instalação de software adicional, incluindo o agente do SO convidado.
  6. Criando uma imagem do disco.

Em vez de executar essas etapas manualmente, este guia descreve como você pode usar o Cloud Build , a ferramenta daisy e os fluxos de trabalho de referência disponíveis no GitHub para automatizar o processo.

daisy é uma ferramenta de linha de comando de código aberto que permite executar fluxos de trabalho. Os fluxos de trabalho são criados como arquivos JSON e contêm uma sequência de etapas. Cada etapa descreve uma operação do Compute Engine, por exemplo, criar um disco ou encerrar uma instância de VM. Os fluxos de trabalho Daisy são, portanto, adequados para automatizar as etapas necessárias para construir uma imagem do Windows do zero.

Os fluxos de trabalho em série para criar imagens personalizadas do Windows criam duas instâncias de VM temporárias. A primeira instância de VM ( bootstrap com prefixo) executa as etapas necessárias para criar um disco inicializável. A segunda instância de VM ( install com prefixo) executa a Instalação do Windows e executa todas as etapas restantes.

Prepare o projeto para construção de imagens

Para evitar que a ferramenta margarida interfira nas instâncias ou infraestrutura de VM existentes, crie um projeto dedicado para criar imagens:

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Compute Engine API, Cloud Build API, and Cloud Storage API APIs.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the Compute Engine API, Cloud Build API, and Cloud Storage API APIs.

    Enable the APIs

As próximas etapas variam dependendo se você usa Windows ou Linux em seu computador local:

Windows

  1. No computador local, abra uma janela do Windows PowerShell.
  2. Inicialize uma variável:

    $PROJECT_ID = "PROJECT_ID"
    

    onde PROJECT_ID é o ID do projeto do Google Cloud que você criou na seção anterior.

  3. Inicialize outra variável para que contenha o número do projeto:

    $PROJECT_NUMBER = gcloud projects describe $PROJECT_ID --format=value`(projectNumber`)
    

Linux

  1. No seu computador local, abra uma janela de terminal.
  2. Inicialize uma variável:

    PROJECT_ID=PROJECT_ID
    

    onde PROJECT_ID é o ID do projeto do Google Cloud que você criou na seção anterior.

  3. Inicialize outra variável para que contenha o número do projeto:

    PROJECT_NUMBER=`gcloud projects describe $PROJECT_ID --format=value\(projectNumber\)`
    

Carregar arquivos de instalação

Agora você coleta todos os arquivos de instalação necessários para a imagem personalizada e faz upload deles para um bucket do Cloud Storage. Ao armazenar os arquivos em um bucket do Cloud Storage, você garante que os arquivos sejam acessíveis pelo daisy e pelas instâncias de VM temporárias que daisy usa para criar a imagem.

  1. No seu computador local, baixe os pacotes de instalação necessários:

  2. Crie um novo bucket do Cloud Storage para armazenar os arquivos de instalação:

    gcloud storage buckets create gs://$PROJECT_ID-media --project=$PROJECT_ID
    
  3. Conceda o papel de visualizador de objetos de armazenamento ao Cloud Build para que ele possa ler os arquivos de instalação:

    gcloud storage buckets add-iam-policy-binding gs://$PROJECT_ID-media --member=serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com --role=roles/storage.objectViewer
    
  4. Carregue o pacote de instalação do PowerShell:

    gcloud storage cp POWERSHELL_PACKAGE gs://$PROJECT_ID-media/PowerShell.msi
    

    onde POWERSHELL_PACKAGE é o caminho para o pacote de instalação do PowerShell.

  5. Carregue o pacote de instalação do .NET Framework:

    gcloud storage cp DOTNET_PACKAGE gs://$PROJECT_ID-media/dotnet-sdk.exe
    

    onde DOTNET_PACKAGE é o caminho para o pacote de instalação do NET Framework.

  6. Faça upload do pacote de instalação da CLI gcloud:

    gcloud storage cp CLOUDSDK_PACKAGE gs://$PROJECT_ID-media/GoogleCloudSDKInstaller.exe
    

    onde CLOUDSDK_PACKAGE é o caminho para o pacote de instalação da CLI gcloud.

  7. Carregue o arquivo ISO contendo sua mídia de instalação do Windows:

    gcloud storage cp ISO gs://$PROJECT_ID-media/
    

    onde ISO é o nome do arquivo ISO.

  8. Opcionalmente, carregue pacotes de atualização adicionais:

    gcloud storage cp UPDATE_DIR/*.msu gs://$PROJECT_ID-media/updates/
    

    onde UPDATE_DIR é o diretório que contém os pacotes de atualização.

Agora você está pronto para construir a imagem personalizada.

Construa a imagem

A execução do fluxo de trabalho daisy para criar uma imagem personalizada leva até quatro horas. Em vez de executar daisy localmente, agora você cria uma configuração do Cloud Build para permitir que o Cloud Build execute o fluxo de trabalho em segundo plano.

  1. No computador local, clone o repositório Git que contém os fluxos de trabalho daisy para criar imagens do Windows:

    git clone https://github.com/GoogleCloudPlatform/compute-image-tools.git
    
  2. Mude para o diretório windows :

    cd compute-image-tools/daisy_workflows/image_build/windows/
    
  3. No diretório windows , você encontra uma seleção de arquivos com o sufixo .wf.json . Esses arquivos contêm definições de fluxo de trabalho Daisy para versões do Windows comumente usadas:

    Versão do Windows Arquivo de fluxo de trabalho
    Windows Server Core 2022 (64 bits) windows-server-2022-dc-core-uefi-byol.wf.json
    Servidor Windows 2019 (64 bits) windows-server-2019-dc-uefi-byol.wf.json
    Windows Server Core 2019 (64 bits) windows-server-2019-dc-core-uefi-byol.wf.json
    Servidor Windows 2016 (64 bits) windows-server-2016-dc-uefi-byol.wf.json
    Windows Server Core 2016 (64 bits) windows-server-2016-dc-core-uefi-byol.wf.json
    Windows 11 21H2 (64 bits) windows-11-21h2-ent-x64-uefi.wf.json
    Windows 11 22H2 (64 bits) windows-11-22h2-ent-x64-uefi.wf.json
    Windows 11 23H2 (64 bits) windows-11-23h2-ent-x64-uefi.wf.json
    Windows 10 21H2 (64 bits) windows-10-21h2-ent-x64-uefi.wf.json
    Windows 10 22H2 (64 bits) windows-10-22h2-ent-x64-uefi.wf.json

    Abra o arquivo de fluxo de trabalho que melhor corresponda à versão do Windows que você deseja instalar. Se necessário, altere as configurações da edição do Windows ( edition ) e da chave de licença ( product_key ) nos arquivos de fluxo de trabalho para que correspondam à sua mídia de instalação.

    Se você não tiver certeza sobre o nome correto da edição, abra um prompt elevado do PowerShell e execute os seguintes comandos para listar todas as edições suportadas pela sua mídia de instalação:

    $IsoFile = "ISO"
    
    $Mount = Mount-DiskImage -ImagePath (Resolve-Path $IsoFile)
    
    $DriveLetter = ($Mount | Get-Volume).DriveLetter
    Get-WindowsImage -ImagePath "$($DriveLetter):\sources\install.wim" | select ImageName
    
    Dismount-DiskImage -InputObject $Mount | Out-Null
    

    Substitua ISO pelo caminho local para a imagem ISO.

  4. No diretório windows , crie um novo arquivo chamado cloudbuild.yaml e cole o seguinte código:

    timeout: 14400s  # 4 hour timeout for entire build
    steps:
    - name: 'gcr.io/compute-image-tools/daisy'
      timeout: 14400s  # 4 hour timeout for build step
      waitFor: ['-']
      args:
        - -project=$PROJECT_ID
        - -zone=us-central1-a
        - -var:updates=gs://$PROJECT_ID-media/updates/
        - -var:pwsh=gs://$PROJECT_ID-media/PowerShell.msi
        - -var:dotnet48=gs://$PROJECT_ID-media/dotnet-sdk.exe
        - -var:cloudsdk=gs://$PROJECT_ID-media/GoogleCloudSDKInstaller.exe
        - -var:media=gs://$PROJECT_ID-media/ISO
        - WORKFLOW
    

    Substituir:

    • ISO : nome do arquivo ISO no Cloud Storage.
    • WORKFLOW : nome do arquivo de fluxo de trabalho que corresponde à versão do Windows que você está usando.
  5. Envie a versão para o Cloud Build:

    gcloud builds submit --project $PROJECT_ID --async
    

    A construção leva cerca de quatro horas para ser concluída. Você pode acompanhar o status do build no console do Google Cloud em Cloud Build > History .

    Histórico de criação da nuvem

Use a imagem personalizada

Após a conclusão da compilação, você poderá encontrar a imagem BYOL personalizada no console do Google Cloud em Compute Engine > Images .

Para ajudar a diferenciar entre várias versões da mesma imagem, o processo de compilação incorpora um carimbo de data/hora no nome da imagem, por exemplo windows-server-2019-dc-v1613488342 . Além disso, o processo associa a imagem a uma família de imagens personalizada, por exemplo windows-server-2019 .

Para criar uma instância de VM que use a imagem BYOL personalizada, você deve provisionar a instância de VM em um nó de locatário individual .

Solução de problemas

Se você suspeitar que o processo de construção falhou ou não está progredindo, use as seguintes abordagens para diagnosticar a situação:

  • Verifique se você carregou os pacotes de instalação e o arquivo ISO corretos.
  • Verifique se você selecionou um fluxo de trabalho que corresponda à versão do arquivo ISO para Windows.
  • Revise o log de compilação no Cloud Build e verifique se há alguma mensagem de erro.
  • Se a compilação parecer travada, revise a saída da porta serial da instância de VM criada pela compilação e verifique se há mensagens de erro.

O que vem a seguir