Freigeben über


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.

Nächste Schritte

Azure Compute Gallery-Instanzen