Tworzenie szablonu JSON szablonu usługi Azure Image Builder lub Bicep lub ARM

Dotyczy: ✔️ Maszyny wirtualne z systemem Linux Maszyny wirtualne z systemem Windows — elastyczne zestawy ✔️ ✔️ skalowania

Narzędzie Azure Image Builder używa pliku Bicep lub pliku szablonu JSON szablonu usługi ARM do przekazywania informacji do usługi Image Builder. W tym artykule omówimy sekcje plików, dzięki czemu możesz utworzyć własne. Aby uzyskać najnowsze wersje interfejsu API, zobacz dokumentację szablonu. Aby zapoznać się z przykładami pełnych plików .json, zobacz GitHub narzędzia Azure Image Builder.

Podstawowy format to:

{
  "type": "Microsoft.VirtualMachineImages/imageTemplates",
  "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/<subnetName1>",
        "containerInstanceSubnetId": "/subscriptions/<subscriptionID>/resourceGroups/<vnetRgName>/providers/Microsoft.Network/virtualNetworks/<vnetName>/subnets/<subnetName2>",
        "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>",
        ...
      ]
    }
  }
}

Wersja interfejsu API

Wersja interfejsu API zmieni się wraz ze zmianą interfejsu API w miarę upływu czasu. Zobacz Co nowego w narzędziu Image Builder maszyny wirtualnej platformy Azure, aby zapoznać się ze wszystkimi ważnymi zmianami interfejsu API i aktualizacjami funkcji dla usługi Azure VM Image Builder.

Typ

Jest type to typ zasobu, który musi mieć wartość Microsoft.VirtualMachineImages/imageTemplates.

"type": "Microsoft.VirtualMachineImages/imageTemplates",

Lokalizacja

Lokalizacja to region, w którym jest tworzony obraz niestandardowy. Obsługiwane są następujące regiony:

  • East US
  • Wschodnie stany USA 2
  • Zachodnio-środkowe stany USA
  • Zachodnie stany USA
  • Zachodnie stany USA 2
  • Zachodnie stany USA 3
  • South Central US
  • Europa Północna
  • West Europe
  • Azja Południowo-Wschodnia
  • Australia Południowo-Wschodnia
  • Australia Wschodnia
  • Południowe Zjednoczone Królestwo
  • Zachodnie Zjednoczone Królestwo
  • Brazylia Południowa
  • Kanada Środkowa
  • Indie Środkowe
  • Central US
  • Francja Środkowa
  • Niemcy Środkowo-Zachodnie
  • Japonia Wschodnia
  • Północno-środkowe stany USA
  • Norwegia Wschodnia
  • Szwajcaria Północna
  • Indie Zachodnie (Jio)
  • Północne Zjednoczone Emiraty Arabskie
  • Azja Wschodnia
  • Korea Środkowa
  • Północna Republika Południowej Afryki
  • Katar Środkowy
  • USGov Arizona (publiczna wersja zapoznawcza)
  • USGov Virginia (publiczna wersja zapoznawcza)
  • Chiny Północne 3 (publiczna wersja zapoznawcza)
  • Szwecja Środkowa
  • Polska Środkowa

Ważne

Zarejestruj funkcję Microsoft.VirtualMachineImages/FairfaxPublicPreview , aby uzyskać dostęp do publicznej wersji zapoznawczej narzędzia Azure Image Builder w regionach platformy Azure Government (USGov Arizona i USGov Virginia).

Ważne

Zarejestruj funkcję Microsoft.VirtualMachineImages/MooncakePublicPreview , aby uzyskać dostęp do publicznej wersji zapoznawczej narzędzia Azure Image Builder w regionie Chiny Północne 3.

Aby uzyskać dostęp do publicznej wersji zapoznawczej narzędzia Image Builder maszyny wirtualnej platformy Azure w regionach platformy Azure Government (USGov Arizona i USGov Virginia), musisz zarejestrować funkcję Microsoft.VirtualMachineImages/FairfaxPublicPreview . W tym celu uruchom następujące polecenie w programie PowerShell lub interfejsie wiersza polecenia platformy Azure:

Register-AzProviderPreviewFeature -ProviderNamespace Microsoft.VirtualMachineImages -Name FairfaxPublicPreview

Aby uzyskać dostęp do publicznej wersji zapoznawczej narzędzia Image Builder maszyny wirtualnej platformy Azure w regionie Chiny Północne 3, musisz zarejestrować funkcję Microsoft.VirtualMachineImages/MooncakePublicPreview . W tym celu uruchom następujące polecenie w programie PowerShell lub interfejsie wiersza polecenia platformy Azure:

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

Przechowywanie danych

Usługa Azure VM Image Builder nie przechowuje ani nie przetwarza danych klientów poza regionami, które mają ścisłe wymagania dotyczące przechowywania danych w jednym regionie, gdy klient żąda kompilacji w tym regionie. Jeśli awaria usługi dla regionów mających wymagania dotyczące rezydencji danych, musisz utworzyć pliki/szablony Bicep w innym regionie i lokalizacji geograficznej.

Nadmiarowość stref

Dystrybucja obsługuje nadmiarowość stref, dyski VHD są domyślnie dystrybuowane do konta magazynu strefowo nadmiarowego (ZRS), a wersja usługi Azure Compute Gallery (wcześniej znana jako Galeria obrazów udostępnionych) będzie obsługiwać typ magazynu ZRS, jeśli zostanie określony.

Tagi

Tagi to pary klucz/wartość, które można określić dla wygenerowanego obrazu.

Tożsamość

Poniżej wyjaśniono dwa sposoby dodawania tożsamości przypisanych przez użytkownika.

Tożsamość przypisana przez użytkownika dla zasobu szablonu obrazu narzędzia Azure Image Builder

Wymagane — aby konstruktor obrazów miał uprawnienia do odczytu/zapisu obrazów i odczytywania skryptów z usługi Azure Storage, musisz utworzyć tożsamość przypisaną przez użytkownika platformy Azure, która ma uprawnienia do poszczególnych zasobów. Aby uzyskać szczegółowe informacje na temat działania uprawnień narzędzia Image Builder i odpowiednich kroków, zobacz Tworzenie obrazu i używanie tożsamości zarządzanej przypisanej przez użytkownika do uzyskiwania dostępu do plików na koncie usługi Azure Storage.

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

Tożsamość przypisana przez użytkownika usługi Image Builder:

  • Obsługuje tylko jedną tożsamość.
  • Nie obsługuje niestandardowych nazw domen.

