Een JSON-sjabloon voor Azure Image Builder Bicep of ARM-sjabloon maken

Van toepassing op: ✔️ Virtuele Linux-machines voor Windows-VM's ✔️ ✔️ Flexibele schaalsets

Azure Image Builder maakt gebruik van een Bicep-bestand of een JSON-sjabloonbestand voor ARM-sjablonen om informatie door te geven aan de Image Builder-service. In dit artikel gaan we door naar de secties van de bestanden, zodat u uw eigen bestanden kunt bouwen. Zie de sjabloonreferentie voor de nieuwste API-versies. Zie De Azure Image Builder GitHub voor voorbeelden van volledige .json-bestanden.

De basisindeling is:

{
  "type": "Microsoft.VirtualMachineImages/imageTemplates",
  "apiVersion": "2022-02-14",
  "location": "<region>",
  "tags": {
    "<name>": "<value>",
    "<name>": "<value>"
  },
  "identity": {},
  "properties": {
    "buildTimeoutInMinutes": <minutes>,
    "customize": [],
    "errorHandling":[],
    "distribute": [],
    "optimize": [],
    "source": {},
    "stagingResourceGroup": "/subscriptions/<subscriptionID>/resourceGroups/<stagingResourceGroupName>",
    "validate": {},
    "vmProfile": {
      "vmSize": "<vmSize>",
      "osDiskSizeGB": <sizeInGB>,
      "vnetConfig": {
        "subnetId": "/subscriptions/<subscriptionID>/resourceGroups/<vnetRgName>/providers/Microsoft.Network/virtualNetworks/<vnetName>/subnets/<subnetName>",
        "proxyVmSize": "<vmSize>"
      },
      "userAssignedIdentities": [
              "/subscriptions/<subscriptionID>/resourceGroups/<identityRgName>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identityName1>",
        "/subscriptions/<subscriptionID>/resourceGroups/<identityRgName>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identityName2>",
        "/subscriptions/<subscriptionID>/resourceGroups/<identityRgName>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identityName3>",
        ...
      ]
    }
  }
}

Type en API-versie

Dit type is het resourcetype, dat moet zijn Microsoft.VirtualMachineImages/imageTemplates. De apiVersion wijzigingen worden na verloop van tijd gewijzigd wanneer de API verandert. Bekijk wat er nieuw is in Azure VM Image Builder voor alle belangrijke API-wijzigingen en functie-updates voor de Azure VM Image Builder-service.

"type": "Microsoft.VirtualMachineImages/imageTemplates",
"apiVersion": "2022-02-14",

Locatie

De locatie is de regio waar de aangepaste installatiekopieën worden gemaakt. De volgende regio's worden ondersteund:

  • VS - oost
  • VS - oost 2
  • VS - west-centraal
  • VS - west
  • VS - west 2
  • US - west 3
  • VS - zuid-centraal
  • Europa - noord
  • Europa -west
  • Azië - zuidoost
  • Australië - zuidoost
  • Australië - oost
  • Verenigd Koninkrijk Zuid
  • Verenigd Koninkrijk West
  • Brazilië - zuid
  • Canada - midden
  • India - centraal
  • Central US
  • Frankrijk - centraal
  • Duitsland - west-centraal
  • Japan - oost
  • VS - noord-centraal
  • Noorwegen - oost
  • Zwitserland - noord
  • Jio India West
  • VAE - noord
  • Azië - oost
  • Korea - centraal
  • Zuid-Afrika - noord
  • Qatar - centraal
  • USGov Arizona (openbare preview)
  • USGov Virginia (openbare preview)
  • China - noord 3 (openbare preview)
  • Zweden - centraal
  • Polen - centraal

Belangrijk

Registreer de functie Microsoft.VirtualMachineImages/FairfaxPublicPreview voor toegang tot de openbare preview van Azure Image Builder in Azure Government-regio's (USGov Arizona en USGov Virginia).

Belangrijk

Registreer de functie Microsoft.VirtualMachineImages/MooncakePublicPreview voor toegang tot de openbare preview van Azure Image Builder in de regio China - noord 3.

Als u toegang wilt krijgen tot de openbare preview van Azure VM Image Builder in de Azure Government-regio's (USGov Arizona en USGov Virginia), moet u de functie Microsoft.VirtualMachineImages/FairfaxPublicPreview registreren. Voer hiervoor de volgende opdracht uit in PowerShell of Azure CLI:

Register-AzProviderPreviewFeature -ProviderNamespace Microsoft.VirtualMachineImages -Name FairfaxPublicPreview

Als u toegang wilt krijgen tot de openbare preview van Azure VM Image Builder in de regio China - noord 3, moet u de functie Microsoft.VirtualMachineImages/MooncakePublicPreview registreren. Voer hiervoor de volgende opdracht uit in PowerShell of Azure CLI:

Register-AzProviderPreviewFeature -ProviderNamespace Microsoft.VirtualMachineImages -Name MooncakePublicPreview
"location": "<region>"

Gegevensresidentie

De Azure VM Image Builder-service slaat geen klantgegevens op buiten regio's die strikte vereisten voor gegevenslocatie van één regio hebben wanneer een klant een build in die regio aanvraagt. Als er een servicestoring optreedt voor regio's met vereisten voor gegevenslocatie, moet u Bicep-bestanden/sjablonen maken in een andere regio en geografie.

Zoneredundantie

Distributie ondersteunt zoneredundantie, VHD's worden standaard gedistribueerd naar een ZRS-account (Zone Redundant Storage) en de Versie van de Azure Compute Gallery (voorheen bekend als Shared Image Gallery) biedt ondersteuning voor een ZRS-opslagtype , indien opgegeven.

Codes

Tags zijn sleutel-waardeparen die u kunt opgeven voor de afbeelding die wordt gegenereerd.

Identiteit

Hieronder vindt u twee manieren om door de gebruiker toegewezen identiteiten toe te voegen.

Door de gebruiker toegewezen identiteit voor azure Image Builder-afbeeldingssjabloonresource

Vereist: voor Image Builder om machtigingen te hebben voor het lezen/schrijven van installatiekopieën en het lezen van scripts vanuit Azure Storage, moet u een door de gebruiker toegewezen Azure-identiteit met machtigingen voor de afzonderlijke resources maken. Zie Een installatiekopieën maken en een door de gebruiker toegewezen beheerde identiteit gebruiken om toegang te krijgen tot bestanden in een Azure-opslagaccount voor meer informatie over de werking van Image Builder-machtigingen en relevante stappen.

"identity": {
    "type": "UserAssigned",
    "userAssignedIdentities": {
        "<imgBuilderId>": {}
    }
}

De door de gebruiker toegewezen identiteit van de Image Builder-service:

  • Ondersteunt slechts één identiteit.
  • Biedt geen ondersteuning voor aangepaste domeinnamen.

Zie Wat zijn beheerde identiteiten voor Azure-resources? voor meer informatie. Zie Beheerde identiteiten configureren voor Azure-resources op een Azure-VM met behulp van Azure CLI voor meer informatie over het implementeren van deze functie.

Door de gebruiker toegewezen identiteit voor de build-VM van Image Builder

Deze eigenschap is alleen beschikbaar in API-versies 2021-10-01 of hoger.

Optioneel: de build-VM van Image Builder die wordt gemaakt door de Image Builder-service in uw abonnement, wordt gebruikt om de installatiekopieën te bouwen en aan te passen. Als u wilt dat de build-VM van Image Builder machtigingen heeft voor verificatie met andere services, zoals Azure Key Vault in uw abonnement, moet u een of meer door de gebruiker toegewezen Identiteiten van Azure maken die machtigingen hebben voor de afzonderlijke resources. Azure Image Builder kan deze door de gebruiker toegewezen identiteiten vervolgens koppelen aan de build-VM. Paserscripts die in de build-VM worden uitgevoerd, kunnen vervolgens tokens voor deze identiteiten ophalen en zo nodig communiceren met andere Azure-resources. Houd er rekening mee dat de door de gebruiker toegewezen identiteit voor Azure Image Builder de roltoewijzing Managed Identity Operator moet hebben voor alle door de gebruiker toegewezen identiteiten voor Azure Image Builder om deze te kunnen koppelen aan de build-VM.

