Créer des images sous licence BYOL Windows personnalisées


Pour créer une VM Windows sur Google Cloud, vous devez utiliser une image de VM sur laquelle Windows ou Windows Server est préinstallé. Google Cloud fournit des images publiques pour les versions de Windows Server couramment utilisées, mais ces images ne conviennent qu'aux licences à la demande. Pour utiliser votre propre licence Windows (BYOL), vous devez importer une image existante ou compiler une image personnalisée.

Ce guide explique comment créer une image personnalisée à l'aide des mêmes outils et processus que ceux utilisés par Google Cloud pour créer des images publiques.

Pour suivre ce guide, vous aurez besoin des ressources suivantes :

  • Un fichier ISO contenant le support d'installation Windows ou Windows Server
  • (Facultatif) Un ou plusieurs packages de mises à jour Windows (au format .msu) à appliquer à l'image

Avant de commencer

Comprendre le processus de compilation

Pour installer entièrement Windows, une approche courante consiste à démarrer un ordinateur à partir d'un fichier DVD ou ISO contenant les fichiers d'installation de Windows. Contrairement à certains hyperviseurs sur site, Compute Engine ne permet pas de le démarrer à partir d'un fichier ISO.

Pour installer Windows, vous devez donc suivre une autre approche qui implique les étapes suivantes :

  1. Créer un disque
  2. Extraire l'image Windows (install.wim du support d'installation) sur le disque
  3. Ajouter les pilotes nécessaires, configurer l'installation de Windows de sorte qu'elle s'exécute sans surveillance et rendre le disque amorçable
  4. Effectuer le démarrage à partir du nouveau disque pour exécuter l'installation de Windows
  5. Installer des logiciels supplémentaires, y compris l'agent d'OS invité
  6. Créer une image à partir du disque

Au lieu d'effectuer manuellement ces étapes, ce guide vous explique comment automatiser le processus à l'aide de Cloud Build, de l'outil daisy et des workflows de référence disponibles sur GitHub.

daisy est un outil de ligne de commande Open Source permettant d'exécuter des workflows. Les workflows sont créés sous forme de fichiers JSON et contiennent une séquence d'étapes. Chaque étape décrit une opération Compute Engine, comme la création d'un disque ou l'arrêt d'une instance de VM. Les workflows daisy sont donc parfaitement adaptés pour automatiser les étapes requises pour compiler une image Windows.

Les workflows daisy permettant de compiler des images Windows personnalisées créent deux instances de VM temporaires. La première instance de VM (avec le préfixe bootstrap) effectue les étapes nécessaires pour créer un disque de démarrage. La deuxième instance de VM (avec le préfixe install) exécute l'installation de Windows et effectue toutes les étapes restantes.

Préparer le projet pour créer des images

Pour éviter que l'outil daisy n'interfère avec vos instances de VM ou votre infrastructure existantes, créez un projet dédié à la compilation d'images :

  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. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

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

  6. Activez l'API Compute Engine, l'API Cloud Build et l'API Cloud Storage.

    Activer les API

Les étapes suivantes diffèrent selon que vous utilisez Windows ou Linux sur votre ordinateur local :

Windows

  1. Sur votre ordinateur local, ouvrez une fenêtre Windows PowerShell.
  2. Initialisez une variable :

    $PROJECT_ID = "PROJECT_ID"
    

    PROJECT_ID correspond à l'ID du projet Cloud créé dans la section précédente.

  3. Initialisez une autre variable contenant le numéro du projet :

    $PROJECT_NUMBER = gcloud projects describe $PROJECT_ID --format=value`(projectNumber`)
    
  4. Désactivez les règles de pare-feu par défaut pour l'accès RDP et SSH :

    gcloud compute firewall-rules update default-allow-rdp --project $PROJECT_ID --disabled
    gcloud compute firewall-rules update default-allow-ssh --project $PROJECT_ID --disabled
    
  5. Attribuez les rôles Administrateur d'instances Compute et Utilisateur du compte de service à Cloud Build pour l'autoriser à créer les instances de VM temporaires requises pour compiler les images :

    gcloud projects add-iam-policy-binding $PROJECT_ID `
       --member serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com `
       --role roles/compute.instanceAdmin.v1
    gcloud projects add-iam-policy-binding $PROJECT_ID `
       --member serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com `
       --role roles/iam.serviceAccountUser
    

Linux

  1. Sur votre ordinateur local, ouvrez une fenêtre de terminal.
  2. Initialisez une variable :

    PROJECT_ID=PROJECT_ID
    

    PROJECT_ID correspond à l'ID du projet Cloud créé dans la section précédente.

  3. Initialisez une autre variable contenant le numéro du projet :

    PROJECT_NUMBER=`gcloud projects describe $PROJECT_ID --format=value\(projectNumber\)`
    
  4. Désactivez les règles de pare-feu par défaut pour l'accès RDP et SSH :

    gcloud compute firewall-rules update default-allow-rdp --project $PROJECT_ID --disabled
    gcloud compute firewall-rules update default-allow-ssh --project $PROJECT_ID --disabled
    
  5. Attribuez les rôles Administrateur d'instances Compute et Utilisateur du compte de service à Cloud Build pour l'autoriser à créer les instances de VM temporaires requises pour compiler les images :

    gcloud projects add-iam-policy-binding $PROJECT_ID \
       --member serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com \
       --role roles/compute.instanceAdmin.v1
    gcloud projects add-iam-policy-binding $PROJECT_ID \
       --member serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com \
       --role roles/iam.serviceAccountUser
    