Aby dowiedzieć się więcej, zobacz Co to są tożsamości zarządzane dla zasobów platformy Azure?. Aby uzyskać więcej informacji na temat wdrażania tej funkcji, zobacz Konfigurowanie tożsamości zarządzanych dla zasobów platformy Azure na maszynie wirtualnej platformy Azure przy użyciu interfejsu wiersza polecenia platformy Azure.

Tożsamość przypisana przez użytkownika dla maszyny wirtualnej kompilacji konstruktora obrazów

Ta właściwość jest dostępna tylko w wersjach interfejsu API lub nowszych 2021-10-01 wersjach.

Opcjonalnie — maszyna wirtualna kompilacji konstruktora obrazów utworzona przez usługę Image Builder w ramach subskrypcji służy do kompilowania i dostosowywania obrazu. Aby maszyna wirtualna kompilacji konstruktora obrazów miała uprawnienia do uwierzytelniania w innych usługach, takich jak usługa Azure Key Vault w ramach subskrypcji, musisz utworzyć co najmniej jedną tożsamość przypisaną przez użytkownika platformy Azure, która ma uprawnienia do poszczególnych zasobów. Narzędzie Azure Image Builder może następnie skojarzyć te tożsamości przypisane przez użytkownika z maszyną wirtualną kompilacji. Skrypty konfiguratora działające wewnątrz maszyny wirtualnej kompilacji mogą pobierać tokeny dla tych tożsamości i w razie potrzeby korzystać z innych zasobów platformy Azure. Należy pamiętać, że tożsamość przypisana przez użytkownika dla narzędzia Azure Image Builder musi mieć przypisanie roli "Operator tożsamości zarządzanej" dla wszystkich tożsamości przypisanych przez użytkownika dla narzędzia Azure Image Builder, aby móc skojarzyć je z maszyną wirtualną kompilacji.

Uwaga

Należy pamiętać, że dla maszyny wirtualnej kompilacji konstruktora obrazów można określić wiele tożsamości, w tym tożsamość utworzoną dla zasobu szablonu obrazu. Domyślnie tożsamość utworzona dla zasobu szablonu obrazu nie zostanie automatycznie dodana do maszyny wirtualnej kompilacji.

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

Tożsamość przypisana przez użytkownika maszyny wirtualnej kompilacji konstruktora obrazów:

  • Obsługuje listę co najmniej jednej tożsamości zarządzanej przypisanej przez użytkownika do skonfigurowania na maszynie wirtualnej.
  • Obsługuje scenariusze między subskrypcjami (tożsamość utworzona w jednej subskrypcji podczas tworzenia szablonu obrazu w innej subskrypcji w ramach tej samej dzierżawy).
  • Nie obsługuje scenariuszy między dzierżawami (tożsamość utworzona w jednej dzierżawie podczas tworzenia szablonu obrazu w innej dzierżawie).

Aby dowiedzieć się więcej, zobacz:

Właściwości: buildTimeoutInMinutes

Maksymalny czas trwania oczekiwania podczas kompilowania szablonu obrazu (obejmuje wszystkie dostosowania, walidacje i dystrybucje).

Jeśli nie określisz właściwości lub ustawisz wartość 0, zostanie użyta wartość domyślna, czyli 240 minut lub cztery godziny. Wartość minimalna to 6 minut, a maksymalna wartość to 960 minut lub 16 godzin. Po osiągnięciu wartości limitu czasu (bez względu na to, czy kompilacja obrazu została ukończona), zostanie wyświetlony błąd podobny do następującego:

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

W przypadku systemu Windows nie zalecamy ustawienia buildTimeoutInMinutes poniżej 60 minut. Jeśli znajdziesz przekroczenie limitu czasu, przejrzyj dzienniki , aby sprawdzić, czy krok dostosowywania czeka na dane wejściowe użytkownika. Jeśli okaże się, że potrzebujesz więcej czasu na ukończenie dostosowań, zwiększ buildTimeoutInMinutes wartość. Ale nie ustawiaj go zbyt wysoko, ponieważ może być konieczne poczekanie na przekroczenie limitu czasu przed wyświetleniem błędu.

Właściwości: dostosowywanie

Narzędzie Image Builder obsługuje wiele "konfiguratorów", które są funkcjami używanymi do dostosowywania obrazu, takich jak uruchamianie skryptów lub ponowne uruchamianie serwerów.

W przypadku korzystania z polecenia customize:

  • Można użyć wielu konfiguratorów.
  • Konfiguratory są wykonywane w kolejności określonej w szablonie.
  • Jeśli jeden konfigurator ulegnie awarii, cały składnik dostosowywania zakończy się niepowodzeniem i zgłosi błąd.
  • Dokładnie przetestuj skrypty przed użyciem ich w szablonie. Samodzielne debugowanie skryptów jest łatwiejsze.
  • Nie umieszczaj poufnych danych w skryptach. Polecenia wbudowane można wyświetlić w definicji szablonu obrazu. Jeśli masz poufne informacje (w tym hasła, token SAS, tokeny uwierzytelniania itp.), powinny zostać przeniesione do skryptów w usłudze Azure Storage, gdzie dostęp wymaga uwierzytelniania.
  • Lokalizacje skryptów muszą być publicznie dostępne, chyba że używasz tożsamości usługi zarządzanej.

Sekcja customize jest tablicą. Obsługiwane typy konfiguratora to: File, PowerShell, Shell, WindowsRestart i 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"
  }
]

Konfigurator powłoki

Konfigurator Shell obsługuje uruchamianie skryptów powłoki w systemie Linux. Skrypty powłoki muszą być publicznie dostępne lub należy skonfigurować tożsamość usługi zarządzanej dla konstruktora obrazów w celu uzyskania do nich dostępu.

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

Dostosowywanie właściwości:

  • type — powłoka.

  • name — nazwa śledzenia dostosowania.

  • scriptUri — identyfikator URI do lokalizacji pliku.

  • inline — tablica poleceń powłoki oddzielona przecinkami.

  • sha256Checksum — wartość sumy kontrolnej sha256 pliku, generujesz tę wartość lokalnie, a następnie narzędzie Image Builder sprawdzi sumę kontrolną i zweryfikuje.

    Aby wygenerować sha256Checksum, użyj terminalu na komputerze Mac/Linux uruchom polecenie: sha256sum <fileName>

Uwaga

Polecenia wbudowane są przechowywane jako część definicji szablonu obrazu, które można zobaczyć podczas zrzutu definicji obrazu. Jeśli masz poufne polecenia lub wartości (w tym hasła, token SAS, tokeny uwierzytelniania itp.), zalecane jest przeniesienie ich do skryptów i użycie tożsamości użytkownika do uwierzytelniania w usłudze Azure Storage.

Uprawnienia administratora