Notitie

Houd er rekening mee dat er meerdere identiteiten kunnen worden opgegeven voor de build-VM van Image Builder, inclusief de identiteit die u hebt gemaakt voor de resource van de installatiekopieënsjabloon. Standaard wordt de identiteit die u hebt gemaakt voor de resource van de installatiekopieënsjabloon niet automatisch toegevoegd aan de build-VM.

"properties": {
  "vmProfile": {
    "userAssignedIdentities": [
      "/subscriptions/<subscriptionID>/resourceGroups/<identityRgName>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identityName>"
    ]
  }
}

De door de gebruiker toegewezen identiteit van de vm van Image Builder maken:

  • Ondersteunt een lijst met een of meer door de gebruiker toegewezen beheerde identiteiten die op de VIRTUELE machine moeten worden geconfigureerd.
  • Ondersteunt scenario's voor meerdere abonnementen (identiteit die in één abonnement is gemaakt terwijl de afbeeldingssjabloon wordt gemaakt in een ander abonnement onder dezelfde tenant).
  • Biedt geen ondersteuning voor scenario's voor meerdere tenants (identiteit die in de ene tenant is gemaakt terwijl de afbeeldingssjabloon in een andere tenant wordt gemaakt).

Raadpleeg voor meer informatie:

Eigenschappen: buildTimeoutInMinutes

Maximale duur die moet worden gewacht tijdens het bouwen van de afbeeldingssjabloon (inclusief alle aanpassingen, validaties en distributies).

Als u de eigenschap niet opgeeft of de waarde instelt op 0, wordt de standaardwaarde gebruikt. Dit is 240 minuten of vier uur. De minimumwaarde is 6 minuten en de maximumwaarde is 960 minuten of 16 uur. Wanneer de time-outwaarde wordt bereikt (of de build van de installatiekopieën al dan niet is voltooid), ziet u een fout die vergelijkbaar is met:

[ERROR] Failed while waiting for packerizer: Timeout waiting for microservice to
[ERROR] complete: 'context deadline exceeded'

Voor Windows is het niet raadzaam om de instelling minder dan 60 minuten in te stellen buildTimeoutInMinutes . Als u merkt dat u de time-out bereikt, bekijkt u de logboeken om te zien of de aanpassingsstap wacht op iets zoals gebruikersinvoer. Als u meer tijd nodig hebt om aanpassingen te voltooien, verhoogt u de buildTimeoutInMinutes waarde. Maar stel deze niet te hoog in, omdat u mogelijk moet wachten tot er een time-out optreedt voordat u een fout ziet.

Eigenschappen: aanpassen

Image Builder ondersteunt meerdere 'aanpassers'. Dit zijn functies die worden gebruikt om uw installatiekopieën aan te passen, zoals het uitvoeren van scripts of het opnieuw opstarten van servers.

Wanneer u het volgende gebruikt customize:

  • U kunt meerdere aanpassers gebruiken.
  • Aanpassers worden uitgevoerd in de volgorde die is opgegeven in de sjabloon.
  • Als één aanpasser mislukt, mislukt het hele aanpassingsonderdeel en rapporteert het een fout.
  • Test de scripts grondig voordat u ze in een sjabloon gebruikt. Foutopsporing van de scripts zelf is eenvoudiger.
  • Plaats geen gevoelige gegevens in de scripts. Inlineopdrachten kunnen worden weergegeven in de definitie van de afbeeldingssjabloon. Als u gevoelige informatie hebt (inclusief wachtwoorden, SAS-token, verificatietokens, enzovoort), moet deze worden verplaatst naar scripts in Azure Storage, waar verificatie is vereist.
  • De scriptlocaties moeten openbaar toegankelijk zijn, tenzij u MSI gebruikt.

De customize sectie is een matrix. De ondersteunde typen aanpassen zijn: Bestand, PowerShell, Shell, WindowsRestart en WindowsUpdate.

"customize": [
  {
    "type": "File",
    "destination": "string",
    "sha256Checksum": "string",
    "sourceUri": "string"
  },
  {
    "type": "PowerShell",
    "inline": [ "string" ],
    "runAsSystem": "bool",
    "runElevated": "bool",
    "scriptUri": "string",
    "sha256Checksum": "string",
    "validExitCodes": [ "int" ]
  },
  {
    "type": "Shell",
    "inline": [ "string" ],
    "scriptUri": "string",
    "sha256Checksum": "string"
  },
  {
    "type": "WindowsRestart",
    "restartCheckCommand": "string",
    "restartCommand": "string",
    "restartTimeout": "string"
  },
  {
    "type": "WindowsUpdate",
    "filters": [ "string" ],
    "searchCriteria": "string",
    "updateLimit": "int"
  }
]

Shell-aanpasser

De Shell customizer ondersteunt het uitvoeren van shell-scripts op Linux. De shellscripts moeten openbaar toegankelijk zijn of u moet een MSI voor Image Builder hebben geconfigureerd voor toegang tot deze scripts.

"customize": [
  {
    "type": "Shell",
    "name": "<name>",
    "scriptUri": "<link to script>",
    "sha256Checksum": "<sha256 checksum>"
  }
],
"customize": [
  {
    "type": "Shell",
    "name": "<name>",
    "inline": "<commands to run>"
  }
]

Eigenschappen aanpassen:

  • type – Shell.

  • name - naam voor het bijhouden van de aanpassing.

  • scriptUri - URI naar de locatie van het bestand.

  • inline : matrix van shell-opdrachten, gescheiden door komma's.

  • sha256Checksum - Waarde van sha256-controlesom van het bestand, u genereert deze waarde lokaal en vervolgens controleert Image Builder de controlesom en valideert.

    Als u sha256Checksum wilt genereren met behulp van een terminal op Mac/Linux, voert u de volgende opdracht uit: sha256sum <fileName>

Notitie

Inlineopdrachten worden opgeslagen als onderdeel van de definitie van de afbeeldingssjabloon. U kunt deze zien wanneer u de definitie van de installatiekopieën dumpt. Als u gevoelige opdrachten of waarden hebt (inclusief wachtwoorden, SAS-token, verificatietokens, enzovoort), wordt u aangeraden deze naar scripts te verplaatsen en een gebruikersidentiteit te gebruiken om te verifiëren bij Azure Storage.

Bevoegdheden van supergebruikers

Voorvoegsel van de opdrachten om sudo ze uit te voeren met supergebruikersbevoegdheden. U kunt de opdrachten toevoegen aan scripts of deze inline-opdrachten gebruiken, bijvoorbeeld:

"type": "Shell",
"name": "setupBuildPath",
"inline": [
    "sudo mkdir /buildArtifacts",
    "sudo cp /tmp/index.html /buildArtifacts/index.html"
]

Voorbeeld van een script met sudo waarnaar u kunt verwijzen met behulp van scriptUri:

#!/bin/bash -e

echo "Telemetry: creating files"
mkdir /myfiles

echo "Telemetry: running sudo 'as-is' in a script"
sudo touch /myfiles/somethingElevated.txt

Aanpassen van Windows voor opnieuw opstarten

Met de WindowsRestart aanpasser kunt u een Virtuele Windows-machine opnieuw opstarten en wachten tot de VIRTUELE machine weer online is. Met deze customizer kunt u software installeren waarvoor opnieuw opstarten is vereist.

