Поделиться через


Создание образа Linux и его распространение в Коллекции вычислений Azure с помощью Azure CLI

Область применения: ✔️ Виртуальные машины Linux ✔️ Гибкие масштабируемые наборы

В этой статье описано, как можно использовать Конструктор образов виртуальных машин Azure и Azure CLI для создания версии образа в Коллекции вычислений Azure (прежнее название — Общая коллекция образов) и глобального распространения этого образа. Вы также можете создать версию образа с помощью Azure PowerShell.

В этой статье используется пример шаблона JSON для настройки образа. Файл JSON — helloImageTemplateforSIG.json.

С целью распространения образа в Коллекции вычислений Azure для раздела шаблона distribute используется значение sharedImage.

Регистрация поставщиков

Чтобы использовать построителе образов виртуальных машин, необходимо зарегистрировать поставщиков. Проверьте регистрацию, выполнив следующие команды:

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

Если в выходных данных не указано, что функция зарегистрирована, выполните следующие команды:

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

Настройка переменных и разрешений

Так как вы будете использовать несколько блоков информации повторно, необходимо создать переменные для их хранения.

Конструктор образов виртуальных машин поддерживает создание пользовательских образов только в той же группе ресурсов, где расположен образ, управляемый источником. В следующем примере показано, как обновить имя группы ресурсов, чтобы оно совпадало с именем вашего образа, управляемого источником.

# Resource group name - ibLinuxGalleryRG in this example
sigResourceGroup=ibLinuxGalleryRG
# Datacenter location - West US 2 in this example
location=westus2
# Additional region to replicate the image to - East US in this example
additionalregion=eastus
# Name of the Azure Compute Gallery - myGallery in this example
sigName=myIbGallery
# Name of the image definition to be created - myImageDef in this example
imageDefName=myIbImageDef
# Reference name in the image distribution metadata
runOutputName=aibLinuxSIG

Создайте переменную для идентификатора подписки:

subscriptionID=$(az account show --query id --output tsv)

Создайте группу ресурсов:

az group create -n $sigResourceGroup -l $location

Создание назначаемого пользователем удостоверения и задание разрешений для группы ресурсов

Конструктор образов виртуальных машин Azure будет использовать предоставленное удостоверение пользователя для вставки образа в Коллекцию вычислений Azure. В этом примере вы создаете определение роли Azure с помощью специальных действий для распространения образа. Затем определение роли будет назначено удостоверению пользователя.

# 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 $sigResourceGroup -n $identityName

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

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

# Download an Azure role-definition template, and update the template with the parameters that were specified earlier
curl https://raw.githubusercontent.com/Azure/azvmimagebuilder/master/solutions/12_Creating_AIB_Security_Roles/aibRoleImageCreation.json -o aibRoleImageCreation.json

imageRoleDefName="Azure Image Builder Image Def"$(date +'%s')

# Update the definition
sed -i -e "s/<subscriptionID>/$subscriptionID/g" aibRoleImageCreation.json
sed -i -e "s/<rgName>/$sigResourceGroup/g" aibRoleImageCreation.json
sed -i -e "s/Azure Image Builder Service Image Creation Role/$imageRoleDefName/g" aibRoleImageCreation.json

# Create role definitions
az role definition create --role-definition ./aibRoleImageCreation.json

# Grant a role definition to the user-assigned identity
az role assignment create \
    --assignee $imgBuilderCliId \
    --role "$imageRoleDefName" \
    --scope /subscriptions/$subscriptionID/resourceGroups/$sigResourceGroup

Чтобы использовать Конструктор образов виртуальных машин с Коллекцией вычислений Azure, вам потребуются существующая коллекция и определение образа. Конструктор образов виртуальных машин автоматические не создает коллекцию и определение образа.

Если у вас еще нет коллекции и определения образа, начните с их создания.

Сначала создайте коллекцию:

az sig create \
    -g $sigResourceGroup \
    --gallery-name $sigName

Затем создайте определение образа:

az sig image-definition create \
   -g $sigResourceGroup \
   --gallery-name $sigName \
   --gallery-image-definition $imageDefName \
   --publisher myIbPublisher \
   --offer myOffer \
   --sku 20_04-lts-gen2 \
   --os-type Linux \
   --hyper-v-generation V2 \
   --features SecurityType=TrustedLaunchSupported

Скачивание и настройка файла JSON

Скачайте файл JSON шаблона и настройте его, указав нужные значения переменных:

curl https://raw.githubusercontent.com/Azure/azvmimagebuilder/master/quickquickstarts/1_Creating_a_Custom_Linux_Shared_Image_Gallery_Image/helloImageTemplateforSIG.json -o helloImageTemplateforSIG.json
sed -i -e "s/<subscriptionID>/$subscriptionID/g" helloImageTemplateforSIG.json
sed -i -e "s/<rgName>/$sigResourceGroup/g" helloImageTemplateforSIG.json
sed -i -e "s/<imageDefName>/$imageDefName/g" helloImageTemplateforSIG.json
sed -i -e "s/<sharedImageGalName>/$sigName/g" helloImageTemplateforSIG.json
sed -i -e "s/<region1>/$location/g" helloImageTemplateforSIG.json
sed -i -e "s/<region2>/$additionalregion/g" helloImageTemplateforSIG.json
sed -i -e "s/<runOutputName>/$runOutputName/g" helloImageTemplateforSIG.json
sed -i -e "s%<imgBuilderId>%$imgBuilderId%g" helloImageTemplateforSIG.json

Создание версии образа

В этом разделе показано, как создать версию образа в коллекции.

Отправьте конфигурацию образа в Конструктор образов виртуальных машин Azure.

az resource create \
    --resource-group $sigResourceGroup \
    --properties @helloImageTemplateforSIG.json \
    --is-full-object \
    --resource-type Microsoft.VirtualMachineImages/imageTemplates \
    -n helloImageTemplateforSIG01

Запустите сборку образа:

az resource invoke-action \
     --resource-group $sigResourceGroup \
     --resource-type  Microsoft.VirtualMachineImages/imageTemplates \
     -n helloImageTemplateforSIG01 \
     --action Run

Создание образа и его репликация в оба региона могут занять некоторое время. Дождитесь завершения этих процессов, прежде чем переходить к созданию виртуальной машины.

Создание виртуальной машины

Создайте виртуальную машину на основе версии образа, созданной Конструктором образов виртуальных машин.

az vm create \
  --resource-group $sigResourceGroup \
  --name myAibGalleryVM \
  --admin-username aibuser \
  --location $location \
  --image "/subscriptions/$subscriptionID/resourceGroups/$sigResourceGroup/providers/Microsoft.Compute/galleries/$sigName/images/$imageDefName/versions/latest" \
  --security-type TrustedLaunch \
  --generate-ssh-keys

Подключитесь к виртуальной машине через SSH (SSH):

ssh aibuser@<publicIpAddress>

Как только ваше SSH-подключение будет установлено, вы должны увидеть, что образ настроен с отображением сообщения дня:

*******************************************************
**            This VM was built from the:            **
**      !! AZURE VM IMAGE BUILDER Custom Image !!    **
**         You have just been Customized :-)         **
*******************************************************

Очистка ресурсов

Примечание.

Если вы хотите повторно настроить версию образа, чтобы создать новую версию того же образа, пропустите этот шаг и перейдите к статье Использование Конструктора образов виртуальных машин для создания другой версии образа.

Если вам больше не нужны ресурсы, созданные, как описано в этой статье, вы можете удалить их, выполнив следующие действия.

Этот процесс удаляет как созданный вами образ, так и все остальные файлы ресурсов. Убедитесь, что развертывание завершено, прежде чем удалять ресурсы.

При удалении ресурсов коллекции вам нужно будет удалить все версии образа, прежде чем удалять определение образа, используемое для их создания. Чтобы удалить коллекцию, сначала необходимо удалить все определения образов в коллекции.

  1. Удалите шаблон Конструктора образов виртуальных машин.

    az resource delete \
        --resource-group $sigResourceGroup \
        --resource-type Microsoft.VirtualMachineImages/imageTemplates \
        -n helloImageTemplateforSIG01
    
  2. Удалите назначенные разрешения, роли и удостоверение.

    az role assignment delete \
        --assignee $imgBuilderCliId \
        --role "$imageRoleDefName" \
        --scope /subscriptions/$subscriptionID/resourceGroups/$sigResourceGroup
    
    az role definition delete --name "$imageRoleDefName"
    
    az identity delete --ids $imgBuilderId
    
  3. Получите версию образа, созданную Конструктором образов виртуальных машин (она всегда начинается с 0.), а затем удалите ее.

    sigDefImgVersion=$(az sig image-version list \
    -g $sigResourceGroup \
    --gallery-name $sigName \
    --gallery-image-definition $imageDefName \
    --subscription $subscriptionID --query [].'name' -o json | grep 0. | tr -d '"')
    az sig image-version delete \
    -g $sigResourceGroup \
    --gallery-image-version $sigDefImgVersion \
    --gallery-name $sigName \
    --gallery-image-definition $imageDefName \
    --subscription $subscriptionID
    
  4. Удалите определение образа.

    az sig image-definition delete \
    -g $sigResourceGroup \
    --gallery-name $sigName \
    --gallery-image-definition $imageDefName \
    --subscription $subscriptionID
    
  5. Удалите коллекцию.

    az sig delete -r $sigName -g $sigResourceGroup
    
  6. Удалите ее.

    az group delete -n $sigResourceGroup -y
    

Следующие шаги

Дополнительные сведения см. в статье Коллекция вычислений Azure.