Prefiks poleceń z sudo poleceniem , aby uruchomić je z uprawnieniami administratora. Możesz dodać polecenia do skryptów lub użyć ich wbudowanych poleceń, na przykład:

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

Przykład skryptu używającego polecenia sudo, do którego można się odwołać przy użyciu identyfikatora scriptUri:

#!/bin/bash -e

echo "Telemetry: creating files"
mkdir /myfiles

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

Konfigurator ponownego uruchamiania systemu Windows

Konfigurator umożliwia ponowne uruchomienie maszyny wirtualnej z systemem Windows i oczekiwanie na powrót maszyny wirtualnej do trybu online. Ten WindowsRestart konfigurator umożliwia zainstalowanie oprogramowania wymagającego ponownego uruchomienia.

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

Dostosowywanie właściwości:

  • Typ: WindowsRestart.
  • restartCommand — polecenie, aby wykonać ponowne uruchomienie (opcjonalnie). Wartość domyślna to 'shutdown /r /f /t 0 /c \"packer restart\"'.
  • restartCheckCommand — polecenie, aby sprawdzić, czy ponowne uruchomienie zakończyło się pomyślnie (opcjonalnie).
  • restartTimeout — limit czasu ponownego uruchamiania określony jako ciąg wielkości i jednostki. Na przykład 5m (5 minut) lub 2h (2 godziny). Wartość domyślna to: 5m.

Uwaga

Nie ma konfiguratora ponownego uruchamiania systemu Linux.

Konfigurator programu PowerShell

Konfigurator PowerShell obsługuje uruchamianie skryptów programu PowerShell i wbudowanego polecenia w systemie Windows. Skrypty muszą być publicznie dostępne dla IB, aby uzyskać do nich dostęp.

"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>
  }
]

Dostosowywanie właściwości:

  • type — PowerShell.

  • scriptUri — identyfikator URI do lokalizacji pliku skryptu programu PowerShell.

  • inline — polecenia wbudowane do uruchomienia rozdzielone przecinkami.

  • validExitCodes — opcjonalne, prawidłowe kody, które można zwrócić ze skryptu/wbudowanego polecenia. Właściwość pozwala uniknąć zgłoszonego błędu skryptu/polecenia wbudowanego.

  • runElevated — opcjonalne, logiczne, obsługa uruchamiania poleceń i skryptów z podwyższonym poziomem uprawnień.

  • runAsSystem — opcjonalny, logiczny, określa, czy skrypt programu PowerShell powinien być uruchamiany jako użytkownik systemu.

  • sha256Checksum — generuje sumę kontrolną SHA256 pliku lokalnie, zaktualizuj wartość sumy kontrolnej na małe litery, a konstruktor obrazów zweryfikuje sumę kontrolną podczas wdrażania szablonu obrazu.

    Aby wygenerować sha256Checksum, użyj polecenia cmdlet Get-FileHash w programie PowerShell.

Konfigurator plików

Konfigurator File umożliwia konstruktorowi obrazów pobranie pliku z repozytorium GitHub lub usługi Azure Storage. Konfigurator obsługuje zarówno systemy Linux, jak i Windows. Jeśli masz potok kompilacji obrazu, który opiera się na artefaktach kompilacji, możesz ustawić konfigurator pliku do pobrania z udziału kompilacji i przenieść artefakty do obrazu.

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

Właściwości konfiguratora plików:

  • sourceUri — dostępny punkt końcowy magazynu— ten punkt końcowy może być usługą GitHub lub usługą Azure Storage. Można pobrać tylko jeden plik, a nie cały katalog. Jeśli musisz pobrać katalog, użyj skompresowanego pliku, a następnie usuń jego kompresję przy użyciu konfiguratorów powłoki lub programu PowerShell.

    Uwaga

    Jeśli identyfikator sourceUri jest kontem usługi Azure Storage, niezależnie od tego, czy obiekt blob jest oznaczony jako publiczny, musisz przyznać uprawnienia tożsamości użytkownika zarządzanego w celu odczytu w obiekcie blob. Zobacz ten przykład , aby ustawić uprawnienia magazynu.

  • destination — pełna ścieżka docelowa i nazwa pliku. Wszystkie przywoływalne ścieżki i podkatalogi muszą istnieć, użyć konfiguratorów powłoki lub programu PowerShell, aby skonfigurować te ścieżki wcześniej. Możesz użyć konfiguratorów skryptów, aby utworzyć ścieżkę.

Ten konfigurator jest obsługiwany przez katalogi systemu Windows i ścieżki systemu Linux, ale istnieją pewne różnice:

  • Linux — jedyną ścieżką Konstruktor obrazów może zapisywać w pliku to /tmp.
  • Windows — brak ograniczenia ścieżki, ale ścieżka musi istnieć.

Jeśli wystąpił błąd podczas próby pobrania pliku lub umieścić go w określonym katalogu, dostosowywanie kroku zakończy się niepowodzeniem, a ten błąd będzie znajdować się w customization.log.

Uwaga

Konfigurator plików jest odpowiedni tylko dla małych plików do pobrania, < 20 MB. W przypadku większych plików do pobrania użyj skryptu lub wbudowanego polecenia, a następnie użyj kodu do pobierania plików, takich jak, Linux wget lub curl, Windows, Invoke-WebRequest. W przypadku plików, które znajdują się w usłudze Azure Storage, upewnij się, że przypisano tożsamość z uprawnieniami do wyświetlania tego pliku na maszynie wirtualnej kompilacji, postępując zgodnie z dokumentacją tutaj: Tożsamość przypisana przez użytkownika dla maszyny wirtualnej kompilacji programu Image Builder. Każdy plik, który nie jest przechowywany na platformie Azure, musi być publicznie dostępny, aby program Azure Image Builder mógł go pobrać.

  • sha256Checksum — generuje sumę kontrolną SHA256 pliku lokalnie, zaktualizuj wartość sumy kontrolnej na małe litery, a konstruktor obrazów zweryfikuje sumę kontrolną podczas wdrażania szablonu obrazu.

    Aby wygenerować sha256Checksum, użyj polecenia cmdlet Get-FileHash w programie PowerShell.

Konfigurator aktualizacji systemu Windows

Konfigurator WindowsUpdate jest oparty na społeczności programu Windows Update Provisioner for Packer, który jest projektem open source obsługiwanym przez społeczność packer. Firma Microsoft testuje i weryfikuje dostawcę obsługi administracyjnej za pomocą usługi Image Builder oraz będzie obsługiwać badanie problemów i pracować nad rozwiązaniem problemów, jednak projekt open source nie jest oficjalnie obsługiwany przez firmę Microsoft. Aby uzyskać szczegółową dokumentację dotyczącą usługi Windows Update Provisioner i pomoc, zobacz repozytorium projektu.

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

