Azure Image Builder Bicep 또는 ARM JSON 템플릿 만들기

적용 대상: ✔️ Linux VM ✔️ 유연한 확장 집합

Azure Image Builder는 Bicep 파일 또는 ARM JSON 템플릿 파일을 사용하여 정보를 Image Builder 서비스에 전달합니다. 이 문서에서는 사용자 고유의 파일을 작성할 수 있도록 파일의 섹션을 살펴보겠습니다. 최신 API 버전은 템플릿 참조를 참조하세요. 전체 .json 파일 예제를 보려면 Azure Image Builder GitHub를 참조하세요.

기본 형식은 다음과 같습니다.

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

종류 및 API 버전

type는 리소스 종류로, Microsoft.VirtualMachineImages/imageTemplates이어야 합니다. apiVersion은 시간이 지나면서 API가 변경됨에 따라 변경됩니다. Azure VM Image Builder 서비스에 대한 모든 주요 API 변경 및 기능 업데이트는 Azure VM Image Builder의 새로운 기능을 참조하세요.

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

위치

위치는 사용자 지정 이미지가 만들어질 지역입니다. 다음 지역이 지원됩니다.

  • 미국 동부
  • 미국 동부 2
  • 미국 중서부
  • 미국 서부
  • 미국 서부 2
  • 미국 서부 3
  • 미국 중남부
  • 북유럽
  • 서유럽
  • 동남아시아
  • 오스트레일리아 남동부
  • 오스트레일리아 동부
  • 영국 남부
  • 영국 서부
  • 브라질 남부
  • 캐나다 중부
  • 인도 중부
  • 미국 중부
  • 프랑스 중부
  • 독일 중서부
  • 일본 동부
  • 미국 중북부
  • 노르웨이 동부
  • 스위스 북부
  • JIO 인도 서부
  • 아랍에미리트 북부
  • 동아시아
  • 한국 중부
  • 남아프리카 북부
  • 카타르 중부
  • USGov 애리조나(공개 미리 보기)
  • USGov 버지니아(공개 미리 보기)

중요

Azure Government 지역(USGov 애리조나 및 USGov 버지니아)에서 Azure Image Builder 공개 미리 보기에 액세스하려면 Microsoft.VirtualMachineImages/FairfaxPublicPreview 기능을 등록하세요.

다음 명령을 사용하여 Azure Government 지역(USGov 애리조나 및 USGov 버지니아)의 Azure Image Builder에 대한 기능을 등록합니다.

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

데이터 상주

Azure VM Image Builder 서비스는 고객이 해당 지역에서 빌드를 요청할 때 엄격한 단일 지역 데이터 보존 요구 사항이 있는 지역 외부에서 고객 데이터를 저장 또는 처리하지 않습니다. 데이터 보존 요구 사항이 있는 지역에서 서비스가 중단되는 경우 다른 지역 및 지리적 위치에서 Bicep 파일/템플릿을 만들어야 합니다.

영역 중복

배포는 영역 중복을 지원하고 VHD는 기본적으로 ZRS(영역 중복 스토리지) 계정에 배포되며 Azure Compute Gallery(이전의 Shared Image Gallery) 버전은 지정된 경우 ZRS 스토리지 형식을 지원합니다.

태그들

태그는 생성된 이미지에 대해 지정할 수 있는 키/값 쌍입니다.

ID

아래에 설명된 사용자 할당 ID를 추가하는 두 가지 방법이 있습니다.

Azure Image Builder 이미지 템플릿 리소스에 대한 사용자가 할당한 ID

필수 - Image Builder에 이미지 읽기/쓰기 및 Azure Storage의 스크립트 읽기 권한이 있으려면 개별 리소스에 대한 권한이 있는 Azure 사용자가 할당한 ID를 만들어야 합니다. Image Builder 권한의 작동 방식 및 관련 단계에 대한 자세한 내용은 이미지를 만들고 사용자가 할당한 관리 ID를 사용하여 Azure 스토리지 계정의 파일에 액세스를 참조하세요.

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

Image Builder 서비스 사용자 할당 ID:

  • 단일 ID만 지원합니다.
  • 사용자 지정 도메인 이름을 지원하지 않습니다.

자세히 알아보려면 Azure 리소스에 대한 관리 ID란?를 참조하세요. 이 기능을 배포하는 방법에 대한 자세한 내용은 Azure CLI를 사용하여 Azure VM에서 Azure 리소스에 대한 관리 ID 구성을 참조하세요.

Image Builder Build VM에 대한 사용자가 할당한 ID

이 속성은 API 버전 2021-10-01 이상에서만 사용할 수 있습니다.

선택 사항 - 구독의 Image Builder 서비스에서 만든 Image Builder Build VM은 이미지를 빌드하고 사용자 지정하는 데 사용됩니다. Image Builder 빌드 VM이 구독의 Azure Key Vault와 같은 다른 서비스에 인증할 수 있는 권한을 가지려면 개별 리소스에 대한 권한이 있는 하나 이상의 Azure 사용자 할당 ID를 만들어야 합니다. 그런 다음 Azure Image Builder는 이러한 사용자 할당 ID를 빌드 VM과 연결할 수 있습니다. 그런 다음 Build VM 내에서 실행되는 사용자 지정 스크립트는 이러한 ID에 대한 토큰을 가져오고 필요에 따라 다른 Azure 리소스와 상호 작용할 수 있습니다. Azure Image Builder에 대한 사용자 할당 ID에는 Azure Image Builder에 대한 모든 사용자 할당 ID에 대한 “관리 ID 운영자” 역할 할당이 있어야 빌드 VM에 연결할 수 있습니다.