"customize": [
  {
    "type": "WindowsRestart",
    "restartCommand": "shutdown /r /f /t 0",
    "restartCheckCommand": "echo Azure-Image-Builder-Restarted-the-VM  > c:\\buildArtifacts\\azureImageBuilderRestart.txt",
    "restartTimeout": "5m"
  }
]

Eigenschappen aanpassen:

  • Type: WindowsRestart.
  • restartCommand - Opdracht om het opnieuw opstarten uit te voeren (optioneel). De standaardwaarde is 'shutdown /r /f /t 0 /c \"packer restart\"'.
  • restartCheckCommand : opdracht om te controleren of opnieuw opstarten is geslaagd (optioneel).
  • restartTimeout - Time-out voor opnieuw opstarten opgegeven als een tekenreeks van grootte en eenheid. Bijvoorbeeld 5m (5 minuten) of 2h (2 uur). De standaardwaarde is: 5m.

Notitie

Er is geen aangepaste linux-herstart.

PowerShell-aanpasser

De PowerShell customizer ondersteunt het uitvoeren van PowerShell-scripts en inlineopdrachten in Windows. De scripts moeten openbaar toegankelijk zijn voor de IB om ze te kunnen openen.

"customize": [
  {
    "type": "PowerShell",
    "name":   "<name>",
    "scriptUri": "<path to script>",
    "runElevated": <true false>,
    "runAsSystem": <true false>,
    "sha256Checksum": "<sha256 checksum>"
  },
  {
    "type": "PowerShell",
    "name": "<name>",
    "inline": "<PowerShell syntax to run>",
    "validExitCodes": [<exit code>],
    "runElevated": <true or false>,
    "runAsSystem": <true or false>
  }
]

Eigenschappen aanpassen:

  • type – PowerShell.

  • scriptUri - URI naar de locatie van het PowerShell-scriptbestand.

  • inline: inlineopdrachten die moeten worden uitgevoerd, gescheiden door komma's.

  • validExitCodes : optioneel, geldige codes die kunnen worden geretourneerd met de opdracht script/inline. De eigenschap voorkomt gerapporteerde fouten van de opdracht script/inline.

  • runElevated : optioneel, booleaanse waarde, ondersteuning voor het uitvoeren van opdrachten en scripts met verhoogde machtigingen.

  • runAsSystem - Optioneel, Booleaanse waarde, bepaalt of het PowerShell-script moet worden uitgevoerd als de systeemgebruiker.

  • sha256Checksum : genereer de SHA256-controlesom van het bestand lokaal, werk de waarde van de controlesom bij naar kleine letters en Image Builder valideert de controlesom tijdens de implementatie van de installatiekopieënsjabloon.

    Gebruik de Cmdlet Get-FileHash in PowerShell om de sha256Checksum te genereren.

Bestandsaanpassing

Met de File aanpasser kan Image Builder een bestand downloaden uit een GitHub-opslagplaats of Azure-opslag. De customizer ondersteunt zowel Linux als Windows. Als u een build-pijplijn voor installatiekopieën hebt die afhankelijk is van buildartefacten, kunt u de bestandsaanpasser instellen om te downloaden vanuit de buildshare en de artefacten naar de installatiekopieën verplaatsen.

"customize": [
  {
    "type": "File",
    "name": "<name>",
    "sourceUri": "<source location>",
    "destination": "<destination>",
    "sha256Checksum": "<sha256 checksum>"
  }
]

Eigenschappen van bestandsaanpassingsfunctie:

  • sourceUri : een toegankelijk opslageindpunt, dit eindpunt kan GitHub of Azure Storage zijn. U kunt slechts één bestand downloaden, niet een volledige map. Als u een map wilt downloaden, gebruikt u een gecomprimeerd bestand en maakt u het bestand op met behulp van de Shell- of PowerShell-aanpassers.

    Notitie

    Als de sourceUri een Azure Storage-account is, ongeacht of de blob openbaar is gemarkeerd, moet u de beheerde gebruikersidentiteitsmachtigingen verlenen voor leestoegang op de blob. Zie dit voorbeeld om de opslagmachtigingen in te stellen.

  • bestemming : het volledige doelpad en de bestandsnaam. Elk pad waarnaar wordt verwezen en submappen moeten bestaan, gebruik de Shell- of PowerShell-aanpassers om deze paden vooraf in te stellen. U kunt de scriptaanpassers gebruiken om het pad te maken.

Deze customizer wordt ondersteund door Windows-mappen en Linux-paden, maar er zijn enkele verschillen:

  • Linux: het enige pad naar image builder kan schrijven is /tmp.
  • Windows: geen padbeperking, maar het pad moet bestaan.

Als er een fout optreedt bij het downloaden van het bestand of het in een opgegeven map plaatst, mislukt de stap aanpassen en wordt deze fout weergegeven in de customization.log.

Notitie

De bestandsaanpasser is alleen geschikt voor kleine bestandsdownloads, < 20 MB. Voor grotere bestandsdownloads gebruikt u een script of inline-opdracht en gebruikt u vervolgens code voor het downloaden van bestanden, zoals Linux wget of curlWindows, Invoke-WebRequest. Voor bestanden die zich in Azure Storage bevinden, moet u ervoor zorgen dat u een identiteit met machtigingen toewijst om dat bestand weer te geven aan de build-VM door de volgende documentatie te volgen: Door de gebruiker toegewezen identiteit voor de build-VM van Image Builder. Elk bestand dat niet is opgeslagen in Azure, moet openbaar toegankelijk zijn voor Azure Image Builder om het te kunnen downloaden.

  • sha256Checksum : genereer de SHA256-controlesom van het bestand lokaal, werk de waarde van de controlesom bij naar kleine letters en Image Builder valideert de controlesom tijdens de implementatie van de installatiekopieënsjabloon.

    Gebruik de Cmdlet Get-FileHash in PowerShell om de sha256Checksum te genereren.

Windows Update-aanpassing

De WindowsUpdate customizer is gebaseerd op de Community Windows Update Provisioner voor Packer. Dit is een opensource-project dat wordt onderhouden door de Packer-community. Microsoft test en valideert de inrichting met de Image Builder-service en biedt ondersteuning voor het onderzoeken van problemen en het werk om problemen op te lossen, maar het opensource-project wordt niet officieel ondersteund door Microsoft. Zie de projectopslagplaats voor gedetailleerde documentatie over en hulp bij Windows Update Provisioner.

"customize": [
  {
    "type": "WindowsUpdate",
    "searchCriteria": "IsInstalled=0",
    "filters": [
      "exclude:$_.Title -like '*Preview*'",
      "include:$true"
    ],
    "updateLimit": 20
  }
]

Eigenschappen van de aanpasser:

  • type – WindowsUpdate.
  • searchCriteria - Optioneel, definieert welk type updates worden geïnstalleerd (zoals Aanbevolen of Belangrijk), BrowseOnly=0 en IsInstalled=0 (Aanbevolen) is de standaardinstelling.
  • filters – Optioneel, kunt u een filter opgeven om updates op te nemen of uit te sluiten.
  • updateLimit – Optioneel, definieert hoeveel updates kunnen worden geïnstalleerd, standaard 1000.

Notitie

De Windows Update-aanpassing kan mislukken als er openstaande Windows-herstarts zijn of als er toepassingsinstallaties nog steeds worden uitgevoerd, meestal ziet u deze fout in de customization.log, System.Runtime.InteropServices.COMException (0x80240016): Exception from HRESULT: 0x80240016. Het is raadzaam om toepassingen toe te voegen aan Windows Restart en/of om toepassingen voldoende tijd te geven om hun installaties te voltooien met behulp van slaap- of wachtopdrachten in de inlineopdrachten of scripts voordat u Windows Update uitvoert.

Generaliseren