Właściwości konfiguratora:

  • type — WindowsUpdate.
  • searchCriteria — opcjonalnie definiuje, który typ aktualizacji jest instalowany (na przykład Zalecane lub Ważne), BrowseOnly=0 i IsInstalled=0 (zalecane) jest wartością domyślną.
  • filtry — opcjonalnie umożliwia określenie filtru do uwzględnienia lub wykluczenia aktualizacji.
  • updateLimit — opcjonalnie określa, ile aktualizacji można zainstalować, wartość domyślna 1000.

Uwaga

Konfigurator usługi Windows Update może zakończyć się niepowodzeniem, jeśli istnieją zaległe ponowne uruchomienia systemu Windows lub instalacje aplikacji nadal działają, zazwyczaj ten błąd może zostać wyświetlony w customization.log, System.Runtime.InteropServices.COMException (0x80240016): Exception from HRESULT: 0x80240016. Zdecydowanie zalecamy dodanie ponownego uruchomienia systemu Windows i/lub umożliwienie aplikacjom wystarczającego czasu na ukończenie instalacji przy użyciu poleceń uśpienia lub oczekiwania w wbudowanych poleceniach lub skryptach przed uruchomieniem usługi Windows Update.

Uogólnij

Domyślnie narzędzie Azure Image Builder uruchamia deprovision również kod na końcu każdej fazy dostosowywania obrazu, aby uogólnić obraz. Uogólnienie to proces, w którym obraz jest skonfigurowany, dzięki czemu można go ponownie użyć do tworzenia wielu maszyn wirtualnych. W przypadku maszyn wirtualnych z systemem Windows narzędzie Azure Image Builder używa narzędzia Sysprep. W przypadku systemu Linux narzędzie Azure Image Builder uruchamia polecenie waagent -deprovision.

Polecenia konstruktora obrazów umożliwiające uogólnienie mogą nie być odpowiednie dla każdej sytuacji, więc narzędzie Azure Image Builder umożliwia dostosowanie tego polecenia, jeśli jest to konieczne.

Jeśli migrujesz istniejące dostosowania i używasz różnych poleceń narzędzia Sysprep/waagent, możesz użyć ogólnych poleceń narzędzia Image Builder, a jeśli tworzenie maszyny wirtualnej zakończy się niepowodzeniem, użyj własnych poleceń narzędzia Sysprep lub waagent.

Jeśli narzędzie Azure Image Builder pomyślnie utworzy obraz niestandardowy systemu Windows i utworzysz z niego maszynę wirtualną, okaże się, że tworzenie maszyny wirtualnej kończy się niepowodzeniem lub nie zostanie ukończone pomyślnie, należy przejrzeć dokumentację narzędzia Sysprep systemu Windows Server lub zgłosić wniosek o pomoc techniczną z zespołem pomocy technicznej ds. obsługi systemu Windows Server Sysprep, który może rozwiązywać problemy i doradzać w sprawie poprawnego użycia narzędzia Sysprep.

Domyślne polecenie 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 ...'

Domyślne polecenie anulowania aprowizacji systemu 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

Zastępowanie poleceń

Aby zastąpić polecenia, użyj aprowizatorów skryptów programu PowerShell lub powłoki, aby utworzyć pliki poleceń z dokładną nazwą pliku i umieścić je w odpowiednich katalogach:

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

Program Image Builder odczytuje te polecenia. Te polecenia są zapisywane w dziennikach usługi AIB. customization.log Zobacz rozwiązywanie problemów dotyczących zbierania dzienników.

Właściwości: errorHandling

Właściwość errorHandling umożliwia skonfigurowanie sposobu obsługi błędów podczas tworzenia obrazu.

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

Właściwość errorHandling umożliwia skonfigurowanie sposobu obsługi błędów podczas tworzenia obrazu. Ma dwie właściwości:

  • onCustomizerError — określa akcję, która ma być wykonywana, gdy wystąpi błąd podczas fazy konfiguratora tworzenia obrazu.
  • onValidationError — określa akcję do wykonania w przypadku wystąpienia błędu podczas walidacji szablonu obrazu.

Właściwość errorHandling ma również dwie możliwe wartości do obsługi błędów podczas tworzenia obrazu:

  • cleanup — zapewnia, że zasoby tymczasowe utworzone przez program Packer są czyszczone, nawet jeśli program Packer lub jeden z dostosowań/walidacji napotka błąd. Zapewnia to zgodność z poprzednimi wersjami z istniejącym zachowaniem.
  • abort — w przypadku, gdy pakiet Packer napotka błąd, usługa Azure Image Builder (AIB) pomija czyszczenie zasobów tymczasowych. Jako właściciel szablonu AIB odpowiadasz za wyczyszczenie tych zasobów z subskrypcji. Te zasoby mogą zawierać przydatne informacje, takie jak dzienniki i pliki pozostawione w tymczasowej maszynie wirtualnej, co może pomóc w badaniu błędu napotkanego przez program Packer.

Właściwości: dystrybucja

Narzędzie Azure Image Builder obsługuje trzy cele dystrybucji:

  • ManagedImage — obraz zarządzany.
  • sharedImage — galeria obliczeń platformy Azure.
  • VHD — wirtualny dysk twardy na koncie magazynu.

Obraz można dystrybuować do obu typów docelowych w tej samej konfiguracji.

Uwaga

Domyślne polecenie AIB sysprep nie zawiera "/mode:vm", jednak ta właściwość może być wymagana podczas tworzenia obrazów, które będą miały zainstalowaną rolę HyperV. Jeśli musisz dodać ten argument polecenia, musisz zastąpić polecenie sysprep.

Ponieważ może istnieć więcej niż jeden element docelowy do dystrybucji, konstruktor obrazów zachowuje stan dla każdego obiektu docelowego dystrybucji, do którego można uzyskać dostęp, wysyłając zapytanie do obiektu runOutputName. Obiekt runOutputName jest obiektem, który można wysyłać zapytania po dystrybucji, aby uzyskać informacje o tej dystrybucji. Możesz na przykład wykonać zapytanie dotyczące lokalizacji dysku VHD lub regionów, w których wersja obrazu została zreplikowana do lub do wersji obrazu SIG. Jest to właściwość każdego obiektu docelowego dystrybucji. Element runOutputName musi być unikatowy dla każdego miejsca docelowego dystrybucji. Oto przykład wykonywania zapytań dotyczących dystrybucji galerii obliczeniowej platformy Azure:

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=2023-07-01

Wyjście:

{
  "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"
}

Dystrybucja: managedImage

Dane wyjściowe obrazu to zasób obrazu zarządzanego.

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

