다음을 통해 공유


Azure Image Builder 트리거를 사용하여 자동 이미지 만들기를 사용하도록 설정하는 방법

AIB(Azure Image Builder)의 트리거를 사용하여 빌드 파이프라인에서 특정 조건이 충족되면 자동 이미지 생성을 사용하도록 설정할 수 있습니다.

Important

지역당 허용되는 트리거 수, 특히 구독당 지역별 100개의 제한이 있습니다.

참고 항목

현재는 새 원본 이미지에 대한 트리거 설정만 지원하지만 향후 다양한 종류의 트리거를 지원할 것으로 예상됩니다.

참고 항목

불필요한 빌드 오류를 방지하기 위해 이미지 템플릿 빌드가 여러 번 연속적으로 실패한 경우 트리거를 통한 자동 이미지 생성이 비활성화됩니다(수동 또는 자동으로 트리거됨). 이미지 템플릿을 수동으로 빌드할 수 있으며 수동 빌드에 성공하면 자동 트리거가 다시 활성화됩니다.

필수 조건

첫 번째 트리거를 설정하기 전에 Azure Image Builder API 버전 2022-07-01을 사용하고 있는지 확인합니다.

Azure Image Builder에서 트리거를 설정하는 방법

공급자 등록

VM Image Builder를 트리거와 함께 사용하려면 아래의 공급자를 등록해야 합니다. 다음 명령을 실행하여 등록을 확인합니다.

az provider show -n Microsoft.VirtualMachineImages -o json | grep registrationState
az provider show -n Microsoft.KeyVault -o json | grep registrationState
az provider show -n Microsoft.Compute -o json | grep registrationState
az provider show -n Microsoft.Storage -o json | grep registrationState
az provider show -n Microsoft.Network -o json | grep registrationState
az provider show -n Microsoft.ContainerInstance -o json | grep registrationState

출력에 registered가 표시되지 않으면 다음 명령을 실행합니다.

az provider register -n Microsoft.VirtualMachineImages
az provider register -n Microsoft.Compute
az provider register -n Microsoft.KeyVault
az provider register -n Microsoft.Storage
az provider register -n Microsoft.Network
az provider register -n Microsoft.ContainerInstance

자동 이미지 빌드 트리거 기능을 등록합니다.

az feature register --namespace Microsoft.VirtualMachineImages --name Triggers

변수 설정

먼저 명령에서 반복적으로 사용할 몇 가지 변수를 설정해야 합니다.

# Resource group name - ibTriggersTestRG in this example
resourceGroupName=ibTriggersRG
# Datacenter location - West US 2 in this example
location=westus2
# Additional region to replicate the image to - East US in this example
additionalregion=eastus2
# Name of the Azure Compute Gallery - ibTriggersGallery in this example
acgName=ibTriggersGallery
# Name of the image definition to be created - ibTriggersImageDef in this example
imageDefName=ibTriggersImageDef
# Name of the Trigger to be created - ibTrigger in this example
ibTriggerName=ibTrigger
# Name of the image template to be created - ibTriggersImageTemplate in this example
imageTemplateName=ibTriggersImageTemplate
# Reference name in the image distribution metadata
runOutputName=ibTriggersTestRun
# Create a variable for your subscription ID
subscriptionID=$(az account show --query id --output tsv)

리소스 그룹 만들기

이제 이미지 템플릿을 저장할 수 있는 리소스 그룹을 만들어야 합니다. 다음 명령을 사용하여 리소스 그룹을 만듭니다.

az group create -n $resourceGroupName -l $location

서비스의 관리 ID 만들기

또한 이미지 템플릿(및 잠재적으로 Azure Image Builder 빌드 VM)에 사용할 관리 ID를 만들어야 합니다. 이 예제에서는 “Contributor” 액세스 권한이 있는 관리 ID를 만들지만 Azure Image Builder 서비스가 제대로 작동하는 데 필요한 권한을 포함하는 한 원하는 대로 관리 ID에 할당된 권한 또는 역할을 구체화할 수 있습니다.

