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 een vmSize 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 installatiekopie 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. Als u deze resource in de resourcegroep wilt weergeven, gaat u naar Azure Portal en schakelt u verborgen typen weergeven in.

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

Verwijder de faseringsresourcegroep niet rechtstreeks. Verwijder eerst het artefact van de afbeeldingssjabloon, waardoor de faseringsresourcegroep wordt verwijderd.

Als de service een fout meldt wanneer u de configuratiesjabloon voor de installatiekopie verzendt, gaat u als volgt te werk:

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.

  1. Verwijder de VM Image Builder-sjabloon.

    az resource delete \
        --resource-group $imageResourceGroup \
        --resource-type Microsoft.VirtualMachineImages/imageTemplates \
        -n helloImageTemplateWin01
    
  2. 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
    
  3. 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.