참고

이미지 템플릿 리소스에 대해 만든 ID를 포함하여 Image Builder 빌드 VM에 대해 여러 ID를 지정할 수 있습니다. 기본적으로 이미지 템플릿 리소스에 대해 만든 ID는 빌드 VM에 자동으로 추가되지 않습니다.

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

Image Builder 빌드 VM 사용자 할당 ID:

  • VM에서 구성할 하나 이상의 사용자가 할당한 관리 ID 목록을 지원합니다.
  • 구독 간 시나리오(이미지 템플릿이 동일한 테넌트의 다른 구독에서 만들어지는 동안 한 구독에서 만들어진 ID)를 지원합니다.
  • 테넌트 간 시나리오(이미지 템플릿이 다른 테넌트에서 만들어지는 동안 한 테넌트에서 만들어진 ID)를 지원하지 않습니다.

자세한 내용은 다음을 참조하세요.

속성: buildTimeoutInMinutes

이미지 템플릿을 빌드하는 동안 대기할 최대 기간입니다(모든 사용자 지정, 유효성 검사 및 배포 포함).

속성을 지정하지 않거나 값을 0으로 설정하면 기본값인 240분 또는 4시간이 사용됩니다. 최솟값은 6분이고, 최댓값은 960분 또는 16시간입니다. 시간 제한 값에 도달하면(이미지 빌드가 완료되었는지 여부에 관계없이) 다음과 비슷한 오류가 표시됩니다.

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

Windows의 경우 buildTimeoutInMinutes를 60분 미만으로 설정하지 않는 것이 좋습니다. 시간 제한에 도달하면 로그를 검토하여 사용자 지정 단계가 사용자 입력과 같은 항목을 기다리고 있는지 확인합니다. 사용자 지정을 완료하는 데 더 많은 시간이 필요하면 buildTimeoutInMinutes 값을 늘립니다. 그러나 오류가 표시되기 전에 시간 초과될 때까지 기다려야 할 수 있으므로 너무 높게 설정하지 마세요.

속성: customize

Image Builder는 스크립트 실행 또는 서버 다시 부팅과 같이 이미지를 사용자 지정하는 데 사용되는 기능인 여러 "사용자 지정자"를 지원합니다.

customize를 사용하는 경우:

  • 여러 사용자 지정자를 사용할 수 있습니다.
  • 사용자 지정자는 템플릿에 지정된 순서대로 실행됩니다.
  • 한 사용자 지정자가 실패하면 전체 사용자 지정 구성 요소가 실패하고 오류가 보고됩니다.
  • 템플릿에서 사용하기 전에 스크립트를 철저히 테스트합니다. 스크립트를 직접 디버그하는 것이 더 쉽습니다.
  • 스크립트에 중요한 데이터를 넣지 마세요. 인라인 명령은 이미지 템플릿 정의에서 볼 수 있습니다. 중요한 정보(암호, SAS 토큰, 인증 토큰 등 포함)가 있는 경우 액세스하려면 인증이 필요한 Azure Storage의 스크립트로 이동해야 합니다.
  • MSI를 사용하지 않는 경우 스크립트 위치는 공개적으로 액세스할 수 있어야 합니다.

customize 섹션은 배열입니다. 지원되는 사용자 지정자 유형은 File, PowerShell, Shell, WindowsRestart 및 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 사용자 지정자는 Linux에서 셸 스크립트 실행을 지원합니다. 셸 스크립트는 공개적으로 액세스할 수 있어야 하거나 Image Builder가 셸 스크립트에 액세스하도록 MSI를 구성해야 합니다.

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

사용자 지정 속성은 다음과 같습니다.

  • type – Shell

  • name - 사용자 지정을 추적하기 위한 이름

  • scriptUri - 파일 위치에 대한 URI

  • inline - 쉼표로 구분된 셸 명령의 배열

  • sha256Checksum - 파일의 sha256 체크섬 값. 이 값을 로컬로 생성하면 Image Builder에서 체크섬 및 유효성 검사를 수행합니다.

    sha256Checksum을 생성하려면 Mac/Linux에서 터미널을 사용하여 다음을 실행합니다. sha256sum <fileName>

참고

인라인 명령은 이미지 템플릿 정의의 일부로 저장되며 이미지 정의를 덤프할 때 이를 볼 수 있습니다. 중요한 명령 또는 값(암호, SAS 토큰, 인증 토큰 등 포함)이 있는 경우 이러한 항목을 스크립트로 이동하고 사용자 ID를 사용하여 Azure Storage에 인증하는 것이 좋습니다.

슈퍼 사용자 권한

sudo 접두사를 명령 앞에 붙여 슈퍼 사용자 권한으로 해당 명령을 실행합니다. 명령을 스크립트에 추가하거나 인라인 명령을 사용할 수 있습니다. 예를 들어 다음과 같습니다.

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