Właściwości dystrybucji:

  • type — ManagedImage
  • imageId — identyfikator zasobu obrazu docelowego, oczekiwany format: /subscriptions/<subscriptionId>/resourceGroups/<destinationResourceGroupName>/providers/Microsoft.Compute/images/<imageName>
  • location — lokalizacja obrazu zarządzanego.
  • runOutputName — unikatowa nazwa identyfikującą dystrybucję.
  • artifactTags — opcjonalne tagi klucza\wartości określonego przez użytkownika.

Uwaga

Docelowa grupa zasobów musi istnieć. Jeśli chcesz, aby obraz był dystrybuowany do innego regionu, zwiększy to czas wdrożenia.

Dystrybucja: sharedImage

Galeria zasobów obliczeniowych platformy Azure to nowa usługa zarządzania obrazami, która umożliwia zarządzanie replikacją regionów obrazów, przechowywanie wersji i udostępnianie obrazów niestandardowych. Narzędzie Azure Image Builder obsługuje dystrybucję za pomocą tej usługi, dzięki czemu można dystrybuować obrazy do regionów obsługiwanych przez galerie obliczeniowe platformy Azure.

Galeria zasobów obliczeniowych platformy Azure składa się z:

  • Galeria — kontener dla wielu obrazów. Galeria jest wdrażana w jednym regionie.
  • Definicje obrazów — koncepcyjne grupowanie obrazów.
  • Wersje obrazów — typ obrazu używany do wdrażania maszyny wirtualnej lub zestawu skalowania. Wersje obrazów można replikować do innych regionów, w których należy wdrożyć maszyny wirtualne.

Zanim będzie można rozpowszechnić w galerii, musisz utworzyć galerię i definicję obrazu, zobacz Tworzenie galerii.

Uwaga

Identyfikator wersji obrazu musi być odrębny lub inny niż wszystkie wersje obrazów, które znajdują się w istniejącej galerii obliczeniowej platformy Azure.

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

Poniższy kod JSON to przykład użycia replicationRegions pola do dystrybucji do galerii obliczeń platformy Azure.

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

Uwaga

replicationRegions jest przestarzały w przypadku dystrybucji galerii, ponieważ targetRegions jest aktualizowana właściwość. Aby uzyskać więcej informacji, zobacz targetRegions .

Dystrybucja: targetRegions

Poniższy kod JSON to przykład użycia pola targetRegions do dystrybucji do galerii obliczeń platformy Azure.

"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"
             }
          ]
       },
    ]

Dystrybuuj właściwości dla galerii:

  • type — sharedImage

  • galleryImageId — identyfikator galerii obliczeniowej platformy Azure, tę właściwość można określić w dwóch formatach:

    • Automatyczne przechowywanie wersji — konstruktor obrazów generuje monotoniczny numer wersji. Ta właściwość jest przydatna, gdy chcesz zachować ponowne kompilowanie obrazów z tego samego szablonu: Format: /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/galleries/<sharedImageGalleryName>/images/<imageGalleryName>.
    • Jawne przechowywanie wersji — możesz przekazać numer wersji, który ma być używany przez konstruktora obrazów. Format to: /subscriptions/<subscriptionID>/resourceGroups/<rgName>/providers/Microsoft.Compute/galleries/<sharedImageGalName>/images/<imageDefName>/versions/<version - for example: 1.1.1>
  • runOutputName — unikatowa nazwa identyfikującą dystrybucję.

  • artifactTags — opcjonalne tagi klucza\wartości określonego przez użytkownika.

  • replicationRegions — tablica regionów na potrzeby replikacji. Jednym z regionów musi być region, w którym wdrożono galerię. Dodanie regionów oznacza wzrost czasu kompilacji, ponieważ kompilacja nie zostanie ukończona, dopóki replikacja nie zostanie ukończona. To pole jest przestarzałe w wersji 2022-07-01 interfejsu API, należy użyć targetRegions podczas dystrybucji typu "SharedImage".

  • targetRegions — tablica regionów replikacji. Jest on nowo wprowadzony w ramach interfejsu API 2022-07-01 i ma zastosowanie tylko do SharedImage dystrybucji typów.

  • excludeFromLatest (opcjonalnie) — umożliwia oznaczenie utworzonej wersji obrazu, która nie jest używana jako najnowsza wersja w definicji galerii, wartość domyślna to "false".

  • storageAccountType (opcjonalnie) — usługa AIB obsługuje określanie tego typu magazynu dla wersji obrazu, która ma zostać utworzona:

    • "Standard_LRS"
    • "Standard_ZRS",

Uwaga

Jeśli szablon obrazu i odwołania image definition nie znajdują się w tej samej lokalizacji, zobaczysz dodatkowy czas na utworzenie obrazów. Konstruktor obrazów obecnie nie ma location parametru dla zasobu wersji obrazu. Bierzemy go z nadrzędnego image definitionelementu . Jeśli na przykład definicja obrazu znajduje się i westus chcesz, aby wersja obrazu została zreplikowana do eastuselementu , obiekt blob zostanie skopiowany do westuselementu , zostanie utworzony zasób westus wersji obrazu, a następnie zreplikowany do eastuselementu . Aby uniknąć dodatkowego czasu replikacji, upewnij się, że image definition szablon i obrazu znajduje się w tej samej lokalizacji.

Wersji

Właściwość przechowywania wersji dotyczy tylko typu rozproszonego sharedImage . Jest to wyliczenie z dwiema możliwymi wartościami:

  • latest — Nowe ściśle rosnące schematy na projekt
  • source — schemat na podstawie numeru wersji obrazu źródłowego.

Domyślny schemat numerowania wersji to latest. Najnowszy schemat ma dodatkową właściwość "główna", która określa wersję główną, w ramach której ma być generowana najnowsza wersja.

Uwaga

Istniejąca logika generowania wersji dla sharedImage dystrybucji jest przestarzała. Dostępne są dwie nowe opcje: monotonicznie rosnące wersje, które są zawsze najnowszą wersją w galerii, i wersje generowane na podstawie numeru wersji obrazu źródłowego. Wyliczenie określające schemat generowania wersji umożliwia rozszerzenie w przyszłości przy użyciu dodatkowych schematów generowania wersji.

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

właściwości przechowywania wersji:

  • scheme — generuj nowy numer wersji dla dystrybucji. Latest lub Source są dwiema możliwymi wartościami.
  • major — określa wersję główną, w ramach której ma być generowana najnowsza wersja. Dotyczy tylko wtedy, gdy scheme parametr ma wartość Latest. Na przykład w galerii z następującymi wersjami opublikowanymi: 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
    • W przypadku ustawienia głównego nie ustawiono wartości 2 Latest lub głównej schemat generuje wersję 2.1.1
    • W przypadku ustawienia głównego na 1 schemat Najnowszy generuje wersję 1.2.1
    • W przypadku ustawienia głównego na wartość 0 schemat Najnowszy generuje wersję 0.1.3