Azure Image Builder 서비스에 필요한 권한에 대한 자세한 내용은 Azure CLI를 사용하여 Azure VM Image Builder 권한 구성을 참조하세요.

Azure Image Builder에서 관리 ID를 할당하고 사용하는 방법에 대한 자세한 내용은 다음 설명서, VM Image Builder 템플릿 참조: ID를 참조하세요.

다음 명령을 사용하여 이미지 템플릿에 사용할 관리 ID를 만듭니다.

# Create user-assigned identity for VM Image Builder to access the storage account where the script is stored
identityName=aibBuiUserId$(date +'%s')
az identity create -g $resourceGroupName -n $identityName

# Get the identity client and principal ID
imgBuilderCliId=$(az identity show -g $resourceGroupName -n $identityName --query clientId -o tsv)

# Get the user identity URI that's needed for the template
imgBuilderId=/subscriptions/$subscriptionID/resourcegroups/$resourceGroupName/providers/Microsoft.ManagedIdentity/userAssignedIdentities/$identityName

# Grant "Contributor" access to the user-assigned identity
az role assignment create \
    --assignee $imgBuilderCliId \
    --role "Contributor" \
    --scope /subscriptions/$subscriptionID/resourceGroups/$resourceGroupName

Azure Compute Gallery와 함께 VM Image Builder를 사용하려면 기존 갤러리 및 이미지 정의가 있어야 합니다. VM Image Builder는 갤러리와 이미지 정의를 자동으로 만들지 않습니다.

사용할 갤러리 및 이미지 정의가 아직 없는 경우 만들어야 합니다.

먼저 갤러리를 만듭니다.

az sig create \
    -g $resourceGroupName \
    --gallery-name $acgName

그런 다음, 이미지 정의를 만듭니다.

az sig image-definition create \
   -g $resourceGroupName \
   --gallery-name $acgName \
   --gallery-image-definition $imageDefName \
   --publisher myIbPublisher \
   --offer myOffer \
   --sku 18.04-LTS \
   --os-type Linux

이미지 템플릿 만들기

예제 JSON 템플릿을 다운로드하고 변수로 구성합니다. 다음 이미지 템플릿은 플랫폼 이미지를 원본으로 사용하지만 Azure Compute 갤러리에 새 이미지 버전이 있을 때마다 자동 이미지 생성을 사용하도록 설정하려는 경우 원본을 Azure Compute 갤러리 이미지로 변경할 수 있습니다.

curl https://raw.githubusercontent.com/Azure/azvmimagebuilder/main/quickquickstarts/9_Setting_up_a_Trigger_with_a_Custom_Linux_Image/helloImageTemplate.json -o helloImageTemplateforTriggers.json
sed -i -e "s/<subscriptionID>/$subscriptionID/g" helloImageTemplateforTriggers.json
sed -i -e "s/<rgName>/$resourceGroupName/g" helloImageTemplateforTriggers.json
sed -i -e "s/<imageDefName>/$imageDefName/g" helloImageTemplateforTriggers.json
sed -i -e "s/<acgName>/$acgName/g" helloImageTemplateforTriggers.json
sed -i -e "s/<region1>/$location/g" helloImageTemplateforTriggers.json
sed -i -e "s/<region2>/$additionalregion/g" helloImageTemplateforTriggers.json
sed -i -e "s/<runOutputName>/$runOutputName/g" helloImageTemplateforTriggers.json
sed -i -e "s%<imgBuilderId>%$imgBuilderId%g" helloImageTemplateforTriggers.json