scriptUri를 사용하여 참조할 수 있는 sudo 사용 스크립트의 예:

#!/bin/bash -e

echo "Telemetry: creating files"
mkdir /myfiles

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

Windows 다시 시작 사용자 지정자

WindowsRestart 사용자 지정자를 사용하면 Windows VM을 다시 시작하고 VM이 다시 온라인 상태가 될 때까지 기다릴 수 있습니다. 이 사용자 지정자를 사용하면 다시 부팅이 필요한 소프트웨어를 설치할 수 있습니다.

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

사용자 지정 속성은 다음과 같습니다.

  • type: WindowsRestart
  • restartCommand - 다시 시작을 실행하는 명령입니다(선택 사항). 기본값은 'shutdown /r /f /t 0 /c \"packer restart\"'입니다.
  • restartCheckCommand – 다시 시작이 성공 했는지 확인하는 명령입니다(선택 사항).
  • restartTimeout - 크기 및 단위 문자열로 지정된 다시 시작 시간 제한입니다. 예를 들어 5m(5분) 또는 2h(2시간)입니다. 기본값은 5m입니다.

참고

Linux 다시 시작 커스터마이저가 없습니다.

PowerShell 사용자 지정자

PowerShell 사용자 지정자는 Windows에서 PowerShell 스크립트 및 인라인 명령 실행을 지원하며, IB에서 스크립트에 액세스하려면 해당 스크립트에 공개적으로 액세스할 수 있어야 합니다.

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

사용자 지정 속성은 다음과 같습니다.

  • type – PowerShell.

  • scriptUri - PowerShell 스크립트 파일의 위치에 대한 URI입니다.

  • inline - 실행할 인라인 명령이며 쉼표로 구분됩니다.

  • validExitCodes – 선택 사항이며, 스크립트/인라인 명령에서 반환될 수 있는 유효한 코드입니다. 이 속성은 보고된 스크립트/인라인 명령 오류를 방지합니다.

  • runElevated – 선택 사항, 부울. 상승된 권한으로 명령 및 스크립트를 실행하기 위한 지원입니다.

  • sha256Checksum - 파일의 SHA256 체크섬을 로컬로 생성하고 체크섬 값을 소문자로 업데이트하면 Image Builder가 이미지 템플릿 배포 중에 체크섬의 유효성을 검사합니다.

    sha256Checksum을 생성하려면 PowerShell에서 Get-FileHash cmdlet을 사용합니다.

파일 사용자 지정자

File 사용자 지정자를 사용하면 Image Builder에서 GitHub 리포지토리 또는 Azure 스토리지에서 파일을 다운로드할 수 있습니다. 사용자 지정자는 Linux와 Windows를 모두 지원합니다. 빌드 아티팩트를 사용하는 이미지 빌드 파이프라인이 있는 경우 빌드 공유에서 다운로드하도록 파일 사용자 지정자를 설정하고 아티팩트를 이미지로 이동할 수 있습니다.

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

파일 사용자 지정자 속성은 다음과 같습니다.

  • sourceUri -액세스할 수 있는 스토리지 엔드포인트이며, 이 엔드포인트는 GitHub 또는 Azure 스토리지일 수 있습니다. 전체 디렉터리가 아닌 하나의 파일만 다운로드할 수 있습니다. 디렉터리를 다운로드해야 하는 경우에는 압축된 파일을 사용하고 셸 또는 PowerShell 사용자 지정자를 사용하여 압축을 풉니다.

    참고

    sourceUri가 Azure Storage 계정인 경우 Blob이 공용으로 표시되어 있는지와 관계없이 Blob에 대한 읽기 권한을 관리되는 사용자 ID에 부여해야 합니다. 스토리지 권한을 설정하려면 이 예제를 참조하세요.

  • destination – 전체 대상 경로 및 파일 이름입니다. 참조된 경로 및 하위 디렉터리가 있어야 하며, 셸 또는 PowerShell 사용자 지정자를 사용하여 이러한 경로를 미리 설정합니다. 스크립트 사용자 지정자를 사용하여 경로를 만들 수 있습니다.

이 사용자 지정자는 Windows 디렉터리 및 Linux 경로에서 지원되지만, 다음과 같은 몇 가지 차이점이 있습니다.

  • Linux – 이미지 빌더에서 쓸 수 있는 유일한 경로는 /tmp입니다.
  • Windows – 경로 제한이 없지만 해당 경로가 존재해야 합니다.

파일을 다운로드하거나 지정된 디렉터리에 배치하는 동안 중에 오류가 발생하면 사용자 지정 단계가 실패하며, 이 오류는 customization.log에 기록됩니다.

참고

