Crie imagens BYOL do Windows personalizadas


Para criar uma VM do Windows no Google Cloud, tem de usar uma imagem de VM com o Windows ou o Windows Server pré-instalado. Google Cloud disponibiliza imagens públicas para versões usadas com frequência do Windows Server, mas estas imagens só são adequadas para licenciamento a pedido. Para trazer a sua própria licença do Windows (BYOL), tem de importar uma imagem existente ou criar uma imagem personalizada.

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

Para concluir este guia, precisa de:

  • Um ficheiro ISO que contém o suporte de instalação do Windows ou do Windows Server.
  • Opcionalmente, um ou mais pacotes de atualização do Windows (no formato .msu) a aplicar à imagem.

Antes de começar

  • Se ainda não o tiver feito, configure a autenticação. A autenticação valida a sua identidade para aceder a Google Cloud serviços e APIs. Para executar código ou exemplos a partir de um ambiente de desenvolvimento local, pode autenticar-se 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. Instale a CLI Google Cloud. Após a instalação, inicialize a CLI gcloud executando o seguinte comando:

      gcloud init

      Se estiver a usar um fornecedor de identidade (IdP) externo, primeiro tem de iniciar sessão na CLI gcloud com a sua identidade federada.

    2. Set a default region and zone.

Compreenda o processo de criação

Para instalar o Windows de raiz, uma abordagem comum é arrancar um computador a partir de um DVD ou de um ficheiro ISO que contenha os ficheiros de instalação do Windows. Ao contrário de alguns hipervisores no local, o Compute Engine não lhe permite arrancar a partir de um ficheiro ISO.

Por conseguinte, para instalar o Windows de raiz, tem de seguir uma abordagem diferente que envolve os seguintes passos:

  1. A criar um novo disco.
  2. Extrair a imagem do Windows (install.wim do suporte de instalação) para o disco.
  3. Adicionar os controladores necessários, configurar a instalação do Windows para que seja executada sem supervisão e tornar o disco inicializável.
  4. Arranque a partir do novo disco para executar a configuração do Windows.
  5. Instalar software adicional, incluindo o agente do SO convidado.
  6. A criar uma imagem a partir do disco.

Em vez de executar estes passos manualmente, este guia descreve como pode usar o Cloud Build, a daisyferramenta e os fluxos de trabalho de referência que estão disponíveis no GitHub para automatizar o processo.

daisy é uma ferramenta de linha de comandos de código aberto que lhe permite executar fluxos de trabalho. Os fluxos de trabalho são criados como ficheiros JSON e contêm uma sequência de passos. Cada passo descreve uma operação do Compute Engine, por exemplo, criar um disco ou encerrar uma instância da VM. Por conseguinte, os fluxos de trabalho Daisy são adequados para automatizar os passos necessários para criar uma imagem do Windows de raiz.

Os fluxos de trabalho do Daisy para criar imagens do Windows personalizadas criam duas instâncias de VM temporárias. A primeira instância de VM (com o prefixo bootstrap) executa os passos necessários para criar um disco de arranque. A segunda instância de VM (com o prefixo install) executa a configuração do Windows e realiza todos os passos restantes.

Prepare o projeto para criar imagens

Para impedir que a ferramenta Daisy interfira com as suas instâncias de VM ou infraestrutura existentes, crie um projeto dedicado para criar imagens:

    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.

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

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

    Verify that billing is enabled for your Google Cloud project.

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

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

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

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

    Verify that billing is enabled for your Google Cloud project.

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

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

    Os passos seguintes diferem consoante use o Windows ou o Linux no 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 projeto que criou na secçã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 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 projeto que criou na secçã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\)`
      

    Carregue ficheiros de instalação

    Agora, recolhe todos os ficheiros de instalação necessários para a imagem personalizada e carrega-os para um contentor do Cloud Storage. Ao armazenar os ficheiros num contentor do Cloud Storage, garante que os ficheiros estão acessíveis ao daisy e às instâncias de VM temporárias que o daisy usa para criar a imagem.

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

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

      gcloud storage buckets create gs://$PROJECT_ID-media --project=$PROJECT_ID
      
    3. Conceda a função Storage Object Viewer ao Cloud Build para que possa ler os ficheiros 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. Carregue o 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 ficheiro ISO que contém o suporte de instalação do Windows:

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

      em que ISO é o nome do ficheiro ISO.

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

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

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

    Já tem tudo pronto para criar a imagem personalizada.

    Crie a imagem

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

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

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

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

      Versão do Windows Ficheiro de fluxo de trabalho
      Windows Server Core 2022 (64 bits) windows-server-2022-dc-core-uefi-byol.wf.json
      Windows Server 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
      Windows Server 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 ficheiro de fluxo de trabalho que corresponde mais de perto à versão do Windows que quer instalar. Se necessário, altere as definições da edição do Windows (edition) e da chave de licença (product_key) nos ficheiros de fluxo de trabalho para que correspondam ao seu suporte de instalação.

      Se não souber qual é o nome da edição correto, abra uma linha de comandos do PowerShell com privilégios elevados e execute os seguintes comandos para listar todas as edições suportadas pelo seu suporte 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 ficheiro denominado 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
      

      Substituição:

      • ISO: nome do ficheiro ISO no Cloud Storage.
      • WORKFLOW: nome do ficheiro de fluxo de trabalho que corresponde à versão do Windows que está a usar.
      .
    5. Envie a compilação para o Cloud Build:

      gcloud builds submit --project $PROJECT_ID --async
      

      A compilação demora até quatro horas a ser concluída. Pode acompanhar o estado da compilação na consola em Cloud Build > Histórico. Google Cloud

      Histórico do Cloud Build

    Use a imagem personalizada

    Após a conclusão da compilação, pode encontrar a imagem BYOL personalizada naGoogle Cloud consola em Compute Engine > Imagens.

    Para ajudar a distinguir entre várias versões da mesma imagem, o processo de compilação incorpora uma 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, tem de aprovisionar a instância de VM num nó de inquilino único.

    Resolução de problemas

    Se suspeitar que o processo de compilação falhou ou não está a progredir, use as abordagens seguintes para diagnosticar a situação:

    • Verifique se carregou os pacotes de instalação e o ficheiro ISO corretos.
    • Verifique se selecionou um fluxo de trabalho que corresponde à versão do Windows do ficheiro ISO.
    • Reveja o registo de compilação no Cloud Build e verifique se existem mensagens de erro.
    • Se a compilação parecer bloqueada, reveja o resultado da porta série da instância de VM criada pela compilação e verifique se existem mensagens de erro.

    O que se segue?