이미지 템플릿 요구 사항:

  • source는 플랫폼 이미지 또는 Azure Compute Gallery 이미지(현재 이 두 원본만 허용됨)이어야 합니다.
  • 플랫폼 이미지를 사용하는 경우 원본의 버전은 Latest이어야 합니다. Azure Compute Gallery 이미지의 경우 버전 이름이 있는 리소스 ID의 마지막 부분을 Latest로 설정해야 합니다.
  • Azure Compute Gallery에 이미지를 배포하는 경우 버전을 지정할 수 없습니다. 버전이 자동으로 증가합니다.
  • 원본이 Azure Compute Gallery 이미지로 설정되고 배포가 Azure Compute Gallery로 설정된 경우 원본 갤러리 이미지와 배포 갤러리 이미지는 동일할 수 없습니다. Azure Compute Gallery 이미지 정의 ID는 원본 갤러리 이미지와 배포 갤러리 이미지 모두에 대해 동일할 수 없습니다.
  • 이미지 템플릿의 provisioningState에는 “성공”이 있어야 하며, 이는 템플릿이 문제없이 만들어졌음을 의미합니다. 템플릿이 성공적으로 프로비전되지 않으면 트리거를 만들 수 없습니다.

템플릿을 구성한 후 다음 명령을 사용하여 이미지 구성을 Azure Image Builder 서비스에 제출합니다.

az image builder create -g $resourceGroupName -n $imageTemplateName --image-template helloImageTemplateforTriggers.json

다음 명령을 사용하여 이미지 템플릿이 성공적으로 만들어졌는지 확인할 수 있습니다.

az image builder show --name $imageTemplateName --resource-group $resourceGroupName

참고 항목

위의 명령을 실행할 때 provisioningState에는 “성공”이 표시되어야 하며, 이는 템플릿이 문제없이 만들어졌음을 의미합니다. provisioningState에 성공이라고 표시되지 않으면 트리거에서 이미지 템플릿을 사용하도록 할 수 없습니다.

원본 트리거 만들기

예제 트리거 템플릿을 다운로드하고 변수로 구성합니다. 다음 트리거는 원본 이미지를 업데이트할 때마다 새 이미지 빌드를 시작합니다.

curl https://raw.githubusercontent.com/kof-f/azvmimagebuilder/main/quickquickstarts/9_Setting_up_a_Trigger_with_a_Custom_Linux_Image/trigger.json -o trigger.json
sed -i -e "s/<region1>/$location/g" trigger.json

트리거 요구 사항:

  • 트리거의 위치는 이미지 템플릿의 위치와 동일해야 합니다. 이는 az resource create cmdlet의 요구 사항입니다.
  • 현재 “SourceImage”인 kind 트리거 중 하나를 지원합니다.
  • 이미지당 하나의 “SourceImage” 트리거만 지원합니다. 이미지에 “SourceImage” 트리거가 이미 있는 경우 새 트리거를 만들 수 없습니다.
  • kind 필드를 다른 유형의 트리거로 업데이트 할 수 없습니다. 트리거를 삭제하고 다시 만들거나 적절한 구성으로 다른 트리거를 만들어야 합니다.

다음 명령을 사용하여 리소스 그룹에 트리거를 추가합니다.

az image builder trigger create --name $ibTriggerName --resource-group $resourceGroupName --image-template-name $imageTemplateName --kind SourceImage

다음 명령을 사용하여 트리거가 성공적으로 만들어졌는지 확인할 수도 있습니다.

az image builder trigger show --name $ibTriggerName --image-template-name $imageTemplateName --resource-group $resourceGroupName

참고 항목

위의 명령을 실행할 때 provisioningState에는 Succeeded이 표시되어야 하며, 이는 트리거가 문제 없이 만들어졌음을 의미합니다. status에서 코드는 Healthy라고 표시해야 하며 메시지는 Trigger is active.로 표시되어야 합니다.

리소스 정리

트리거 삭제

다음 명령을 사용하여 트리거를 삭제합니다.

az image builder trigger delete --name $ibTriggerName --image-template-name $imageTemplateName --resource-group $resourceGroupName

이미지 템플릿 삭제

다음 명령을 사용하여 이미지 템플릿을 삭제합니다.

az image builder delete --name $imageTemplateName --resource-group $resourceGroupName

다음 단계

자세한 내용은 Image Builder 템플릿 참조를 확인하세요.