파일 사용자 지정자는 20MB 이하 소용량 파일 다운로드에만 적합합니다. 대용량 파일 다운로드의 경우 스크립트 또는 인라인 명령을 사용합니다. 예를 들어, Linux의 wget 또는 curl, Windows의 Invoke-WebRequest 같은 코드를 사용하여 파일을 다운로드합니다. Azure Storage에 있는 파일의 경우 Image Builder 빌드 VM에 대한 사용자 할당 ID 설명서에 따라 빌드 VM에 해당 파일을 볼 수 있는 권한이 있는 ID를 할당해야 합니다. Azure에 저장되지 않은 모든 파일은 Azure Image Builder가 다운로드할 수 있도록 공개적으로 액세스할 수 있어야 합니다.

  • sha256Checksum - 파일의 SHA256 체크섬을 로컬로 생성하고 체크섬 값을 소문자로 업데이트하면 Image Builder가 이미지 템플릿 배포 중에 체크섬의 유효성을 검사합니다.

    sha256Checksum을 생성하려면 PowerShell에서 Get-FileHash cmdlet을 사용합니다.

Windows 업데이트 사용자 지정자

WindowsUpdate 사용자 지정자는 Packer 커뮤니티에서 유지 관리하는 오픈소스 프로젝트인 Packer용 커뮤니티 Windows 업데이트 프로비전 프로그램을 기반으로 합니다. Microsoft는 Image Builder 서비스를 사용하여 프로비전 프로그램을 테스트 및 유효성 검사하고, 관련 문제 조사를 지원하고, 문제를 해결하기 위해 노력하지만, 오픈 소스 프로젝트는 Microsoft에서 공식적으로 지원하지 않습니다. Windows 업데이트 프로비저닝 프로그램에 대한 자세한 설명서 및 도움말은 프로젝트 리포지토리를 참조하세요.

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

사용자 지정자 속성:

  • type – WindowsUpdate.
  • searchCriteria - 선택 사항으로 설치되는 업데이트 형식(예: 권장 또는 중요)을 정의합니다. BrowseOnly=0 및 IsInstalled=0(권장)이 기본값입니다.
  • filters – 선택 사항. 업데이트를 포함하거나 제외하도록 필터를 지정할 수 있습니다.
  • updateLimit – 선택 사항. 설치할 수 있는 업데이트 수를 정의합니다. 기본값은 1000입니다.

참고

처리 중인 Windows 다시 시작이나 실행 중인 애플리케이션 설치가 있는 경우 Windows 업데이트 사용자 지정자가 실패할 수 있습니다. 일반적으로 customization.log System.Runtime.InteropServices.COMException (0x80240016): Exception from HRESULT: 0x80240016에서 이 오류를 볼 수 있습니다. Windows 다시 시작을 추가하고 Windows 업데이트를 실행하기 전에 인라인 명령이나 스크립트에 일시 중지나 대기 명령을 사용하여 애플리케이션 설치가 완료되도록 충분한 시간을 주는 것이 좋습니다.

일반화

기본적으로 Azure Image Builder는 각 이미지 사용자 지정 단계가 끝날 때 deprovision 코드를 실행하여 이미지를 일반화합니다. 일반화는 여러 VM을 만드는 데 다시 사용할 수 있도록 이미지를 설정하는 프로세스입니다. Windows VM의 경우 Azure Image Builder는 Sysprep을 사용합니다. Linux의 경우 Azure Image Builder는 waagent -deprovision을 실행합니다.

Azure Image Builder가 일반화에 사용하는 명령은 모든 상황에 적합하지 않을 수 있으므로, 필요한 경우 이 명령을 사용자 지정할 수 있습니다.

기존 사용자 지정을 마이그레이션하고 다른 Sysprep/waagent 명령을 사용하는 경우 Image Builder 일반 명령을 사용할 수 있습니다. VM 만들기가 실패하는 경우 자체 Sysprep 또는 waagent 명령을 사용하세요.

Azure Image Builder에서 Windows 사용자 지정 이미지를 성공적으로 만들고, 이 이미지에서 VM을 만든 다음, VM 만들기가 실패하거나 성공적으로 완료되지 않는 경우 Windows Server Sysprep 설명서를 검토하거나 Windows Server Sysprep 고객 서비스 지원 팀에 지원 요청을 제기해야 합니다. 이 팀은 문제를 해결하고 올바른 Sysprep 사용에 대해 조언할 수 있습니다.

기본 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 }
Write-Output '>>> Sysprepping VM ...'
if( Test-Path $Env:SystemRoot\system32\Sysprep\unattend.xml ) {
  Remove-Item $Env:SystemRoot\system32\Sysprep\unattend.xml -Force
}
& $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 ...'

기본 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

명령 재정의

명령을 재정의하려면 PowerShell 또는 셸 스크립트 프로비저닝 프로그램을 사용하여 정확한 파일 이름으로 명령 파일을 만들고 올바른 디렉터리에 배치합니다.

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

Image Builder에서 이러한 명령을 읽고, 이러한 명령은 customization.log AIB 로그에 기록됩니다. 로그를 수집하는 방법은 문제 해결을 참조하세요.

속성: distribute

Azure Image Builder는 다음과 같은 세 가지 배포 대상을 지원합니다.

  • managedImage - 관리형 이미지입니다.
  • sharedImage - Azure Compute Gallery.
  • VHD - 스토리지 계정의 VHD입니다.

동일한 구성으로 두 대상 유형 모두에 이미지를 배포할 수 있습니다.

참고

기본 AIB sysprep 명령에는 "/mode:vm"이 포함되지 않지만, HyperV 역할이 설치되는 이미지를 만들 때 이 속성이 필요할 수 있습니다. 이 명령 인수를 추가해야 하는 경우 Sysprep 명령을 재정의해야 합니다.