Importer des fichiers d'installation

Vous allez maintenant rassembler tous les fichiers d'installation requis pour l'image personnalisée et les importer dans un bucket Cloud Storage. Le stockage des fichiers dans un bucket Cloud Storage permet de s'assurer qu'ils sont accessibles par daisy et par les instances de VM temporaires utilisées par daisy pour compiler l'image.

  1. Sur votre ordinateur local, téléchargez les packages d'installation requis :

  2. Créez un bucket Cloud Storage pour stocker les fichiers d'installation :

    gsutil mb -p $PROJECT_ID gs://$PROJECT_ID-media
    
  3. Attribuez le rôle Lecteur des objets Storage à Cloud Build pour l'autoriser à lire les fichiers d'installation :

    gsutil iam ch serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com:objectViewer  gs://$PROJECT_ID-media
    
  4. Importez le package d'installation PowerShell :

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

    POWERSHELL_PACKAGE est le chemin d'accès au package d'installation PowerShell.

  5. Importez le package d'installation .NET Framework :

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

    DOTNET_PACKAGE est le chemin d'accès au package d'installation .NET Framework.

  6. Importez le package d'installation de gcloud CLI :

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

    CLOUDSDK_PACKAGE est le chemin d'accès au package d'installation de gcloud CLI.

  7. Importez le fichier ISO contenant le support d'installation Windows :

    gsutil cp ISO gs://$PROJECT_ID-media/
    

    ISO est le nom du fichier ISO.

  8. Vous pouvez également importer des packages de mises à jour supplémentaires :

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

    UPDATE_DIR est le répertoire contenant les packages de mises à jour.

Vous êtes maintenant prêt à compiler l'image personnalisée.

Créer l'image

L'exécution du workflow daisy permettant de compiler une image personnalisée peut prendre jusqu'à quatre heures. Au lieu d'exécuter daisy en local, vous allez créer une configuration Cloud Build lui permettant d'exécuter le workflow en arrière-plan.

  1. Sur votre ordinateur local, clonez le dépôt Git qui contient les workflows daisy permettant de compiler les images Windows :

    git clone https://github.com/GoogleCloudPlatform/compute-image-tools.git
    
  2. Accédez au répertoire windows :

    cd compute-image-tools/daisy_workflows/image_build/windows/
    
  3. Un ensemble de fichiers portant le suffixe .wf.json se trouvent dans le répertoire windows. Ces fichiers contiennent les définitions des workflows Daisy pour les versions de Windows couramment utilisées :

    Version de Windows Fichier de workflow
    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 10 (64 bits) windows-10-20h2-ent-x64-uefi-byol.wf.json

    Ouvrez le fichier de workflow correspondant le plus à la version de Windows que vous souhaitez installer. Si nécessaire, modifiez les paramètres de l'édition Windows (edition) et de la clé de licence (product_key) dans les fichiers de workflow afin qu'ils correspondent à votre support d'installation.

    Si vous n'êtes pas sûr du nom correct de l'édition, ouvrez une invite PowerShell avec élévation de privilèges et exécutez les commandes suivantes pour répertorier toutes les éditions compatibles avec le support d'installation :

    $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
    

    Remplacez ISO par le chemin d'accès local à l'image ISO.

  4. Dans le répertoire windows, créez un fichier nommé cloudbuild.yaml et collez le code suivant :

    timeout: 14400s  # 4 hour timeout for entire build
    steps:
    - name: 'gcr.io/compute-image-tools/daisy'
      timeout: 14400s  # 4 hour timeout for build step
      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
    

    Remplacez :

    • ISO : nom du fichier ISO sur Cloud Storage.
    • WORKFLOW : nom du fichier de workflow correspondant à la version de Windows que vous utilisez.
  5. Envoyez le build à Cloud Build :

    gcloud builds submit --project $PROJECT_ID --async
    

    La compilation prend environ quatre heures. Vous pouvez suivre l'état de la compilation dans la console Google Cloud sous Cloud Build > Historique.

    Historique Cloud Build

Utiliser l'image personnalisée

Une fois la compilation terminée, vous pouvez afficher l'image BYOL personnalisée dans la console Google Cloud sous Compute Engine > Images.

Pour faciliter la distinction entre plusieurs versions d'une même image, le processus de compilation intègre un horodatage dans le nom de l'image, par exemple windows-server-2019-dc-v1613488342. Il associe également l'image à une famille d'images personnalisée, telle que windows-server-2019.

Pour créer une instance de VM qui utilise l'image BYOL personnalisée, vous devez provisionner l'instance de VM sur un nœud à locataire unique.

Dépannage

Si vous pensez que le processus de compilation a échoué ou qu'il ne progresse pas, aidez-vous des approches suivantes pour diagnostiquer la situation :

  • Vérifiez que vous avez importé les packages d'installation et le fichier ISO appropriés.
  • Vérifiez que vous avez sélectionné un workflow correspondant à la version Windows du fichier ISO.
  • Consultez le journal des builds dans Cloud Build et vérifiez s'il existe des messages d'erreur.
  • Si le build semble bloqué, examinez la sortie du port série de l'instance de VM créée par le build et recherchez les messages d'erreur.

Étapes suivantes