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
- Si vous souhaitez utiliser les exemples de ligne de commande de ce guide, procédez comme suit :
- Installez la dernière version de Google Cloud CLI ou appliquez la mise à jour correspondante.
- Définissez une région et une zone par défaut.
- Si vous voulez utiliser les exemples d'API de ce guide, configurez l'accès aux API.
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 :
- Créer un disque
- Extraire l'image Windows (
install.wim
du support d'installation) sur le disque - 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
- Effectuer le démarrage à partir du nouveau disque pour exécuter l'installation de Windows
- Installer des logiciels supplémentaires, y compris l'agent d'OS invité
- 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 :
- 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.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
- Activez l'API Compute Engine, l'API Cloud Build et l'API Cloud Storage.
Les étapes suivantes diffèrent selon que vous utilisez Windows ou Linux sur votre ordinateur local :
Windows
- Sur votre ordinateur local, ouvrez une fenêtre Windows PowerShell.
Initialisez une variable :
$PROJECT_ID = "
PROJECT_ID
"où
PROJECT_ID
correspond à l'ID du projet Cloud créé dans la section précédente.Initialisez une autre variable contenant le numéro du projet :
$PROJECT_NUMBER = gcloud projects describe $PROJECT_ID --format=value`(projectNumber`)
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
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
- Sur votre ordinateur local, ouvrez une fenêtre de terminal.
Initialisez une variable :
PROJECT_ID=
PROJECT_ID
où
PROJECT_ID
correspond à l'ID du projet Cloud créé dans la section précédente.Initialisez une autre variable contenant le numéro du projet :
PROJECT_NUMBER=`gcloud projects describe $PROJECT_ID --format=value\(projectNumber\)`
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
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.
Sur votre ordinateur local, téléchargez les packages d'installation requis :
Créez un bucket Cloud Storage pour stocker les fichiers d'installation :
gsutil mb -p $PROJECT_ID gs://$PROJECT_ID-media
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
Importez le package d'installation PowerShell :
gsutil cp
POWERSHELL_PACKAGE
gs://$PROJECT_ID-media/PowerShell.msioù
POWERSHELL_PACKAGE
est le chemin d'accès au package d'installation PowerShell.Importez le package d'installation .NET Framework :
gsutil cp
DOTNET_PACKAGE
gs://$PROJECT_ID-media/dotnet-sdk.exeoù
DOTNET_PACKAGE
est le chemin d'accès au package d'installation .NET Framework.Importez le package d'installation de gcloud CLI :
gsutil cp
CLOUDSDK_PACKAGE
gs://$PROJECT_ID-media/GoogleCloudSDKInstaller.exeoù
CLOUDSDK_PACKAGE
est le chemin d'accès au package d'installation de gcloud CLI.Importez le fichier ISO contenant le support d'installation Windows :
gsutil cp
ISO
gs://$PROJECT_ID-media/où
ISO
est le nom du fichier ISO.Vous pouvez également importer des packages de mises à jour supplémentaires :
gsutil cp
UPDATE_DIR
/*.msu gs://$PROJECT_ID-media/updates/où
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.
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
Accédez au répertoire
windows
:cd compute-image-tools/daisy_workflows/image_build/windows/
Un ensemble de fichiers portant le suffixe
.wf.json
se trouvent dans le répertoirewindows
. 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-NullRemplacez
ISO
par le chemin d'accès local à l'image ISO.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.
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.
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
- Apprenez-en plus sur l'outil daisy.
- Apprenez-en plus sur les workflows daisy pour la création d'images.
- Découvrez comment transférer des licences existantes vers Compute Engine.
- Découvrez les bonnes pratiques d'utilisation des familles d'images.