배포할 대상이 둘 이상 있을 수 있으므로 Image Builder는 runOutputName을 쿼리하여 액세스할 수 있는 모든 배포 대상의 상태를 유지 관리합니다. runOutputName은 배포 후 해당 배포에 대한 정보를 위해 쿼리할 수 있는 개체입니다. 예를 들어 VHD의 위치 또는 이미지 버전이 복제된 지역 또는 생성된 SIG 이미지 버전을 쿼리할 수 있습니다. 이는 모든 배포 대상의 속성입니다. runOutputName은 각 배포 대상에 고유해야 합니다. Azure Compute Gallery 배포를 쿼리하는 예제는 다음과 같습니다.

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

출력:

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

Distribute: managedImage

이미지 출력은 관리형 이미지 리소스입니다.

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

배포 속성은 다음과 같습니다.

  • type – managedImage
  • imageId – 대상 이미지의 리소스 ID입니다. 필요한 형식: /subscriptions/<subscriptionId>/resourceGroups/<destinationResourceGroupName>/providers/Microsoft.Compute/images/<imageName>
  • location - 관리형 이미지의 위치입니다.
  • runOutputName – 분포를 식별하는 고유 이름입니다.
  • artifactTags - 선택적 사용자 지정 키\값 태그입니다.

참고

대상 리소스 그룹이 존재해야 합니다. 다른 지역에 이미지를 배포하려는 경우 배포 시간이 늘어납니다.

Distribute: sharedImage

Azure Compute Gallery는 이미지 영역 복제, 버전 관리 및 사용자 지정 이미지 공유를 관리할 수 있는 새로운 이미지 관리 서비스입니다. Azure Image Builder는 이 서비스를 통한 배포를 지원하므로 Azure Compute Galleries에서 지원하는 지역에 이미지를 배포할 수 있습니다.

Azure Compute Gallery는 다음으로 구성됩니다.

  • 갤러리 - 여러 이미지에 대한 컨테이너입니다. 갤러리는 한 지역에 배포됩니다.
  • 이미지 정의 - 이미지에 대한 개념적 그룹화입니다.
  • 이미지 버전 - VM 또는 확장 집합을 배포하는 데 사용되는 이미지 형식입니다. 이미지 버전은 VM을 배포해야 하는 다른 지역으로 복제할 수 있습니다.

갤러리에 배포하려면 먼저 갤러리와 이미지 정의를 만들어야 합니다(갤러리 만들기 참조).

{
  "type": "SharedImage",
  "galleryImageId": "<resource ID>",
  "runOutputName": "<name>",
  "artifactTags": {
      "<name>": "<value>",
      "<name>": "<value>"
  },
  "replicationRegions": [
      "<region where the gallery is deployed>",
      "<region>"
  ]
}

갤러리의 속성 배포:

  • type - sharedImage

  • galleryImageId – Azure Compute Gallery의 ID이며, 이 속성은 다음 두 가지 형식으로 지정할 수 있습니다.

    • 자동 버전 관리 - Image Builder에서 단조로운 버전 번호를 생성합니다. 이 속성은 동일한 템플릿에서 이미지를 계속 다시 빌드하려는 경우에 유용합니다. 형식은 /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/galleries/<sharedImageGalleryName>/images/<imageGalleryName>입니다.
    • 명시적 버전 관리 - Image Builder에서 사용하려는 버전 번호를 전달할 수 있습니다. 형식은 다음과 같습니다. /subscriptions/<subscriptionID>/resourceGroups/<rgName>/providers/Microsoft.Compute/galleries/<sharedImageGalName>/images/<imageDefName>/versions/<version - for example: 1.1.1>
  • runOutputName – 분포를 식별하는 고유 이름입니다.

  • artifactTags - 선택적 사용자 지정 키\값 태그입니다.

  • replicationRegions - 복제할 지역의 배열입니다. 지역 중 하나는 갤러리가 배포된 지역이어야 합니다. 빌드는 복제가 완료될 때까지 완료되지 않기 때문에 영역을 추가하면 빌드 시간도 증가합니다.

  • excludeFromLatest(선택 사항) - 만든 이미지 버전을 갤러리 정의에서 최신 버전으로 사용하지 않도록 표시할 수 있습니다. 기본값은 'false'입니다.

  • storageAccountType(선택 사항) - AIB에서 만들 이미지 버전에 대해 다음과 같은 유형의 스토리지를 지정할 수 있도록 지원합니다.

    • "Standard_LRS"
    • "Standard_ZRS"","

참고

이미지 템플릿과 참조되는 image definition이 동일한 위치에 있지 않으면 이미지를 만드는 데 더 오래 걸립니다. Image Builder에는 현재 이미지 버전 리소스에 대한 location 매개 변수가 없기 때문에 부모 image definition에서 가져옵니다. 예를 들어 이미지 정의가 westus에 있고 이미지 버전이 eastus에 복제되도록 하려는 경우 Blob이 westus에 복사되고 이미지 버전 리소스가 westus에 만들어진 다음, eastus에 복제됩니다. 복제 시간이 더해지지 않도록 하려면 image definition 및 이미지 템플릿이 동일한 위치에 있어야 합니다.