Dystrybucja: wirtualny dysk twardy

Dane wyjściowe można uzyskać do wirtualnego dysku twardego. Następnie możesz skopiować dysk VHD i użyć go do opublikowania w usłudze Azure MarketPlace lub użyć go w usłudze Azure Stack.

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

Obsługa systemu operacyjnego: Windows i Linux

Dystrybuowanie parametrów wirtualnego dysku twardego:

  • type — VHD.
  • runOutputName — unikatowa nazwa identyfikującą dystrybucję.
  • tags — opcjonalne tagi par par klucz-wartość użytkownika.

Narzędzie Azure Image Builder nie zezwala użytkownikowi na określenie lokalizacji konta magazynu, ale możesz wykonać zapytanie o stan runOutputs , aby uzyskać lokalizację.

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

Uwaga

Po utworzeniu wirtualnego dysku twardego skopiuj go do innej lokalizacji tak szybko, jak to możliwe. Wirtualny dysk twardy jest przechowywany na koncie magazynu w tymczasowej grupie zasobów utworzonej podczas przesyłania szablonu obrazu do usługi Azure Image Builder. Jeśli usuniesz szablon obrazu, utracisz dysk VHD.

Poniższy kod JSON dystrybuuje obraz jako wirtualny dysk twardy do niestandardowego konta magazynu.

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

Właściwości dystrybucji dysku VHD:

URI — opcjonalny identyfikator URI usługi Azure Storage dla rozproszonego obiektu blob wirtualnego dysku twardego. Pomiń użycie domyślnego (pustego ciągu), w którym przypadku dysk VHD zostanie opublikowany na koncie magazynu w przejściowej grupie zasobów.

Właściwości: optymalizowanie

Właściwość optimize można włączyć podczas tworzenia obrazu maszyny wirtualnej i umożliwia optymalizację maszyny wirtualnej w celu poprawy czasu tworzenia obrazu.

"optimize": {
      "vmBoot": {
        "state": "Enabled"
      }
    }
  • vmBoot: konfiguracja związana z procesem rozruchu maszyny wirtualnej służącą do kontrolowania optymalizacji, które mogą poprawić czas rozruchu lub inne aspekty wydajności.
  • state: stan funkcji optymalizacji rozruchu w programie vmBootz wartością Enabled wskazującą, że funkcja jest włączona, aby poprawić czas tworzenia obrazu.

Aby dowiedzieć się więcej, zobacz Optymalizacja maszyn wirtualnych dla obrazów galerii za pomocą narzędzia Azure VM Image Builder.

Właściwości: źródło

Sekcja source zawiera informacje o obrazie źródłowym, który będzie używany przez konstruktora obrazów. Narzędzie Azure Image Builder obsługuje tylko uogólnione obrazy jako obrazy źródłowe, wyspecjalizowane obrazy nie są obecnie obsługiwane.

Interfejs API wymaga elementu SourceType definiującego źródło kompilacji obrazu, obecnie istnieją trzy typy:

  • PlatformImage — wskazuje, że obraz źródłowy jest obrazem witryny Marketplace.
  • ManagedImage — używany podczas uruchamiania z zwykłego obrazu zarządzanego.
  • SharedImageVersion — używana podczas korzystania z wersji obrazu w galerii obliczeniowej platformy Azure jako źródła.

Uwaga

W przypadku korzystania z istniejących obrazów niestandardowych systemu Windows można uruchomić polecenie Sysprep maksymalnie trzy razy na jednym obrazie systemu Windows 7 lub Windows Server 2008 R2 lub 1001 razy w jednym obrazie systemu Windows dla nowszych wersji; Aby uzyskać więcej informacji, zobacz dokumentację narzędzia sysprep .

Źródło PlatformImage

Narzędzie Azure Image Builder obsługuje obrazy systemu Windows Server i klienta oraz obrazy z witryny Azure Marketplace dla systemu Linux, zobacz Informacje o narzędziu Azure Image Builder , aby uzyskać pełną listę.

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

Właściwości są takie same, które są używane do tworzenia maszyn wirtualnych przy użyciu interfejsu wiersza polecenia AZ, uruchom poniższe polecenie, aby uzyskać właściwości:

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

Można użyć latest w wersji, wersja jest oceniana podczas kompilacji obrazu, a nie podczas przesyłania szablonu. Jeśli używasz tej funkcji z miejscem docelowym usługi Azure Compute Gallery, możesz uniknąć ponownego ponownego tworzenia szablonu i ponownego uruchamiania kompilacji obrazu w odstępach czasu, aby obrazy zostały ponownie utworzone na podstawie najnowszych obrazów.

Pomoc techniczna dotycząca informacji o planie rynku

Możesz również określić informacje o planie, na przykład:

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

Źródło ManagedImage

Ustawia obraz źródłowy jako istniejący zarządzany obraz uogólnionego wirtualnego dysku twardego lub maszyny wirtualnej.

Uwaga

Źródłowy obraz zarządzany musi być obsługiwanym systemem operacyjnym, a obraz musi znajdować się w tej samej subskrypcji i regionie co szablon narzędzia Azure Image Builder.

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

Element imageId powinien być identyfikatorem ResourceId obrazu zarządzanego. Użyj az image list polecenia , aby wyświetlić listę dostępnych obrazów.

Źródło SharedImageVersion

Ustawia obraz źródłowy jako istniejącą wersję obrazu w galerii obliczeń platformy Azure.

Uwaga

Wersja źródłowego udostępnionego obrazu musi być obsługiwaną wersją systemu operacyjnego, a wersja obrazu musi znajdować się w tym samym regionie co szablon narzędzia Azure Image Builder, jeśli nie, zreplikuj wersję obrazu do regionu szablonu narzędzia Image Builder.

"source": {
  "type": "SharedImageVersion",
  "imageVersionId": "/subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>/providers/Microsoft.Compute/galleries/<sharedImageGalleryName>/images/<imageDefinitionName/versions/<imageVersion>"
}
  • imageVersionId — identyfikator zasobu szablonu usługi ARM wersji obrazu. Gdy nazwa wersji obrazu to "latest", wersja jest oceniana podczas kompilacji obrazu. Element imageVersionId powinien być ResourceId wersją obrazu. Użyj polecenia az sig image-version list , aby wyświetlić listę wersji obrazów.

Poniższy kod JSON ustawia obraz źródłowy jako obraz przechowywany w bezpośredniej galerii udostępnionej.

Uwaga