Azure Image Builder voert standaard ook code uit deprovision aan het einde van elke aanpassingsfase van de installatiekopieën om de installatiekopieën te generaliseren. Generaliseren is een proces waarbij de installatiekopieën zijn ingesteld, zodat deze opnieuw kunnen worden gebruikt om meerdere VM's te maken. Voor Virtuele Windows-machines maakt Azure Image Builder gebruik van Sysprep. Voor Linux wordt Azure Image Builder uitgevoerd waagent -deprovision.

De opdrachten die gebruikers van Image Builder kunnen generaliseren, zijn mogelijk niet geschikt voor elke situatie. In Azure Image Builder kunt u deze opdracht, indien nodig, aanpassen.

Als u bestaande aanpassingen migreert en u verschillende Sysprep-/waagent-opdrachten gebruikt, kunt u algemene opdrachten van Image Builder gebruiken en als het maken van de VIRTUELE machine mislukt, gebruikt u uw eigen Sysprep- of waagent-opdrachten.

Als Azure Image Builder een aangepaste Windows-installatiekopie maakt en u er een VIRTUELE machine van maakt, kunt u vaststellen dat het maken van de VIRTUELE machine mislukt of niet is voltooid, moet u de Documentatie van Windows Server Sysprep raadplegen of een ondersteuningsaanvraag indienen bij het ondersteuningsteam van Windows Server Sysprep, die problemen met het juiste Sysprep-gebruik kan oplossen en adviseren.

Standaardopdracht Sysprep

Write-Output '>>> Waiting for GA Service (RdAgent) to start ...'
while ((Get-Service RdAgent).Status -ne 'Running') { Start-Sleep -s 5 }
Write-Output '>>> Waiting for GA Service (WindowsAzureTelemetryService) to start ...'
while ((Get-Service WindowsAzureTelemetryService) -and ((Get-Service WindowsAzureTelemetryService).Status -ne 'Running')) { Start-Sleep -s 5 }
Write-Output '>>> Waiting for GA Service (WindowsAzureGuestAgent) to start ...'
while ((Get-Service WindowsAzureGuestAgent).Status -ne 'Running') { Start-Sleep -s 5 }
if( Test-Path $Env:SystemRoot\system32\Sysprep\unattend.xml ) {
  Write-Output '>>> Removing Sysprep\unattend.xml ...'
  Remove-Item $Env:SystemRoot\system32\Sysprep\unattend.xml -Force
}
if (Test-Path $Env:SystemRoot\Panther\unattend.xml) {
  Write-Output '>>> Removing Panther\unattend.xml ...'
  Remove-Item $Env:SystemRoot\Panther\unattend.xml -Force
}
Write-Output '>>> Sysprepping VM ...'
& $Env:SystemRoot\System32\Sysprep\Sysprep.exe /oobe /generalize /quiet /quit
while($true) {
  $imageState = (Get-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\State).ImageState
  Write-Output $imageState
  if ($imageState -eq 'IMAGE_STATE_GENERALIZE_RESEAL_TO_OOBE') { break }
  Start-Sleep -s 5
}
Write-Output '>>> Sysprep complete ...'

Standaardopdracht voor het ongedaan maken van de inrichting van Linux

WAAGENT=/usr/sbin/waagent
waagent -version 1> /dev/null 2>&1
if [ $? -eq 0 ]; then
  WAAGENT=waagent
fi
$WAAGENT -force -deprovision+user && export HISTSIZE=0 && sync

De opdrachten overschrijven

Als u de opdrachten wilt overschrijven, gebruikt u de PowerShell- of Shell-scriptinrichtingen om de opdrachtbestanden met de exacte bestandsnaam te maken en plaatst u deze in de juiste mappen:

  • Windows: c:\DeprovisioningScript.ps1
  • Linux: /tmp/DeprovisioningScript.sh

Image Builder leest deze opdrachten, deze opdrachten worden naar de AIB-logboeken geschreven. customization.log Zie het oplossen van problemen met het verzamelen van logboeken.

Eigenschappen: errorHandling

Met de errorHandling eigenschap kunt u configureren hoe fouten worden verwerkt tijdens het maken van de installatiekopie.

{
  "errorHandling": {
    "onCustomizerError": "abort",
    "onValidationError": "cleanup"
  }
}

Met de errorHandling eigenschap kunt u configureren hoe fouten worden verwerkt tijdens het maken van de installatiekopie. Het heeft twee eigenschappen:

  • onCustomizerError : hiermee geeft u de actie op die moet worden uitgevoerd wanneer er een fout optreedt tijdens de aanpasserfase van het maken van de installatiekopie.
  • onValidationError : hiermee geeft u de actie op die moet worden uitgevoerd wanneer er een fout optreedt tijdens de validatie van de afbeeldingssjabloon.

De errorHandling eigenschap heeft ook twee mogelijke waarden voor het afhandelen van fouten tijdens het maken van de installatiekopie:

  • opschonen : zorgt ervoor dat tijdelijke resources die door Packer zijn gemaakt, worden opgeschoond, zelfs als Packer of een van de aanpassingen/validaties een fout ondervindt. Dit onderhoudt achterwaartse compatibiliteit met bestaand gedrag.
  • afgebroken : als Packer een fout tegenkomt, slaat de AIB-service (Azure Image Builder) het opschonen van tijdelijke resources over. Als eigenaar van de AIB-sjabloon bent u verantwoordelijk voor het opschonen van deze resources uit uw abonnement. Deze resources kunnen nuttige informatie bevatten, zoals logboeken en bestanden die achterblijven in een tijdelijke VM, wat kan helpen bij het onderzoeken van de fout die is opgetreden door Packer.

Eigenschappen: distribueren

Azure Image Builder ondersteunt drie distributiedoelen:

  • ManagedImage - Beheerde installatiekopie.
  • sharedImage - Azure Compute Gallery .
  • VHD - VHD in een opslagaccount.

U kunt een installatiekopieën distribueren naar beide doeltypen in dezelfde configuratie.

Notitie

De standaardopdracht AIB sysprep bevat geen '/mode:vm', maar deze eigenschap is mogelijk vereist bij het maken van installatiekopieën waarop de HyperV-rol is geïnstalleerd. Als u dit opdrachtargument wilt toevoegen, moet u de sysprep-opdracht overschrijven.

Omdat u meerdere doelen kunt hebben om naar te distribueren, behoudt Image Builder een status voor elk distributiedoel dat kan worden geopend door een query uit te voeren op de runOutputName. Het runOutputName is een object dat u kunt opvragen na distributie voor informatie over die distributie. U kunt bijvoorbeeld een query uitvoeren op de locatie van de VHD of regio's waarnaar de versie van de installatiekopieën is gerepliceerd, of sig-installatiekopieën die zijn gemaakt. Dit is een eigenschap van elk distributiedoel. Het runOutputName moet uniek zijn voor elk distributiedoel. Hier volgt een voorbeeld voor het uitvoeren van query's op een Azure Compute Gallery-distributie:

subscriptionID=<subcriptionID>
imageResourceGroup=<resourceGroup of image template>
runOutputName=<runOutputName>

az resource show \
  --ids "/subscriptions/$subscriptionID/resourcegroups/$imageResourceGroup/providers/Microsoft.VirtualMachineImages/imageTemplates/ImageTemplateLinuxRHEL77/runOutputs/$runOutputName"  \
  --api-version=2021-10-01

Uitvoer:

{
  "id": "/subscriptions/xxxxxx/resourcegroups/rheltest/providers/Microsoft.VirtualMachineImages/imageTemplates/ImageTemplateLinuxRHEL77/runOutputs/rhel77",
  "identity": null,
  "kind": null,
  "location": null,
  "managedBy": null,
  "name": "rhel77",
  "plan": null,
  "properties": {
    "artifactId": "/subscriptions/xxxxxx/resourceGroups/aibDevOpsImg/providers/Microsoft.Compute/galleries/devOpsSIG/images/rhel/versions/0.24105.52755",
    "provisioningState": "Succeeded"
  },
  "resourceGroup": "rheltest",
  "sku": null,
  "tags": null,
  "type": "Microsoft.VirtualMachineImages/imageTemplates/runOutputs"
}