배포: VHD

VHD로 출력할 수 있습니다. 그런 다음 VHD를 복사하여 Azure MarketPlace에 게시하거나 Azure Stack과 함께 사용할 수 있습니다.

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

OS 지원: Windows 및 Linux

VHD 배포 매개 변수:

  • type - VHD.
  • runOutputName – 분포를 식별하는 고유 이름입니다.
  • tags - 선택 사항. 사용자 지정 키 값 쌍 태그입니다.

Azure Image Builder에서는 사용자가 스토리지 계정 위치를 지정할 수 없지만, runOutputs의 상태를 쿼리하여 위치를 가져올 수 있습니다.

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

참고

VHD를 만든 후에는 가능한 한 빨리 다른 위치로 복사합니다. VHD는 이미지 템플릿이 Azure Image Builder 서비스로 제출될 때 생성된 임시 리소스 그룹에서 스토리지 계정에 저장됩니다. 이미지 템플릿을 삭제하면 VHD가 손실됩니다.

속성: source

source 섹션에는 Image Builder에서 사용되는 원본 이미지에 대한 정보가 포함되어 있습니다.

API에는 이미지 빌드의 원본을 정의하는 SourceType이 필요하며 현재 세 가지 형식이 있습니다.

  • PlatformImage - 원본 이미지가 Marketplace 이미지 임을 나타냅니다.
  • ManagedImage - 일반 관리형 이미지에서 시작할 때 사용됩니다.
  • SharedImageVersion - Azure Compute Gallery의 이미지 버전을 원본으로 사용할 때 사용됩니다.

참고

기존 Windows 사용자 지정 이미지를 사용하는 경우 단일 Windows 7 또는 Windows Server 2008 R2 이미지에서 Sysprep 명령을 최대 3회 실행하거나, 이후 버전의 단일 Windows 이미지에서 1,001회 실행할 수 있습니다. 자세한 내용은 sysprep 설명서를 참조하세요.

PlatformImage 원본

Azure Image Builder는 Windows Server 및 클라이언트 그리고 Linux Azure Marketplace 이미지를 지원합니다. 전체 목록은 Azure Image Builder 알아보기를 참조하세요.

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

여기에 나와 있는 속성은 AZ CLI를 사용하여 VM을 만드는 데 사용되는 것과 동일합니다. 속성을 가져오려면 아래 명령을 실행합니다.

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

버전에서 latest를 사용할 수 있습니다. 버전은 템플릿이 제출될 때가 아니라 이미지 빌드가 수행될 때 평가됩니다. Azure Compute Gallery 대상과 함께 이 기능을 사용하는 경우 템플릿을 다시 전송하지 않고 주기적으로 이미지 빌드를 다시 실행하여 가장 최근 이미지에서 이미지를 다시 만들 수 있습니다.

마켓플레이스 계획 정보 지원

플랜 정보를 지정할 수도 있습니다. 예를 들면 다음과 같습니다.

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

ManagedImage 원본

원본 이미지를 일반화된 VHD 또는 VM의 기존 관리형 이미지로 설정합니다.

참고

원본 관리형 이미지는 지원되는 OS여야 하며 이미지가 Azure Image Builder 템플릿과 동일한 구독 및 지역에 상주해야 합니다.

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

imageId는 관리형 이미지의 ResourceId여야 합니다. az image list를 사용하여 사용 가능한 이미지를 나열합니다.

SharedImageVersion 원본

원본 이미지를 Azure Compute Gallery의 기존 이미지 버전으로 설정합니다.

참고

원본 공유 이미지 버전은 지원되는 OS여야 하고 이미지 버전은 Azure Image Builder 템플릿과 동일한 지역에 상주해야 합니다. 그렇지 않은 경우 Image Builder 템플릿 지역에 이미지 버전을 복제합니다.

"source": {
  "type": "SharedImageVersion",
  "imageVersionID": "/subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>/providers/Microsoft.Compute/galleries/<sharedImageGalleryName>/images/<imageDefinitionName/versions/<imageVersion>"
}

imageVersionId는 이미지 버전의 ResourceId여야 합니다. az sig image-version list를 사용하여 이미지 버전을 나열합니다.

속성: stagingResourceGroup

stagingResourceGroup 속성에는 Image Builder 서비스에서 이미지 빌드 프로세스 중에 사용하기 위해 만드는 스테이징 리소스 그룹에 대한 정보가 포함됩니다. stagingResourceGroup은 이미지 빌드 프로세스 중에 Image Builder에서 만든 리소스 그룹을 더 세밀하게 제어하려는 사용자를 위한 선택적 속성입니다. 고유한 리소스 그룹을 만들고 stagingResourceGroup 섹션에서 해당 리소스 그룹을 지정하거나 Image Builder가 리소스 그룹을 대신 만들도록 합니다.

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

