Verwenden von Azure VM Image Builder für Linux-VMs mit Zugriff auf ein vorhandenes virtuelles Azure Netzwerk
Gilt für: ✔️ Linux-VMs ✔️ Flexible Skalierungsgruppen
In diesem Artikel erfahren Sie, wie Sie mit Azure VM Image Builder ein einfaches, angepasstes Linux-Image erstellen können, das Zugriff auf vorhandene Ressourcen in einem virtuellen Netzwerk hat. Die von Ihnen erstellte VM (virtueller Computer) wird in einem neuen oder bestehenden virtuellen Netzwerk bereitgestellt, das Sie in Ihrem Abonnement angeben. Wenn Sie ein vorhandenes virtuelles Azure-Netzwerk verwenden, erfordert Azure VM Image Builder keine Konnektivität mit einem öffentlichen Netzwerk.
Voraussetzungen
Verwenden Sie die Bash-Umgebung in Azure Cloud Shell. Weitere Informationen finden Sie unter Schnellstart für Bash in Azure Cloud Shell.
Wenn Sie CLI-Referenzbefehle lieber lokal ausführen, installieren Sie die Azure CLI. Wenn Sie Windows oder macOS ausführen, sollten Sie die Azure CLI in einem Docker-Container ausführen. Weitere Informationen finden Sie unter Ausführen der Azure CLI in einem Docker-Container.
Wenn Sie eine lokale Installation verwenden, melden Sie sich mithilfe des Befehls az login bei der Azure CLI an. Führen Sie die in Ihrem Terminal angezeigten Schritte aus, um den Authentifizierungsprozess abzuschließen. Informationen zu anderen Anmeldeoptionen finden Sie unter Anmelden mit der Azure CLI.
Installieren Sie die Azure CLI-Erweiterung beim ersten Einsatz, wenn Sie dazu aufgefordert werden. Weitere Informationen zu Erweiterungen finden Sie unter Verwenden von Erweiterungen mit der Azure CLI.
Führen Sie az version aus, um die installierte Version und die abhängigen Bibliotheken zu ermitteln. Führen Sie az upgrade aus, um das Upgrade auf die aktuelle Version durchzuführen.
Festlegen von Variablen und Berechtigungen
Für diese Aufgabe verwenden Sie einige Informationen mehrmals. Erstellen Sie Variablen zum Speichern dieser Informationen.
# set your environment variables here!!!!
# destination image resource group
imageResourceGroup=aibImageRG01
# location (see possible locations in main docs)
location=WestUS2
# your subscription
# get the current subID : 'az account show | grep id'
subscriptionID=$(az account show --query id --output tsv)
# name of the image to be created
imageName=aibCustomLinuxImg01
# image distribution metadata reference name
runOutputName=aibCustLinManImg01ro
# VNET properties (update to match your existing VNET, or leave as-is for demo)
# VNET name
vnetName=myexistingvnet01
# subnet name
subnetName=subnet01
# VNET resource group name
# NOTE! The VNET must always be in the same region as the Azure Image Builder service region.
vnetRgName=existingVnetRG
# Existing Subnet NSG Name or the demo will create it
nsgName=aibdemoNsg
Erstellen Sie die Ressourcengruppe.
az group create -n $imageResourceGroup -l $location
Konfigurieren der Netzwerkeinstellungen
Wenn Sie noch nicht über ein virtuelles Netzwerk, ein Subnetz oder eine Netzwerksicherheitsgruppe (NSG) verfügen, verwenden Sie das folgende Skript, um diese Elemente zu erstellen.
# Create a resource group
az group create -n $vnetRgName -l $location
# Create VNET
az network vnet create \
--resource-group $vnetRgName \
--name $vnetName --address-prefix 10.0.0.0/16 \
--subnet-name $subnetName --subnet-prefix 10.0.0.0/24
# Create base NSG to simulate an existing NSG
az network nsg create -g $vnetRgName -n $nsgName
az network vnet subnet update \
--resource-group $vnetRgName \
--vnet-name $vnetName \
--name $subnetName \
--network-security-group $nsgName
# NOTE! The virtual network must always be in the same region as the Azure Image Builder service region.
Hinzufügen einer NSG-Regel
Diese Regel ermöglicht Konnektivität zwischen dem VM Image Builder-Lastenausgleich und der Proxy-VM. Port 60001 wird für Linux-Betriebssysteme verwendet, Port 60000 für Windows-Betriebssysteme. Die Proxy-VM stellt eine Verbindung mit der Build-VM über Port 22 für Linux-Betriebssysteme oder Port 5986 für Windows-Betriebssysteme her.
az network nsg rule create \
--resource-group $vnetRgName \
--nsg-name $nsgName \
-n AzureImageBuilderNsgRule \
--priority 400 \
--source-address-prefixes AzureLoadBalancer \
--destination-address-prefixes VirtualNetwork \
--destination-port-ranges 60000-60001 --direction inbound \
--access Allow --protocol Tcp \
--description "Allow Image Builder Private Link Access to Proxy VM"
Deaktivieren der Richtlinie für private Dienste im Subnetz
Gehen Sie dabei folgendermaßen vor:
az network vnet subnet update \
--name $subnetName \
--resource-group $vnetRgName \
--vnet-name $vnetName \
--disable-private-link-service-network-policies true
Weitere Informationen finden Sie unter Netzwerkoptionen von Azure VM Image Builder.
Ändern der Beispielvorlage und Erstellen einer Rolle
Nachdem Sie die Netzwerkfunktionen konfiguriert haben, können Sie die Beispielvorlage ändern und eine Rolle erstellen. Gehen Sie dabei folgendermaßen vor:
# download the example and configure it with your vars
curl https://raw.githubusercontent.com/azure/azvmimagebuilder/master/quickquickstarts/1a_Creating_a_Custom_Linux_Image_on_Existing_VNET/existingVNETLinux.json -o existingVNETLinux.json
curl https://raw.githubusercontent.com/azure/azvmimagebuilder/master/solutions/12_Creating_AIB_Security_Roles/aibRoleNetworking.json -o aibRoleNetworking.json
curl https://raw.githubusercontent.com/azure/azvmimagebuilder/master/solutions/12_Creating_AIB_Security_Roles/aibRoleImageCreation.json -o aibRoleImageCreation.json
sed -i -e "s/<subscriptionID>/$subscriptionID/g" existingVNETLinux.json
sed -i -e "s/<rgName>/$imageResourceGroup/g" existingVNETLinux.json
sed -i -e "s/<region>/$location/g" existingVNETLinux.json
sed -i -e "s/<imageName>/$imageName/g" existingVNETLinux.json
sed -i -e "s/<runOutputName>/$runOutputName/g" existingVNETLinux.json
sed -i -e "s/<vnetName>/$vnetName/g" existingVNETLinux.json
sed -i -e "s/<subnetName>/$subnetName/g" existingVNETLinux.json
sed -i -e "s/<vnetRgName>/$vnetRgName/g" existingVNETLinux.json
sed -i -e "s/<subscriptionID>/$subscriptionID/g" aibRoleImageCreation.json
sed -i -e "s/<rgName>/$imageResourceGroup/g" aibRoleImageCreation.json
sed -i -e "s/<subscriptionID>/$subscriptionID/g" aibRoleNetworking.json
sed -i -e "s/<vnetRgName>/$vnetRgName/g" aibRoleNetworking.json
Festlegen von Berechtigungen für die Ressourcengruppe
Azure VM Image Builder verwendet die angegebene Benutzeridentität, um das Image in Azure Compute Gallery einzufügen. In diesem Beispiel erstellen Sie eine Azure-Rollendefinition, die das Image an den Katalog verteilen kann. Die Rollendefinition wird dann der Benutzeridentität zugewiesen.
# create user assigned identity for image builder
identityName=aibBuiUserId$(date +'%s')
az identity create -g $imageResourceGroup -n $identityName
# get identity id
imgBuilderCliId=$(az identity show -g $imageResourceGroup -n $identityName --query clientId -o tsv)
# get the user identity URI, needed for the template
imgBuilderId=/subscriptions/$subscriptionID/resourcegroups/$imageResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/$identityName
# update the template
sed -i -e "s%<imgBuilderId>%$imgBuilderId%g" existingVNETLinux.json
# make role name unique, to avoid clashes in the same Azure Active Directory domain
imageRoleDefName="Azure Image Builder Image Def"$(date +'%s')
netRoleDefName="Azure Image Builder Network Def"$(date +'%s')
# update the definitions
sed -i -e "s/Azure Image Builder Service Image Creation Role/$imageRoleDefName/g" aibRoleImageCreation.json
sed -i -e "s/Azure Image Builder Service Networking Role/$netRoleDefName/g" aibRoleNetworking.json
Anstatt Azure VM Image Builder eine geringere Granularität und höhere Berechtigungen zu gewähren, können Sie zwei Rollen erstellen. Mit der einen Rolle erhält Image Builder die Berechtigung, ein Image zu erstellen, die andere gestattet Image Builder, die Build-VM und den Lastenausgleich mit Ihrem virtuellen Netzwerk zu verbinden.
# create role definitions
az role definition create --role-definition ./aibRoleImageCreation.json
az role definition create --role-definition ./aibRoleNetworking.json
# grant role definition to the user assigned identity
az role assignment create \
--assignee $imgBuilderCliId \
--role "$imageRoleDefName" \
--scope /subscriptions/$subscriptionID/resourceGroups/$imageResourceGroup
az role assignment create \
--assignee $imgBuilderCliId \
--role "$netRoleDefName" \
--scope /subscriptions/$subscriptionID/resourceGroups/$vnetRgName
Weitere Informationen finden Sie unter Konfigurieren der Azure VM Image Builder-Berechtigungen mithilfe der Azure CLI oder Konfigurieren der Azure VM Image Builder-Berechtigungen mithilfe der PowerShell.
Erstellen des Images
Senden Sie die Imagekonfiguration an VM Image Builder.
az resource create \
--resource-group $imageResourceGroup \
--properties @existingVNETLinux.json \
--is-full-object \
--resource-type Microsoft.VirtualMachineImages/imageTemplates \
-n existingVNETLinuxTemplate01
# Wait approximately 1-3 mins (validation, permissions etc.)
Starten Sie den Imagebuild.
az resource invoke-action \
--resource-group $imageResourceGroup \
--resource-type Microsoft.VirtualMachineImages/imageTemplates \
-n existingVNETLinuxTemplate01 \
--action Run
# Wait approximately 15 mins
Es kann eine Weile dauern, bis das Image erstellt und in beide Regionen repliziert wurde. Warten Sie den Abschluss des Vorgangs ab, bevor Sie eine VM erstellen.
Erstellen einer VM
Erstellen Sie eine VM aus der Imageversion, die von VM Image Builder erstellt wurde.
az vm create \
--resource-group $imageResourceGroup \
--name aibImgVm0001 \
--admin-username aibuser \
--image $imageName \
--location $location \
--generate-ssh-keys
Verwenden Sie Secure Shell (SSH), um sich bei der VM anzumelden.
ssh aibuser@<publicIpAddress>
Sie sollten sehen, dass das Image angepasst wurde. Es wird eine Nachricht des Tages ausgegeben, sobald die SSH-Verbindung hergestellt wurde.
*******************************************************
** This VM was built from the: **
** !! AZURE VM IMAGE BUILDER Custom Image !! **
** You have just been Customized :-) **
*******************************************************
Bereinigen von Ressourcen
Wenn Sie die Imageversion erneut anpassen möchten, um eine neue Version zu erstellen, überspringen Sie die nächsten Schritte, und erstellen Sie mit Azure VM Image Builder eine weitere Imageversion.
Im folgenden Schritt werden das erstellte Image und dessen Ressourcendateien gelöscht. Achten Sie darauf, dass Sie mit dieser Bereitstellung fertig sind, bevor Sie die Ressourcen löschen.
Beim Löschen von Katalogressourcen müssen Sie alle Imageversionen löschen, bevor Sie die Imagedefinition löschen können, mit der sie erstellt wurden. Sie müssen zunächst alle Imagedefinitionen im Katalog löschen, um den Katalog löschen zu können.
Löschen Sie die VM Image Builder-Vorlage.
az resource delete \
--resource-group $imageResourceGroup \
--resource-type Microsoft.VirtualMachineImages/imageTemplates \
-n existingVNETLinuxTemplate01
Löschen Sie Berechtigungszuordnungen, Rollen und Identitäten.
az role assignment delete \
--assignee $imgBuilderCliId \
--role $imageRoleDefName \
--scope /subscriptions/$subscriptionID/resourceGroups/$imageResourceGroup
az role assignment delete \
--assignee $imgBuilderCliId \
--role $netRoleDefName \
--scope /subscriptions/$subscriptionID/resourceGroups/$vnetRgName
az role definition delete --name "$imageRoleDefName"
az role definition delete --name "$netRoleDefName"
az identity delete --ids $imgBuilderId
Löschen Sie die Ressourcengruppe.
az group delete -n $imageResourceGroup
Wenn Sie für diese Schnellstartanleitung ein virtuelles Netzwerk erstellt haben, können Sie es löschen, wenn es nicht mehr verwendet wird.