Distribueren: managedImage

De uitvoer van de installatiekopieën is een beheerde installatiekopieënresource.

{
  "type":"ManagedImage",
  "imageId": "<resource ID>",
  "location": "<region>",
  "runOutputName": "<name>",
  "artifactTags": {
      "<name>": "<value>",
      "<name>": "<value>"
  }
}

Eigenschappen distribueren:

  • type – ManagedImage
  • imageId – Resource-id van de doelinstallatiekopieën, verwachte indeling: /subscriptions/<subscriptionId>/resourceGroups/<destinationResourceGroupName>/providers/Microsoft.Compute/images/<imageName>
  • locatie : locatie van de beheerde installatiekopieën.
  • runOutputName : unieke naam voor het identificeren van de distributie.
  • artifactTags : optionele door de gebruiker opgegeven sleutel\waardetags .

Notitie

De doelresourcegroep moet bestaan. Als u wilt dat de installatiekopieën worden gedistribueerd naar een andere regio, wordt de implementatietijd verhoogd.

Distribueren: sharedImage

De Azure Compute Gallery is een nieuwe Image Management-service waarmee u aangepaste installatiekopieën kunt repliceren, versiebeheer en delen van aangepaste installatiekopieën kunt beheren. Azure Image Builder biedt ondersteuning voor distributie met deze service, zodat u installatiekopieën kunt distribueren naar regio's die worden ondersteund door Azure Compute Gallerys.

een Azure Compute Gallery bestaat uit:

  • Galerie - Container voor meerdere installatiekopieën. Er wordt een galerie geïmplementeerd in één regio.
  • Definities van afbeeldingen : een conceptuele groepering voor afbeeldingen.
  • Installatiekopieversies : een installatiekopietype dat wordt gebruikt voor het implementeren van een VIRTUELE machine of schaalset. Installatiekopieversies kunnen worden gerepliceerd naar andere regio's waar VM's moeten worden geïmplementeerd.

Voordat u naar de galerie kunt distribueren, moet u een galerie en een definitie van een installatiekopieën maken. Zie Een galerie maken.

Notitie

De versie-id van de installatiekopieën moet verschillen van alle installatiekopieën die zich in de bestaande Azure Compute-galerie bevinden.

{
  "type": "SharedImage",
  "galleryImageId": "<resource ID>",
  "runOutputName": "<name>",
  "artifactTags": {
      "<name>": "<value>",
      "<name>": "<value>"
  }
}

De volgende JSON is een voorbeeld van het gebruik van het replicationRegions veld om te distribueren naar een Azure Compute Gallery.

  "replicationRegions": [
      "<region where the gallery is deployed>",
      "<region>"
  ]

Notitie

replicationRegions is afgeschaft voor galeriedistributies, zoals targetRegions de bijgewerkte eigenschap is. Zie targetRegions voor meer informatie.

Distribueren: targetRegions

De volgende JSON is een voorbeeld van het gebruik van het veld targetRegions om te distribueren naar een Azure Compute Gallery.

"distribute": [
      {
        "type": "SharedImage",
        "galleryImageId": "<resource ID>",
        "runOutputName": "<name>",
        "artifactTags": {
          "<name>": "<value>",
          "<name>": "<value>"
        },
        "targetRegions": [
             {
              "name": "eastus",
              "replicaCount": 2,
              "storageAccountType": "Standard_ZRS"
             },
             {
              "name": "eastus2",
              "replicaCount": 3,
              "storageAccountType": "Premium_LRS"
             }
          ]
       },
    ]

Eigenschappen voor galerieën distribueren:

  • type - sharedImage

  • galleryImageId : id van de Azure Compute Gallery. Deze eigenschap kan in twee indelingen worden opgegeven:

    • Automatische versiebeheer: Image Builder genereert een monotone versienummer voor u. Deze eigenschap is handig als u installatiekopieën van dezelfde sjabloon wilt behouden: De indeling is: /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/galleries/<sharedImageGalleryName>/images/<imageGalleryName>.
    • Expliciete versiebeheer: u kunt het versienummer doorgeven dat u wilt gebruiken voor de opbouwfunctie voor installatiekopieën. De indeling is: /subscriptions/<subscriptionID>/resourceGroups/<rgName>/providers/Microsoft.Compute/galleries/<sharedImageGalName>/images/<imageDefName>/versions/<version - for example: 1.1.1>
  • runOutputName : unieke naam voor het identificeren van de distributie.

  • artifactTags : optionele door de gebruiker opgegeven sleutel\waardetags .

  • replicationRegions : matrix van regio's voor replicatie. Een van de regio's moet de regio zijn waar de galerie is geïmplementeerd. Het toevoegen van regio's betekent een toename van de buildtijd, omdat de build pas wordt voltooid als de replicatie is voltooid. Dit veld is afgeschaft vanaf API-versie 2022-07-01. Gebruik targetRegions dit veld bij het distribueren van een type SharedImage.

  • targetRegions : een matrix van regio's voor replicatie. Het is nieuw geïntroduceerd als onderdeel van de API 2022-07-01 en is alleen van toepassing op het SharedImage type distribueren.

  • excludeFromLatest (optioneel): hiermee kunt u de versie van de installatiekopieën markeren die u maakt, niet worden gebruikt als de meest recente versie in de galeriedefinitie. De standaardwaarde is 'false'.

  • storageAccountType (optioneel): AIB biedt ondersteuning voor het opgeven van deze typen opslag voor de installatiekopieënversie die moet worden gemaakt:

    • "Standard_LRS"
    • "Standard_ZRS",

Notitie

Als de afbeeldingssjabloon en waarnaar wordt verwezen image definition zich niet op dezelfde locatie bevinden, ziet u extra tijd om afbeeldingen te maken. Image Builder heeft location momenteel geen parameter voor de resource van de installatiekopieënversie, we nemen deze van het bovenliggende image definitionelement. Als een installatiekopieëndefinitie zich bijvoorbeeld bevindt westus en u de versie van de installatiekopieën wilt repliceren naar eastus, wordt er een blob gekopieerd naar westus, wordt er een resource voor de versie van de installatiekopieën westus gemaakt en vervolgens gerepliceerd naar eastus. Om de extra replicatietijd te voorkomen, moet u ervoor zorgen dat de sjabloon en de image definition installatiekopieën zich op dezelfde locatie bevinden.

Versioning

De versiebeheereigenschap is alleen voor het sharedImage distributietype. Het is een opsomming met twee mogelijke waarden:

  • nieuwste - Nieuw strikt toenemend schema per ontwerp
  • bron : schema op basis van het versienummer van de broninstallatiekopieën.

Het standaardschema voor versienummering is latest. Het meest recente schema heeft een extra eigenschap, 'major', waarmee de primaire versie wordt opgegeven waaronder de meest recente versie moet worden gegenereerd.

Notitie

De bestaande versiegeneratielogica voor sharedImage distributie is afgeschaft. Er zijn twee nieuwe opties beschikbaar: monotonisch verhogende versies die altijd de nieuwste versie in een galerie zijn en versies die zijn gegenereerd op basis van het versienummer van de broninstallatiekopie. De opsomming waarmee het schema voor het genereren van versies wordt opgegeven, maakt uitbreiding in de toekomst mogelijk met aanvullende schema's voor het genereren van versies.

    "distribute": [
        "versioning": {
            "scheme": "Latest",
            "major": 1
        }
    ]