템플릿 만들기 시나리오

  • stagingResourceGroup 속성이 비어 있음

    stagingResourceGroup 속성이 지정되지 않거나 빈 문자열로 지정된 경우 Image Builder 서비스에서 "IT_***" 기본 이름 규칙을 사용하여 스테이징 리소스 그룹을 만듭니다. 스테이징 리소스 그룹에는 기본 태그 createdBy, imageTemplateName, imageTemplateResourceGroupName이 적용됩니다. 또한 기본 RBAC는 “기여자”인 Azure Image Builder 템플릿 리소스에 할당된 ID에 적용됩니다.

  • stagingResourceGroup 속성이 존재하는 리소스 그룹을 사용하여 지정됨

    stagingResourceGroup 속성이 존재하는 리소스 그룹을 사용하여 지정된 경우 Image Builder 서비스에서 리소스 그룹이 다른 이미지 템플릿과 연결되어 있지 않고, 비어 있고(내부에 리소스가 없음), 이미지 템플릿과 동일한 지역에 있고, Azure Image Builder 이미지 템플릿 리소스에 할당된 ID에 적용된 "기여자" 또는 "소유자" RBAC를 가지고 있는지 확인합니다. 앞에서 언급한 요구 사항 중 하나라도 충족되지 않으면 오류가 throw됩니다. 스테이징 리소스 그룹에는 태그 usedBy, imageTemplateName, imageTemplateResourceGroupName이 적용됩니다. 기존 태그는 삭제되지 않습니다.

중요

Windows 원본 이미지를 사용하여 기존 리소스 그룹 및 VNet을 Azure Image Builder 서비스에 지정하려고 할 때 Azure Image Builder의 자사 앱에 해당하는 서비스 주체에 대한 리소스 그룹에 기여자 역할을 할당해야 합니다. 리소스 그룹에 기여자 역할을 할당하는 방법에 대한 CLI 명령 및 포털 지침은 다음 설명서 VM Azure Image Builder 문제 해결: 디스크 만들기 권한 부여 오류를 참조하세요.

  • stagingResourceGroup 속성이 존재하지 않는 리소스 그룹을 사용하여 지정됨

    stagingResourceGroup 속성이 존재하지 않는 리소스 그룹을 사용하여 지정된 경우 Image Builder 서비스에서 stagingResourceGroup 속성에 제공된 이름을 사용하여 스테이징 리소스 그룹을 만듭니다. 지정된 이름이 리소스 그룹에 대한 Azure 명명 요구 사항을 충족하지 않으면 오류가 발생합니다. 스테이징 리소스 그룹에는 기본 태그 createdBy, imageTemplateName, imageTemplateResourceGroupName이 적용됩니다. 기본적으로 Azure Image Builder 이미지 템플릿 리소스에 할당된 ID에는 리소스 그룹에서 “기여자” RBAC가 적용됩니다.

템플릿 삭제

Image Builder 서비스에서 만든 모든 스테이징 리소스 그룹은 이미지 템플릿이 삭제된 후 삭제됩니다. 삭제에는 stagingResourceGroup 속성에 지정되었지만 이미지 빌드 이전에는 존재하지 않았던 스테이징 리소스 그룹이 포함됩니다.

Image Builder에서 스테이징 리소스 그룹을 만들지 않았지만 이 리소스 그룹 내의 리소스를 만든 경우 Image Builder 서비스에 리소스를 삭제하는 데 필요한 적절한 권한 또는 역할이 있으면 이미지 템플릿이 삭제된 후 해당 리소스가 삭제됩니다.

속성: validate

validate 속성을 사용하여 플랫폼 이미지뿐 아니라 Azure Image Builder를 사용하여 만들었는지 여부에 관계없이 직접 만드는 모든 사용자 지정 이미지의 유효성을 검사할 수 있습니다.

Azure Image Builder는 sourceValidationOnly 속성을 사용하여 설정할 수 있는 ‘Source-Validation-Only’ 모드를 지원합니다. sourceValidationOnly 속성이 true로 설정되면 source 섹션에 지정된 이미지의 유효성이 직접 검사됩니다. 사용자 지정 이미지를 생성한 다음, 유효성을 검사하기 위해 별도의 빌드가 실행되지 않습니다.

inVMValidations 속성은 이미지에서 수행될 유효성 검사기 목록을 가져옵니다. Azure Image Builder는 PowerShell 및 셸 유효성 검사기를 모두 지원합니다.

continueDistributeOnFailure 속성은 유효성 검사가 실패하는 경우 출력 이미지가 배포되는지 여부를 담당합니다. 기본적으로 유효성 검사가 실패하고 이 속성이 false로 설정되면 출력 이미지가 배포되지 않습니다. 유효성 검사가 실패하고 이 속성이 true로 설정되면 출력 이미지가 계속 배포됩니다. 사용할 이미지가 배포되지 않을 수 있으므로 이 옵션은 주의해서 사용해야 합니다. 두 경우(true 또는 false) 모두에서 유효성 검사가 실패하면 엔드투엔드 이미지 실행이 실패한 것으로 보고됩니다. 이 속성은 유효성 검사의 성공 여부에 영향을 주지 않습니다.

validate를 사용하는 경우:

  • 여러 유효성 검사기를 사용할 수 있습니다.
  • 유효성 검사기는 템플릿에 지정된 순서대로 실행됩니다.
  • 한 유효성 검사기가 실패하면 전체 유효성 검사 구성 요소가 실패하고 다시 오류를 보고합니다.
  • 템플릿에서 사용하기 전에 스크립트를 철저히 테스트하는 것이 좋습니다. 사용자 VM에서 스크립트를 디버깅하는 것이 더 쉽습니다.
  • 스크립트에 중요한 데이터를 넣지 마세요.
  • MSI를 사용하지 않는 경우 스크립트 위치는 공개적으로 액세스할 수 있어야 합니다.