Bezpośrednia galeria udostępniona jest obecnie dostępna w wersji zapoznawczej.

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

Poniższy kod JSON ustawia obraz źródłowy jako najnowszą wersję obrazu przechowywanego w galerii obliczeń platformy Azure.

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

Właściwości SharedImageVersion:

imageVersionId — identyfikator zasobu szablonu usługi ARM wersji obrazu. Gdy nazwa wersji obrazu to "latest", wersja jest oceniana podczas kompilacji obrazu.

Właściwości: stagingResourceGroup

Właściwość stagingResourceGroup zawiera informacje o przejściowej grupie zasobów tworzonej przez usługę Image Builder do użycia podczas procesu kompilacji obrazu. Jest stagingResourceGroup to opcjonalna właściwość dla każdego, kto chce mieć większą kontrolę nad grupą zasobów utworzoną przez program Image Builder podczas procesu kompilacji obrazu. Możesz utworzyć własną grupę zasobów i określić ją w sekcji lub utworzyć ją w stagingResourceGroup twoim imieniu.

Ważne

Określona grupa zasobów przemieszczania nie może być skojarzona z innym szablonem obrazu, musi być pusta (brak zasobów wewnątrz), w tym samym regionie co szablon obrazu, a kontrola dostępu oparta na rolach "Współautor" lub "Właściciel" została zastosowana do tożsamości przypisanej do zasobu szablonu obrazu narzędzia Azure Image Builder.

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

Scenariusze tworzenia szablonów

  • Właściwość stagingResourceGroup jest pozostawiona pusta

    stagingResourceGroup Jeśli właściwość nie jest określona lub określona z pustym ciągiem, usługa Image Builder tworzy tymczasową grupę zasobów z domyślną konwencją nazw "IT_***". Grupa zasobów przejściowych ma zastosowane domyślne tagi: createdBy, , imageTemplateNameimageTemplateResourceGroupName. Ponadto domyślna kontrola dostępu oparta na rolach jest stosowana do tożsamości przypisanej do zasobu szablonu narzędzia Azure Image Builder, czyli "Współautor".

  • Właściwość stagingResourceGroup jest określona z grupą zasobów, która istnieje

    stagingResourceGroup Jeśli właściwość jest określona z grupą zasobów, która istnieje, usługa Image Builder sprawdza, czy grupa zasobów nie jest skojarzona z innym szablonem obrazu, jest pusta (brak zasobów wewnątrz), w tym samym regionie co szablon obrazu i ma RBAC "Współautor" lub "Właściciel" zastosowaną do tożsamości przypisanej do zasobu szablonu obrazu programu Azure Image Builder. Jeśli którekolwiek z wyżej wymienionych wymagań nie zostaną spełnione, zostanie zgłoszony błąd. Grupa zasobów przejściowych ma dodane do niej następujące tagi: usedBy, imageTemplateName, imageTemplateResourceGroupName. Istniejące tagi nie są usuwane.

Ważne

Podczas próby określenia istniejącej grupy zasobów i sieci wirtualnej do usługi Azure Image Builder z obrazem źródłowym systemu Windows musisz przypisać rolę współautora do grupy zasobów dla jednostki usługi odpowiadającej pierwszej aplikacji usługi Azure Image Builder. Aby uzyskać instrukcje dotyczące przypisywania roli współautora do grupy zasobów za pomocą polecenia interfejsu wiersza polecenia i portalu, zobacz następującą dokumentację Rozwiązywanie problemów z maszyną wirtualną Azure Image Builder: Błąd autoryzacji podczas tworzenia dysku

  • Właściwość stagingResourceGroup jest określona z grupą zasobów, która nie istnieje

    stagingResourceGroup Jeśli właściwość jest określona z grupą zasobów, która nie istnieje, usługa Image Builder tworzy tymczasową grupę zasobów o nazwie podanej stagingResourceGroup we właściwości . Jeśli dana nazwa nie spełnia wymagań dotyczących nazewnictwa platformy Azure dla grup zasobów, wystąpi błąd. Grupa zasobów przejściowych ma zastosowane domyślne tagi: createdBy, , imageTemplateNameimageTemplateResourceGroupName. Domyślnie tożsamość przypisana do zasobu szablonu obrazu narzędzia Azure Image Builder ma zastosowaną kontrolę dostępu opartą na rolach "Współautor" w grupie zasobów.

Usuwanie szablonu

Każda tymczasowa grupa zasobów utworzona przez usługę Image Builder zostanie usunięta po usunięciu szablonu obrazu. Usunięcie obejmuje przejściowe grupy zasobów, które zostały określone we stagingResourceGroup właściwości, ale nie istniały przed kompilacją obrazu.

Jeśli konstruktor obrazów nie utworzył przejściowej grupy zasobów, ale zasoby w grupie zasobów, te zasoby zostaną usunięte po usunięciu szablonu obrazu, biorąc pod uwagę, że usługa Image Builder ma odpowiednie uprawnienia lub rolę wymaganą do usunięcia zasobów.

Właściwości: weryfikowanie

Za pomocą validate właściwości można weryfikować obrazy platformy i wszystkie niestandardowe obrazy tworzone niezależnie od tego, czy użyto narzędzia Azure Image Builder do ich utworzenia.

Narzędzie Azure Image Builder obsługuje tryb "Tylko weryfikacja źródła", który można ustawić przy użyciu sourceValidationOnly właściwości . sourceValidationOnly Jeśli właściwość ma wartość true, obraz określony w source sekcji zostanie zweryfikowany bezpośrednio. W celu wygenerowania nie zostanie uruchomiona żadna oddzielna kompilacja, a następnie zweryfikuj dostosowany obraz.

Właściwość inVMValidations przyjmuje listę modułów sprawdzania poprawności, które zostaną wykonane na obrazie. Narzędzie Azure Image Builder obsługuje moduły sprawdzania poprawności plików, programu PowerShell i powłoki.

Właściwość continueDistributeOnFailure jest odpowiedzialna za to, czy obrazy wyjściowe będą dystrybuowane w przypadku niepowodzenia walidacji. Domyślnie jeśli walidacja nie powiedzie się i ta właściwość ma wartość false, obrazy wyjściowe nie będą dystrybuowane. Jeśli walidacja nie powiedzie się i ta właściwość ma wartość true, obrazy wyjściowe będą nadal dystrybuowane. Użyj tej opcji z ostrożnością, ponieważ może to spowodować rozpowszechnianie nieudanych obrazów do użycia. W obu przypadkach (prawda lub fałsz) uruchomienie obrazu końcowego zostanie zgłoszone jako niepowodzenie w przypadku niepowodzenia weryfikacji. Ta właściwość nie ma wpływu na to, czy walidacja zakończy się powodzeniem, czy nie.