versiebeheereigenschappen:

  • schema : genereer een nieuw versienummer voor distributie. Latest of Source twee mogelijke waarden zijn.
  • major : hiermee geeft u de primaire versie op waaronder de meest recente versie moet worden gegenereerd. Alleen van toepassing wanneer de scheme is ingesteld op Latest. Bijvoorbeeld in een galerie met de volgende versies gepubliceerd: 0.1.1, 0.1.2, 1.0.0, 1.0.1, 1.1.0, 1.1.1, 1.2.0, 2.0.0, 2.0.1, 2.1.0
    • Als de primaire versie niet is ingesteld of is ingesteld op 2, genereert het Latest schema versie 2.1.1
    • Als de primaire versie is ingesteld op 1, genereert het meest recente schema versie 1.2.1
    • Met de primaire set op 0 genereert het meest recente schema versie 0.1.3

Distribueren: VHD

U kunt uitvoeren naar een VHD. Vervolgens kunt u de VHD kopiëren en gebruiken om naar Azure MarketPlace te publiceren of met Azure Stack te gebruiken.

{
  "type": "VHD",
  "runOutputName": "<VHD name>",
  "artifactTags": {
      "<name>": "<value>",
      "<name>": "<value>"
  }
}

Ondersteuning voor het besturingssysteem: Windows en Linux

VHD-parameters distribueren:

  • type - VHD.
  • runOutputName : unieke naam voor het identificeren van de distributie.
  • tags : optionele door de gebruiker opgegeven sleutel-waardepaartags.

Met Azure Image Builder kan de gebruiker geen opslagaccountlocatie opgeven, maar u kunt een query uitvoeren op de status van de runOutputs locatie om de locatie op te halen.

az resource show \
  --ids "/subscriptions/$subscriptionId/resourcegroups/<imageResourceGroup>/providers/Microsoft.VirtualMachineImages/imageTemplates/<imageTemplateName>/runOutputs/<runOutputName>"  | grep artifactUri

Notitie

Nadat de VHD is gemaakt, kopieert u deze zo snel mogelijk naar een andere locatie. De VHD wordt opgeslagen in een opslagaccount in de tijdelijke resourcegroep die is gemaakt wanneer de installatiekopieënsjabloon wordt verzonden naar de Azure Image Builder-service. Als u de afbeeldingssjabloon verwijdert, raakt u de VHD kwijt.

De volgende JSON distribueert de installatiekopieën als een VHD naar een aangepast opslagaccount.

"distribute": [
  {
    "type": "VHD",
    "runOutputName": "<VHD name>",
    "artifactTags": {
        "<name>": "<value>",
        "<name>": "<value>"
    },
    "uri": "<replace with Azure storage URI>"
  }
]

VHD-eigenschappen distribueren:

URI : optionele Azure Storage-URI voor de gedistribueerde VHD-blob. Laat het gebruik van de standaardwaarde (lege tekenreeks) weg. In dat geval wordt VHD gepubliceerd naar het opslagaccount in de faseringsresourcegroep.

Eigenschappen: optimaliseren

De optimize eigenschap kan worden ingeschakeld tijdens het maken van een VM-installatiekopie en stelt VM-optimalisatie in staat om de aanmaaktijd van de installatiekopie te verbeteren.

"optimize": {
      "vmboot": {
        "state": "Enabled"
      }
    }
  • vmboot: Een configuratie met betrekking tot het opstartproces van de virtuele machine (VM), die wordt gebruikt om optimalisaties te beheren die de opstarttijd of andere prestatieaspecten kunnen verbeteren.
  • status: de status van de opstartoptimalisatiefunctie binnen vmboot, met de waarde Enabled die aangeeft dat de functie is ingeschakeld om de aanmaaktijd van de installatiekopie te verbeteren.

Zie VM-optimalisatie voor galerie-installatiekopieën met Azure VM Image Builder voor meer informatie.

Eigenschappen: bron

De source sectie bevat informatie over de broninstallatiekopieën die worden gebruikt door Image Builder. Azure Image Builder ondersteunt alleen gegeneraliseerde installatiekopieën als broninstallatiekopieën, gespecialiseerde installatiekopieën worden op dit moment niet ondersteund.

Voor de API is een SourceType api vereist die de bron voor de build van de installatiekopieën definieert, momenteel zijn er drie typen:

  • PlatformImage: geeft aan dat de broninstallatiekopie een Marketplace-installatiekopie is.
  • ManagedImage: wordt gebruikt bij het starten vanaf een gewone beheerde installatiekopie.
  • SharedImageVersion: wordt gebruikt wanneer u een versie van een installatiekopie gebruikt in een Azure Compute Gallery als bron.

Notitie

Wanneer u bestaande aangepaste Windows-installatiekopieën gebruikt, kunt u de Sysprep-opdracht maximaal drie keer uitvoeren op één Windows 7- of Windows Server 2008 R2-installatiekopieën of 1001 keer op één Windows-installatiekopieën voor latere versies; Zie de sysprep-documentatie voor meer informatie.

PlatformImage-bron

Azure Image Builder biedt ondersteuning voor Windows Server- en client- en Linux Azure Marketplace-installatiekopieën. Zie Meer informatie over Azure Image Builder voor de volledige lijst.

"source": {
  "type": "PlatformImage",
  "publisher": "Canonical",
  "offer": "UbuntuServer",
  "sku": "18.04-LTS",
  "version": "latest"
}

De eigenschappen hier zijn hetzelfde die worden gebruikt om VM's te maken, met behulp van AZ CLI, voer de onderstaande opdracht uit om de eigenschappen op te halen:

az vm image list -l westus -f UbuntuServer -p Canonical --output table --all

U kunt in de versie de versie gebruiken latest , de versie wordt geëvalueerd wanneer de installatiekopieën worden gebouwd, niet wanneer de sjabloon wordt verzonden. Als u deze functionaliteit gebruikt met het doel van de Azure Compute Gallery, kunt u voorkomen dat u de sjabloon opnieuw verzendt en de build van de installatiekopieën met intervallen opnieuw uitvoert, zodat uw installatiekopieën opnieuw worden gemaakt op basis van de meest recente installatiekopieën.

Ondersteuning voor informatie over marktplaatsplannen

U kunt ook plangegevens opgeven, bijvoorbeeld:

"source": {
  "type": "PlatformImage",
  "publisher": "RedHat",
  "offer": "rhel-byos",
  "sku": "rhel-lvm75",
  "version": "latest",
  "planInfo": {
    "planName": "rhel-lvm75",
    "planProduct": "rhel-byos",
    "planPublisher": "redhat"
  }
}

ManagedImage-bron

Hiermee stelt u de broninstallatiekopieën in als een bestaande beheerde installatiekopieën van een gegeneraliseerde VHD of VM.

Notitie

De beheerde broninstallatiekopieën moeten van een ondersteund besturingssysteem zijn en de installatiekopieën moeten zich in hetzelfde abonnement en dezelfde regio bevinden als uw Azure Image Builder-sjabloon.

"source": {
  "type": "ManagedImage",
  "imageId": "/subscriptions/<subscriptionId>/resourceGroups/{destinationResourceGroupName}/providers/Microsoft.Compute/images/<imageName>"
}

Dit imageId moet de ResourceId van de beheerde installatiekopieën zijn. Gebruik az image list deze lijst om beschikbare afbeeldingen weer te geven.

SharedImageVersion-bron

Hiermee stelt u de broninstallatiekopieën in als een bestaande versie van de installatiekopieën in een Azure Compute Gallery.

Notitie

De versie van de gedeelde broninstallatiekopieën moet van een ondersteund besturingssysteem zijn en de versie van de installatiekopieën moet zich in dezelfde regio bevinden als uw Azure Image Builder-sjabloonsjabloon, als dat niet het is, de versie van de installatiekopieën repliceren naar de regio Image Builder-sjabloon.

