Een Virtuele Windows-machine maken met behulp van Azure VM Image Builder
Van toepassing op: ✔️ Windows-VM's
In dit artikel leert u hoe u een aangepaste Windows-installatiekopieën maakt met behulp van Azure VM Image Builder. In het voorbeeld in dit artikel worden aanpassers gebruikt voor het aanpassen van de afbeelding:
- PowerShell (ScriptUri): Download en voer een PowerShell-script uit.
- Windows opnieuw opstarten: start de virtuele machine opnieuw op.
- PowerShell (inline): voert een specifieke opdracht uit. In dit voorbeeld wordt een map op de virtuele machine gemaakt met behulp van
mkdir c:\\buildActions
. - Bestand: Kopieert een bestand van GitHub naar de VIRTUELE machine. In dit voorbeeld worden index.md gekopieerd naar
c:\buildArtifacts\index.html
de virtuele machine. buildTimeoutInMinutes
: Hiermee geeft u een buildtijd, in minuten. De standaardwaarde is 240 minuten, die u kunt verhogen om langere builds toe te staan. De minimaal toegestane waarde is 6 minuten. Waarden die korter zijn dan 6 minuten, veroorzaken fouten.vmProfile
: Hiermee geeft u eenvmSize
en netwerkeigenschappen.osDiskSizeGB
: Kan worden gebruikt om de grootte van een afbeelding te vergroten.identity
. Biedt een identiteit voor VM Image Builder die tijdens de build kan worden gebruikt.
Gebruik de volgende JSON-voorbeeldsjabloon om de afbeelding te configureren: helloImageTemplateWin.json.
Notitie
Windows-gebruikers kunnen de volgende Azure CLI-voorbeelden uitvoeren in Azure Cloud Shell met behulp van Bash.
De providers registreren
Als u VM Image Builder wilt gebruiken, moet u de functie registreren. Controleer uw registratie door de volgende opdrachten uit te voeren:
az provider show -n Microsoft.VirtualMachineImages | grep registrationState
az provider show -n Microsoft.KeyVault | grep registrationState
az provider show -n Microsoft.Compute | grep registrationState
az provider show -n Microsoft.Storage | grep registrationState
az provider show -n Microsoft.Network | grep registrationState
az provider show -n Microsoft.ContainerInstance -o json | grep registrationState
Als de uitvoer niet geregistreerd staat, voert u de volgende opdrachten uit:
az provider register -n Microsoft.VirtualMachineImages
az provider register -n Microsoft.Compute
az provider register -n Microsoft.KeyVault
az provider register -n Microsoft.Storage
az provider register -n Microsoft.Network
az provider register -n Microsoft.ContainerInstance
Variabelen instellen
Omdat u enkele stukjes gegevens herhaaldelijk gaat gebruiken, maakt u enkele variabelen om die informatie op te slaan:
# Resource group name - we're using myImageBuilderRG in this example
imageResourceGroup='myWinImgBuilderRG'
# Region location
location='WestUS2'
# Run output name
runOutputName='aibWindows'
# The name of the image to be created
imageName='aibWinImage'
Maak een variabele voor uw abonnements-id:
subscriptionID=$(az account show --query id --output tsv)
De resourcegroep maken
Gebruik de volgende resourcegroep om het artefact van de configuratiesjabloon voor installatiekopieën en de installatiekopieën op te slaan:
az group create -n $imageResourceGroup -l $location
Een door de gebruiker toegewezen identiteit maken en machtigingen instellen voor de resourcegroep
VM Image Builder gebruikt de opgegeven gebruikersidentiteit om de installatiekopieën in de resourcegroep te injecteren. In dit voorbeeld maakt u een Azure-roldefinitie met specifieke machtigingen voor het distribueren van de installatiekopieën. De roldefinitie wordt vervolgens toegewezen aan de gebruikersidentiteit.
Een door de gebruiker toegewezen beheerde identiteit maken en machtigingen verlenen
Maak een door de gebruiker toegewezen identiteit, zodat VM Image Builder toegang heeft tot het opslagaccount waarin het script is opgeslagen.
identityName=aibBuiUserId$(date +'%s')
az identity create -g $imageResourceGroup -n $identityName
# Get the identity ID
imgBuilderCliId=$(az identity show -g $imageResourceGroup -n $identityName --query clientId -o tsv)
# Get the user identity URI that's needed for the template
imgBuilderId=/subscriptions/$subscriptionID/resourcegroups/$imageResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/$identityName
# Download the preconfigured role definition example
curl https://raw.githubusercontent.com/azure/azvmimagebuilder/master/solutions/12_Creating_AIB_Security_Roles/aibRoleImageCreation.json -o aibRoleImageCreation.json
imageRoleDefName="Azure Image Builder Image Def"$(date +'%s')
# Update the definition
sed -i -e "s%<subscriptionID>%$subscriptionID%g" aibRoleImageCreation.json
sed -i -e "s%<rgName>%$imageResourceGroup%g" aibRoleImageCreation.json
sed -i -e "s%Azure Image Builder Service Image Creation Role%$imageRoleDefName%g" aibRoleImageCreation.json
# Create role definitions
az role definition create --role-definition ./aibRoleImageCreation.json
# Grant a role definition to the user-assigned identity
az role assignment create \
--assignee $imgBuilderCliId \
--role "$imageRoleDefName" \
--scope /subscriptions/$subscriptionID/resourceGroups/$imageResourceGroup
De configuratiesjabloon voor installatiekopieën downloaden
We hebben een geparameteriseerde configuratiesjabloon voor installatiekopieën gemaakt, zodat u het kunt proberen. Download het JSON-voorbeeldbestand en configureer het vervolgens met de variabelen die u eerder hebt ingesteld.
curl https://raw.githubusercontent.com/azure/azvmimagebuilder/master/quickquickstarts/0_Creating_a_Custom_Windows_Managed_Image/helloImageTemplateWin.json -o helloImageTemplateWin.json
sed -i -e "s%<subscriptionID>%$subscriptionID%g" helloImageTemplateWin.json
sed -i -e "s%<rgName>%$imageResourceGroup%g" helloImageTemplateWin.json
sed -i -e "s%<region>%$location%g" helloImageTemplateWin.json
sed -i -e "s%<imageName>%$imageName%g" helloImageTemplateWin.json
sed -i -e "s%<runOutputName>%$runOutputName%g" helloImageTemplateWin.json
sed -i -e "s%<imgBuilderId>%$imgBuilderId%g" helloImageTemplateWin.json
U kunt dit voorbeeld in de terminal wijzigen met behulp van een teksteditor zoals vi
.
vi helloImageTemplateWin.json
Notitie
Geef voor de broninstallatiekopieën altijd een versie op. U kunt niet opgeven latest
als versie.
Als u de resourcegroep waaraan de installatiekopieën zijn gedistribueerd toevoegt of wijzigt, moet u ervoor zorgen dat de machtigingen voor de resourcegroep zijn ingesteld .
De installatiekopie maken
Verzend de installatiekopieënconfiguratie naar de VM Image Builder-service door de volgende opdrachten uit te voeren:
az resource create \
--resource-group $imageResourceGroup \
--properties @helloImageTemplateWin.json \
--is-full-object \
--resource-type Microsoft.VirtualMachineImages/imageTemplates \
-n helloImageTemplateWin01
Wanneer u klaar bent, wordt er een bericht geretourneerd naar de console en wordt er een VM Image Builder-configuratiesjabloon gemaakt in de $imageResourceGroup
.
Op de achtergrond maakt VM Image Builder ook een faseringsresourcegroep in uw abonnement. Deze resourcegroep wordt gebruikt om de installatiekopieën te bouwen in de volgende indeling: IT_<DestinationResourceGroup>_<TemplateName>
.
Notitie
Als verwijdering is vereist, verwijdert u de faseringsresourcegroep niet rechtstreeks. Verwijder eerst het artefact van de afbeeldingssjabloon, waarna de faseringsresourcegroep wordt verwijderd. Anders kan de afbeeldingssjabloon de status Mislukt invoeren.
Als de service een fout meldt wanneer u de configuratiesjabloon voor de installatiekopie verzendt, gaat u als volgt te werk:
- Zie Problemen met de Azure VM Image Builder-service oplossen.
- Voordat u de sjabloon opnieuw probeert in te dienen, verwijdert u deze door de volgende opdrachten uit te voeren:
az resource delete \
--resource-group $imageResourceGroup \
--resource-type Microsoft.VirtualMachineImages/imageTemplates \
-n helloImageTemplateWin01
De build van de installatiekopieën starten
Start het proces voor het bouwen van afbeeldingen met behulp van az resource invoke-action.
az resource invoke-action \
--resource-group $imageResourceGroup \
--resource-type Microsoft.VirtualMachineImages/imageTemplates \
-n helloImageTemplateWin01 \
--action Run
Wacht totdat de build is voltooid.
Zie Problemen met de Azure VM Image Builder-service oplossen als er fouten optreden.
De VM maken
Maak de VIRTUELE machine met behulp van de installatiekopie die u hebt gemaakt. Vervang in de volgende code <het wachtwoord> door uw eigen wachtwoord voor de aibuser op de virtuele machine.
az vm create \
--resource-group $imageResourceGroup \
--name aibImgWinVm00 \
--admin-username aibuser \
--admin-password <password> \
--image $imageName \
--location $location
De aanpassing controleren
Maak een verbinding met extern bureaublad met de virtuele machine met behulp van de gebruikersnaam en het wachtwoord die u hebt ingesteld toen u de virtuele machine maakte. Open in de VIRTUELE machine een opdrachtpromptvenster en typ:
dir c:\
De volgende twee mappen worden gemaakt tijdens de aanpassing van de installatiekopieën:
- buildActions
- buildArtifacts
Uw resources opschonen
Wanneer u klaar bent, verwijdert u de resources die u hebt gemaakt.
Verwijder de VM Image Builder-sjabloon.
az resource delete \ --resource-group $imageResourceGroup \ --resource-type Microsoft.VirtualMachineImages/imageTemplates \ -n helloImageTemplateWin01
Verwijder de roltoewijzing, roldefinitie en gebruikersidentiteit.
az role assignment delete \ --assignee $imgBuilderCliId \ --role "$imageRoleDefName" \ --scope /subscriptions/$subscriptionID/resourceGroups/$imageResourceGroup az role definition delete --name "$imageRoleDefName" az identity delete --ids $imgBuilderId
Verwijder de resourcegroep van de installatiekopieën.
az group delete -n $imageResourceGroup
Volgende stappen
Zie de sjabloonreferentie voor VM Image Builder voor meer informatie over de onderdelen van het JSON-bestand dat in dit artikel wordt gebruikt.