validate 속성을 사용하여 Windows 이미지의 유효성을 검사하는 방법:

{
  "properties": {
    "validate": {
      "continueDistributeOnFailure": false,
      "sourceValidationOnly": false,
      "inVMValidations": [
        {
          "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 속성:

  • type – PowerShell.

  • name - 유효성 검사기의 이름

  • scriptUri - PowerShell 스크립트 파일의 URI.

  • inline – 쉼표로 구분된 실행할 명령의 배열.

  • validExitCodes – 선택 사항. 스크립트/인라인 명령에서 반환될 수 있는 유효한 코드입니다. 이를 지정하면 스크립트/인라인 명령의 오류를 보고하지 않습니다.

  • runElevated – 선택 사항, 부울. 상승된 권한으로 명령 및 스크립트를 실행하기 위한 지원입니다.

  • sha256Checksum - 파일의 sha256 체크섬 값. 이 값을 로컬로 생성하면 Image Builder가 체크섬 및 유효성 검사를 수행합니다.

    sha256Checksum을 생성하려면 Windows에서 PowerShell을 사용하여 Get-Hash를 실행합니다.

validate 속성을 사용하여 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>"
        }
      ]
    }
  }
 }

inVMValidations 속성:

  • type – 셸

  • name - 유효성 검사기의 이름

  • scriptUri - 스크립트 파일의 URI

  • inline - 쉼표로 구분된 실행할 명령의 배열.

  • sha256Checksum - 파일의 sha256 체크섬 값. 이 값을 로컬로 생성하면 Image Builder가 체크섬 및 유효성 검사를 수행합니다.

    sha256Checksum을 생성하려면 Mac/Linux에서 터미널을 사용하여 다음을 실행합니다. sha256sum <fileName>

속성: vmProfile

vmSize(선택 사항)

Image Builder는 Gen1 이미지의 경우 Standard_D1_v2, Gen2 이미지의 경우 Standard_D2ds_v4의 기본 SKU 크기를 사용합니다. 세대는 source에서 지정한 이미지에 의해 정의됩니다. vmSize는 다음과 같은 이유로 재정의할 수 있습니다.

  • 증가된 메모리, CPU 및 대량 파일(GB) 처리가 필요한 사용자 지정을 수행.
  • Windows 빌드를 실행하는 경우 “Standard_D2_v2” 또는 해당 VM 크기를 사용해야 합니다.
  • VM 격리가 필요합니다.
  • 특정 하드웨어가 필요한 이미지를 사용자 지정합니다. 예를 들어 GPU VM의 경우 GPU VM 크기가 필요합니다.
  • 빌드 VM에서 엔드투엔드 미사용 암호화가 필요합니다. 로컬 임시 디스크를 사용하지 않는 지원 빌드 VM 크기를 지정해야 합니다.

osDiskSizeGB

기본적으로 Image Builder는 이미지의 크기를 변경하지 않으며 원본 이미지의 크기를 사용합니다. 필요에 따라 OS 디스크(Win 및 Linux)의 크기 늘릴 수 있으며, 값이 0이면 원본 이미지와 동일한 크기를 그대로 유지합니다. OS 디스크 크기는 원본 이미지의 크기보다 작게 줄일 수 없습니다.

{
  "osDiskSizeGB": 100
}

vnetConfig(선택 사항)

VNet 속성을 지정하지 않으면 Image Builder에서 자체 VNet, 공용 IP 및 NSG(네트워크 보안 그룹)를 만듭니다. 공용 IP는 서비스에서 빌드 VM과 통신하는 데 사용됩니다. 공용 IP를 사용하지 않거나 Image Builder에서 구성 서버(DSC, Chef, Puppet, Ansible), 파일 공유와 같은 기존 VNet 리소스에 액세스할 수 있도록 하려면 VNet을 지정할 수 있습니다. 자세한 내용은 네트워킹 설명서를 검토하세요.

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

이미지 템플릿 작업

이미지 빌드 시작

빌드를 시작하려면 이미지 템플릿 리소스에서 '실행'을 호출해야 합니다. run 명령의 예는 다음과 같습니다.

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

이미지 빌드 취소

잘못된 것으로 생각되는 이미지 빌드를 실행하거나, 사용자 입력을 기다리거나, 성공적으로 완료되지 않을 것으로 생각되는 경우 빌드를 취소할 수 있습니다.

빌드는 언제든지 취소할 수 있습니다. 배포 단계가 시작된 경우에도 취소할 수 있지만 완료되지 않았을 수 있는 모든 이미지를 정리해야 합니다. 취소 명령은 취소가 완료될 때까지 기다리지 않습니다. 다음 상태 명령을 사용하여 lastrunstatus.runstate의 취소 진행률을 모니터링합니다.

cancel 명령의 예는 다음과 같습니다.

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

다음 단계

Azure Image Builder GitHub에 다양한 시나리오에 대한 샘플 .json 파일이 있습니다.