"source": {
  "type": "SharedImageVersion",
  "imageVersionID": "/subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>/providers/Microsoft.Compute/galleries/<sharedImageGalleryName>/images/<imageDefinitionName/versions/<imageVersion>"
}
  • imageVersionId - RESOURCE-id van arm-sjabloon van de versie van de installatiekopieën. Wanneer de naam van de installatiekopieënversie 'nieuwste' is, wordt de versie geëvalueerd wanneer de installatiekopieën worden gebouwd. Dit imageVersionId moet de ResourceId versie van de installatiekopieën zijn. Gebruik az sig image-version list om installatiekopieën weer te geven.

Met de volgende JSON wordt de broninstallatiekopieën ingesteld als een afbeelding die is opgeslagen in een direct gedeelde galerie.

Notitie

De Direct Shared Gallery is momenteel beschikbaar als preview-versie.

    source: {
      "type": "SharedImageVersion",
      "imageVersionId": "<replace with resourceId of the image stored in the Direct Shared Gallery>"
    },

Met de volgende JSON wordt de broninstallatiekopieën ingesteld als de meest recente versie van de installatiekopieën voor een installatiekopieën die zijn opgeslagen in een Azure Compute Gallery.

"properties": {
    "source": {
        "type": "SharedImageVersion",
        "imageVersionId": "/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/galleries/<azureComputeGalleryName>/images/<imageDefinitionName>/versions/latest"
    }
},

Eigenschappen van SharedImageVersion:

imageVersionId - RESOURCE-id van arm-sjabloon van de versie van de installatiekopieën. Wanneer de naam van de installatiekopieënversie 'nieuwste' is, wordt de versie geëvalueerd wanneer de installatiekopieën worden gebouwd.

Eigenschappen: stagingResourceGroup

De stagingResourceGroup eigenschap bevat informatie over de faseringsresourcegroep die de Image Builder-service maakt voor gebruik tijdens het buildproces van de installatiekopieën. Dit stagingResourceGroup is een optionele eigenschap voor iedereen die meer controle wil over de resourcegroep die is gemaakt door Image Builder tijdens het buildproces van de installatiekopieën. U kunt uw eigen resourcegroep maken en deze opgeven in de stagingResourceGroup sectie of image builder namens u laten maken.

Belangrijk

De opgegeven faseringsresourcegroep kan niet worden gekoppeld aan een andere afbeeldingssjabloon, moet leeg zijn (geen resources binnen), in dezelfde regio als de afbeeldingssjabloon en RBAC 'Inzender' of 'Eigenaar' hebben toegepast op de identiteit die is toegewezen aan de resource van de afbeeldingssjabloon van Azure Image Builder.

"properties": {
  "stagingResourceGroup": "/subscriptions/<subscriptionID>/resourceGroups/<stagingResourceGroupName>"
}

Scenario's voor het maken van sjablonen

  • De eigenschap stagingResourceGroup blijft leeg

    Als de stagingResourceGroup eigenschap niet is opgegeven of opgegeven met een lege tekenreeks, maakt de Image Builder-service een faseringsresourcegroep met de standaardnaamconventie 'IT_***'. In de faseringsresourcegroep worden de standaardtags toegepast: createdBy, , imageTemplateNameimageTemplateResourceGroupName. Daarnaast wordt de standaard-RBAC toegepast op de identiteit die is toegewezen aan de Azure Image Builder-sjabloonresource. Dit is 'Inzender'.

  • De eigenschap stagingResourceGroup wordt opgegeven met een resourcegroep die bestaat

    Als de stagingResourceGroup eigenschap is opgegeven met een resourcegroep die wel bestaat, controleert de Image Builder-service of de resourcegroep niet is gekoppeld aan een andere afbeeldingssjabloon, leeg is (geen resources binnen), in dezelfde regio als de afbeeldingssjabloon en of RBAC 'Inzender' of 'Eigenaar' is toegepast op de identiteit die is toegewezen aan de resource van de Afbeeldingsbouwer-installatiekopieënsjabloon. Als niet aan een van de bovengenoemde vereisten wordt voldaan, wordt er een fout gegenereerd. Aan de faseringsresourcegroep zijn de volgende tags toegevoegd: usedBy, , imageTemplateNameimageTemplateResourceGroupName. Bestaande tags worden niet verwijderd.

Belangrijk

U moet de rol inzender toewijzen aan de resourcegroep voor de service-principal die overeenkomt met de app van de eerste partij van Azure Image Builder wanneer u probeert een bestaande resourcegroep en VNet op te geven aan de Azure Image Builder-service met een Windows-broninstallatiekopieën. Voor de CLI-opdracht en portal-instructies voor het toewijzen van de rol inzender aan de resourcegroep raadpleegt u de volgende documentatie over het oplossen van problemen met VM Azure Image Builder: Autorisatiefout bij het maken van een schijf

  • De eigenschap stagingResourceGroup is opgegeven met een resourcegroep die niet bestaat

    Als de stagingResourceGroup eigenschap is opgegeven met een resourcegroep die niet bestaat, maakt de Image Builder-service een faseringsresourcegroep met de naam in de stagingResourceGroup eigenschap. Er wordt een fout weergegeven als de opgegeven naam niet voldoet aan de Azure-naamgevingsvereisten voor resourcegroepen. In de faseringsresourcegroep worden de standaardtags toegepast: createdBy, , imageTemplateNameimageTemplateResourceGroupName. Standaard is voor de identiteit die is toegewezen aan de resource van de Afbeeldingssjabloon van Azure Image Builder de RBAC Inzender toegepast in de resourcegroep.

Sjabloonverwijdering

Elke faseringsresourcegroep die door de Image Builder-service is gemaakt, wordt verwijderd nadat de installatiekopieënsjabloon is verwijderd. De verwijdering omvat faseringsresourcegroepen die zijn opgegeven in de stagingResourceGroup eigenschap, maar die niet bestonden vóór de installatiekopiebuild.

Als Image Builder de faseringsresourcegroep niet heeft gemaakt, maar de resources in de resourcegroep, worden deze resources verwijderd nadat de installatiekopieënsjabloon is verwijderd, omdat de Image Builder-service over de juiste machtigingen of rol beschikt om resources te verwijderen.

Eigenschappen: valideren

U kunt de validate eigenschap gebruiken om platforminstallatiekopieën en aangepaste installatiekopieën te valideren die u maakt, ongeacht of u Azure Image Builder hebt gebruikt om deze te maken.

Azure Image Builder ondersteunt de modus 'Source-Validation-Only' die kan worden ingesteld met behulp van de sourceValidationOnly eigenschap. Als de sourceValidationOnly eigenschap is ingesteld op true, wordt de afbeelding die in de source sectie is opgegeven, rechtstreeks gevalideerd. Er wordt geen afzonderlijke build uitgevoerd om een aangepaste installatiekopieën te genereren en vervolgens te valideren.

De inVMValidations eigenschap maakt gebruik van een lijst met validators die op de afbeelding worden uitgevoerd. Azure Image Builder ondersteunt validators voor File, PowerShell en Shell.

De continueDistributeOnFailure eigenschap is verantwoordelijk voor het feit of de uitvoerafbeeldingen worden gedistribueerd als de validatie mislukt. Als de validatie mislukt en deze eigenschap is ingesteld op false, worden de uitvoerafbeeldingen niet gedistribueerd. Als de validatie mislukt en deze eigenschap is ingesteld op true, worden de uitvoerafbeeldingen nog steeds gedistribueerd. Gebruik deze optie met voorzichtigheid, omdat dit ertoe kan leiden dat mislukte installatiekopieën worden gedistribueerd voor gebruik. In beide gevallen (waar of onwaar) wordt de end-to-end-installatiekopieuitvoering gerapporteerd als een mislukte validatie. Deze eigenschap heeft geen invloed op of de validatie slaagt of niet.