W przypadku korzystania z polecenia validate:

  • Można użyć wielu modułów sprawdzania poprawności.
  • Moduły sprawdzania poprawności są wykonywane w kolejności określonej w szablonie.
  • Jeśli jeden moduł sprawdzania poprawności zakończy się niepowodzeniem, cały składnik sprawdzania poprawności zakończy się niepowodzeniem i zgłosi błąd.
  • Zaleca się dokładne przetestowanie skryptu przed użyciem go w szablonie. Debugowanie skryptu na własnej maszynie wirtualnej będzie łatwiejsze.
  • Nie umieszczaj poufnych danych w skryptach.
  • Lokalizacje skryptów muszą być publicznie dostępne, chyba że używasz tożsamości usługi zarządzanej.

Jak używać validate właściwości do weryfikowania obrazów systemu Windows:

{
   "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 Właściwości:

  • type — PowerShell.

  • name — nazwa modułu sprawdzania poprawności

  • scriptUri — identyfikator URI pliku skryptu programu PowerShell.

  • inline — tablica poleceń do uruchomienia, rozdzielona przecinkami.

  • validExitCodes — opcjonalne, prawidłowe kody, które mogą być zwracane z polecenia skryptu/wbudowanego, pozwala to uniknąć zgłoszonego błędu skryptu/wbudowanego polecenia.

  • runElevated — opcjonalne, logiczne, obsługa uruchamiania poleceń i skryptów z podwyższonym poziomem uprawnień.

  • sha256Checksum — wartość sumy kontrolnej sha256 pliku, generowana lokalnie, a następnie narzędzie Image Builder sprawdzi sumę kontrolną i zweryfikuje.

    Aby wygenerować sha256Checksum, przy użyciu programu PowerShell w systemie Windows Get-Hash

Jak używać właściwości do sprawdzania validate poprawności obrazów systemu Linux:

{
  "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 Właściwości:

  • type — powłoka lub plik określony jako typ weryfikacji do wykonania.

  • name — nazwa modułu sprawdzania poprawności

  • scriptUri — identyfikator URI pliku skryptu

  • inline — tablica poleceń do uruchomienia, rozdzielona przecinkami.

  • sha256Checksum — wartość sumy kontrolnej sha256 pliku, generowana lokalnie, a następnie narzędzie Image Builder sprawdzi sumę kontrolną i zweryfikuje.

    Aby wygenerować sha256Checksum, użyj terminalu na komputerze Mac/Linux uruchom polecenie: sha256sum <fileName>

  • destination — miejsce docelowe pliku.

  • sha256Checksum — określa sumę kontrolną SHA256 pliku.

  • sourceUri — źródłowy identyfikator URI pliku.

Właściwości: vmProfile

vmSize (opcjonalnie)

Konstruktor obrazów używa domyślnego rozmiaru Standard_D1_v2 jednostki SKU dla obrazów gen1 i Standard_D2ds_v4 obrazów gen2. Generowanie jest definiowane przez obraz określony w elemecie source. Możesz zastąpić rozmiar vmSize z następujących powodów:

  • Wykonywanie dostosowań wymagających zwiększonej ilości pamięci, procesora CPU i obsługi dużych plików (GB).
  • Uruchamianie kompilacji systemu Windows, należy użyć "Standard_D2_v2" lub równoważnego rozmiaru maszyny wirtualnej.
  • Wymagaj izolacji maszyny wirtualnej.
  • Dostosuj obraz, który wymaga określonego sprzętu. Na przykład w przypadku maszyny wirtualnej z procesorem GPU potrzebny jest rozmiar maszyny wirtualnej procesora GPU.
  • Wymagaj kompleksowego szyfrowania w pozostałej części kompilacji maszyny wirtualnej. Należy określić rozmiar maszyny wirtualnej kompilacji, który nie korzysta z lokalnych dysków tymczasowych.

osDiskSizeGB

Domyślnie konstruktor obrazów nie zmienia rozmiaru obrazu, używa rozmiaru obrazu źródłowego. Opcjonalnie można zwiększyć rozmiar dysku systemu operacyjnego (Win i Linux), a wartość 0 oznacza pozostawienie tego samego rozmiaru co obraz źródłowy. Nie można zmniejszyć rozmiaru dysku systemu operacyjnego do mniejszego niż rozmiar obrazu źródłowego.

{
  "osDiskSizeGB": 100
}

vnetConfig (opcjonalnie)

Jeśli nie określisz żadnych właściwości sieci wirtualnej, narzędzie Image Builder utworzy własną sieć wirtualną, publiczny adres IP i sieciową grupę zabezpieczeń. Publiczny adres IP jest używany do komunikacji usługi z maszyną wirtualną kompilacji. Jeśli nie chcesz mieć publicznego adresu IP lub chcesz, aby konstruktor obrazów miał dostęp do istniejących zasobów sieci wirtualnej, takich jak serwery konfiguracji (DSC, Chef, Puppet, Ansible), udziały plików, możesz określić sieć wirtualną. Aby uzyskać więcej informacji, zapoznaj się z dokumentacją sieci.

"vnetConfig": {
  "subnetId": "/subscriptions/<subscriptionID>/resourceGroups/<vnetRgName>/providers/Microsoft.Network/virtualNetworks/<vnetName>/subnets/<subnetName1>",
  "containerInstanceSubnetId": "/subscriptions/<subscriptionID>/resourceGroups/<vnetRgName>/providers/Microsoft.Network/virtualNetworks/<vnetName>/subnets/<subnetName2>",
  "proxyVmSize": "<vmSize>"
}

Operacje szablonu obrazu

Uruchamianie kompilacji obrazu

Aby uruchomić kompilację, musisz wywołać polecenie "Uruchom" w zasobie szablonu obrazu, przykłady run poleceń:

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

Anulowanie kompilacji obrazu

Jeśli uruchamiasz kompilację obrazu, która uważasz, że jest niepoprawna, oczekiwanie na wprowadzenie danych przez użytkownika lub nigdy nie zakończy się pomyślnie, możesz anulować kompilację.

Kompilację można anulować w dowolnym momencie. Jeśli faza dystrybucji została uruchomiona, nadal możesz anulować, ale musisz wyczyścić wszystkie obrazy, które mogą nie zostać ukończone. Polecenie anulowania nie czeka na zakończenie anulowania, monitoruj lastrunstatus.runstate postęp anulowania przy użyciu tych poleceń stanu.

cancel Przykłady poleceń:

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

Następne kroki

Istnieją przykładowe pliki .json dla różnych scenariuszy w usłudze GitHub narzędzia Azure Image Builder.