Wanneer u het volgende gebruikt validate:

  • U kunt meerdere validators gebruiken.
  • Validators worden uitgevoerd in de volgorde die is opgegeven in de sjabloon.
  • Als één validator mislukt, mislukt het hele validatieonderdeel en rapporteert het een fout.
  • Het is raadzaam om het script grondig te testen voordat u het in een sjabloon gebruikt. Het opsporen van fouten in het script op uw eigen VIRTUELE machine is eenvoudiger.
  • Plaats geen gevoelige gegevens in de scripts.
  • De scriptlocaties moeten openbaar toegankelijk zijn, tenzij u MSI gebruikt.

De eigenschap gebruiken validate om Windows-installatiekopieën te valideren:

{
   "properties":{
      "validate":{
         "continueDistributeOnFailure":false,
         "sourceValidationOnly":false,
         "inVMValidations":[
            {
               "type":"File",
               "destination":"string",
               "sha256Checksum":"string",
               "sourceUri":"string"
            },
            {
               "type":"PowerShell",
               "name":"test PowerShell validator inline",
               "inline":[
                  "<command to run inline>"
               ],
               "validExitCodes":"<exit code>",
               "runElevated":"<true or false>",
               "runAsSystem":"<true or false>"
            },
            {
               "type":"PowerShell",
               "name":"<name>",
               "scriptUri":"<path to script>",
               "runElevated":"<true false>",
               "sha256Checksum":"<sha256 checksum>"
            }
         ]
      }
   }
}

inVMValidations Eigenschappen:

  • type – PowerShell.

  • name - naam van de validator

  • scriptUri - URI van het PowerShell-scriptbestand.

  • inline : matrix met opdrachten die moeten worden uitgevoerd, gescheiden door komma's.

  • validExitCodes : optioneel, geldige codes die kunnen worden geretourneerd vanuit de opdracht script/inline. Dit voorkomt gemelde fouten van de script-/inlineopdracht.

  • runElevated : optioneel, booleaanse waarde, ondersteuning voor het uitvoeren van opdrachten en scripts met verhoogde machtigingen.

  • sha256Checksum - Waarde van sha256-controlesom van het bestand, u genereert dit lokaal en vervolgens controleert Image Builder de controlesom en valideert.

    De sha256Checksum genereren met behulp van een PowerShell in Windows Get-Hash

De eigenschap gebruiken validate om Linux-installatiekopieën te valideren:

{
  "properties": {
    "validate": {
      "continueDistributeOnFailure": false,
      "sourceValidationOnly": false,
      "inVMValidations": [
        {
          "type": "Shell",
          "name": "<name>",
          "inline": [
            "<command to run inline>"
          ]
        },
        {
          "type": "Shell",
          "name": "<name>",
          "scriptUri": "<path to script>",
          "sha256Checksum": "<sha256 checksum>"
        },
        {
          "type": "File",
          "destination": "string",
          "sha256Checksum": "string",
          "sourceUri": "string"
        }
      ]
    }
  }
}

inVMValidations Eigenschappen:

  • type : Shell of Bestand dat is opgegeven als het validatietype dat moet worden uitgevoerd.

  • name - naam van de validator

  • scriptUri - URI van het scriptbestand

  • inline : matrix met opdrachten die moeten worden uitgevoerd, gescheiden door komma's.

  • sha256Checksum - Waarde van sha256-controlesom van het bestand, u genereert dit lokaal en vervolgens controleert Image Builder de controlesom en valideert.

    Als u sha256Checksum wilt genereren met behulp van een terminal op Mac/Linux, voert u de volgende opdracht uit: sha256sum <fileName>

  • doel - Bestemming van het bestand.

  • sha256Checksum - Hiermee geeft u de SHA256-controlesom van het bestand.

  • sourceUri : de bron-URI van het bestand.

Eigenschappen: vmProfile

vmSize (optioneel)

Image Builder maakt gebruik van een standaard-SKU-grootte voor Standard_D1_v2 Gen1-installatiekopieën en Standard_D2ds_v4 voor Gen2-installatiekopieën. De generatie wordt gedefinieerd door de installatiekopieën die u opgeeft in de source. U kunt vmSize om deze redenen overschrijven:

  • Het uitvoeren van aanpassingen waarvoor meer geheugen, CPU en verwerking van grote bestanden (GB's) nodig zijn.
  • Als u Windows-builds uitvoert, moet u 'Standard_D2_v2' of een equivalente VM-grootte gebruiken.
  • VM-isolatie vereisen.
  • Pas een installatiekopieën aan waarvoor specifieke hardware is vereist. Voor een GPU-VM hebt u bijvoorbeeld een GPU-VM-grootte nodig.
  • End-to-end-versleuteling vereisen voor rest van de build-VM, moet u de grootte van de build-VM opgeven die geen lokale tijdelijke schijven gebruikt.

osDiskSizeGB

Image Builder wijzigt standaard niet de grootte van de afbeelding, maar gebruikt de grootte van de broninstallatiekopieën. U kunt desgewenst alleen de grootte van de besturingssysteemschijf (Win en Linux) vergroten en een waarde van 0 betekent dat dezelfde grootte wordt behouden als de broninstallatiekopieën. U kunt de grootte van de besturingssysteemschijf niet verkleinen tot kleiner dan de grootte van de broninstallatiekopieën.

{
  "osDiskSizeGB": 100
}

vnetConfig (optioneel)

Als u geen VNet-eigenschappen opgeeft, maakt Image Builder een eigen VNet, openbaar IP- en netwerkbeveiligingsgroep (NSG). Het openbare IP-adres wordt gebruikt voor de service om te communiceren met de build-VM. Als u geen openbaar IP-adres wilt hebben of als u Image Builder toegang wilt geven tot uw bestaande VNet-resources, zoals configuratieservers (DSC, Chef, Puppet, Ansible), kunt u een VNet opgeven. Raadpleeg de netwerkdocumentatie voor meer informatie.

"vnetConfig": {
  "subnetId": "/subscriptions/<subscriptionID>/resourceGroups/<vnetRgName>/providers/Microsoft.Network/virtualNetworks/<vnetName>/subnets/<subnetName>"
}

Bewerkingen voor afbeeldingssjablonen

Een build voor installatiekopieën starten

Als u een build wilt starten, moet u Uitvoeren aanroepen in de resource Afbeeldingssjabloon, voorbeelden van run opdrachten:

Invoke-AzResourceAction -ResourceName $imageTemplateName -ResourceGroupName $imageResourceGroup -ResourceType Microsoft.VirtualMachineImages/imageTemplates -ApiVersion "2021-10-01" -Action Run -Force
az resource invoke-action \
  --resource-group $imageResourceGroup \
  --resource-type  Microsoft.VirtualMachineImages/imageTemplates \
  -n helloImageTemplateLinux01 \
  --action Run

Een build van een installatiekopieën annuleren

Als u een build voor installatiekopieën uitvoert waarvan u denkt dat deze onjuist is, wacht op gebruikersinvoer of als u denkt dat het nooit lukt, kunt u de build annuleren.

De build kan op elk gewenst moment worden geannuleerd. Als de distributiefase is gestart, kunt u nog steeds annuleren, maar moet u afbeeldingen opschonen die mogelijk niet zijn voltooid. Met de opdracht Annuleren wordt niet gewacht tot annuleren is voltooid, controleert lastrunstatus.runstate u of de voortgang wordt geannuleerd met behulp van deze statusopdrachten.

Voorbeelden van cancel opdrachten:

Invoke-AzResourceAction -ResourceName $imageTemplateName -ResourceGroupName $imageResourceGroup -ResourceType Microsoft.VirtualMachineImages/imageTemplates -ApiVersion "2021-10-01" -Action Cancel -Force
az resource invoke-action \
  --resource-group $imageResourceGroup \
  --resource-type  Microsoft.VirtualMachineImages/imageTemplates \
  -n helloImageTemplateLinux01 \
  --action Cancel

Volgende stappen

Er zijn voorbeeldbestanden .json voor verschillende scenario's in Azure Image Builder GitHub.