Använda Azure VM Image Builder för virtuella Linux-datorer för att få åtkomst till ett befintligt virtuellt Azure-nätverk
Gäller för: ✔️ Flexibla skalningsuppsättningar för virtuella Linux-datorer ✔️
Den här artikeln visar hur du använder Azure VM Image Builder för att skapa en grundläggande, anpassad Linux-avbildning som har åtkomst till befintliga resurser i ett virtuellt nätverk. Den virtuella build-dator (VM) som du skapar distribueras till ett nytt eller befintligt virtuellt nätverk som du anger i din prenumeration. När du använder ett befintligt virtuellt Azure-nätverk kräver vm Image Builder inte någon anslutning till det offentliga nätverket.
Förutsättningar
Använd Bash-miljön i Azure Cloud Shell. Mer information finns i Snabbstart för Bash i Azure Cloud Shell.
Om du föredrar att köra CLI-referenskommandon lokalt installerar du Azure CLI. Om du kör i Windows eller macOS kan du köra Azure CLI i en Docker-container. Mer information finns i Så här kör du Azure CLI i en Docker-container.
Om du använder en lokal installation loggar du in på Azure CLI med hjälp av kommandot az login. Slutför autentiseringsprocessen genom att följa stegen som visas i terminalen. Andra inloggningsalternativ finns i Logga in med Azure CLI.
När du uppmanas att installera Azure CLI-tillägget vid första användningen. Mer information om tillägg finns i Använda tillägg med Azure CLI.
Kör az version om du vill hitta versionen och de beroende bibliotek som är installerade. Om du vill uppgradera till den senaste versionen kör du az upgrade.
Ange variabler och behörigheter
För den här uppgiften använder du viss information upprepade gånger. Skapa några variabler för att lagra den 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
Skapa resursgruppen.
az group create -n $imageResourceGroup -l $location
Konfigurera nätverksfunktioner
Om du inte har ett befintligt virtuellt nätverk, undernät eller en nätverkssäkerhetsgrupp (NSG) använder du följande skript för att skapa ett.
# 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.
Lägga till en NSG-regel
Den här regeln tillåter anslutning från vm Image Builder-lastbalanseraren till den virtuella proxydatorn. Port 60001 är för Linux och port 60000 är för Windows. Den virtuella proxydatorn ansluter till den virtuella byggdatorn med hjälp av port 22 för Linux eller port 5986 för Windows.
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"
Inaktivera principen för privat tjänst i undernätet
Så här gör du:
az network vnet subnet update \
--name $subnetName \
--resource-group $vnetRgName \
--vnet-name $vnetName \
--disable-private-link-service-network-policies true
Mer information finns i Nätverksalternativ för Azure VM Image Builder.
Ändra exempelmallen och skapa rollen
När du har konfigurerat nätverk kan du ändra exempelmallen och skapa en roll. Så här gör du:
# 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
Ange behörigheter för resursgruppen
Vm Image Builder använder användaridentiteten som tillhandahålls för att mata in avbildningen i Azure Compute Gallery. I det här exemplet skapar du en Azure-rolldefinition som kan distribuera avbildningen till galleriet. Rolldefinitionen tilldelas sedan till användaridentiteten.
# 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
I stället för att ge VM Image Builder lägre kornighet och utökad behörighet kan du skapa två roller. Den ena rollen ger byggaren behörighet att skapa en avbildning, och den andra gör att den kan ansluta den virtuella datorn och lastbalanseraren till ditt virtuella nätverk.
# 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
Mer information finns i Konfigurera Azure VM Image Builder-behörigheter med hjälp av Azure CLI eller Konfigurera Azure VM Image Builder-behörigheter med hjälp av PowerShell.
Skapa avbildningen
Skicka avbildningskonfigurationen till 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.)
Starta avbildningsversionen.
az resource invoke-action \
--resource-group $imageResourceGroup \
--resource-type Microsoft.VirtualMachineImages/imageTemplates \
-n existingVNETLinuxTemplate01 \
--action Run
# Wait approximately 15 mins
Det kan ta en stund att skapa avbildningen och replikera den till båda regionerna. Vänta tills den här delen är klar innan du går vidare till att skapa en virtuell dator.
Skapa en virtuell dator
Skapa en virtuell dator från avbildningsversionen som skapades av VM Image Builder.
az vm create \
--resource-group $imageResourceGroup \
--name aibImgVm0001 \
--admin-username aibuser \
--image $imageName \
--location $location \
--generate-ssh-keys
Använd Secure Shell (SSH) för att komma in på den virtuella datorn.
ssh aibuser@<publicIpAddress>
Du bör se att avbildningen har anpassats med dagens meddelande så snart SSH-anslutningen har upprättats!
*******************************************************
** This VM was built from the: **
** !! AZURE VM IMAGE BUILDER Custom Image !! **
** You have just been Customized :-) **
*******************************************************
Rensa resurser
Om du vill anpassa avbildningsversionen igen för att skapa en ny version av samma avbildning hoppar du över nästa steg och går vidare till Använda Azure VM Image Builder för att skapa en annan avbildningsversion.
Följande tar bort avbildningen som skapades, tillsammans med alla andra resursfiler. Kontrollera att du är klar med den här distributionen innan du tar bort resurserna.
När du tar bort galleriresurser måste du ta bort alla avbildningsversioner innan du kan ta bort den bilddefinition som används för att skapa dem. Om du vill ta bort ett galleri måste du först ha tagit bort alla bilddefinitioner i galleriet.
Ta bort mallen för VM Image Builder:
az resource delete \
--resource-group $imageResourceGroup \
--resource-type Microsoft.VirtualMachineImages/imageTemplates \
-n existingVNETLinuxTemplate01
Ta bort behörighetstilldelningar, roller och identiteter:
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
Ta bort resursgruppen:
az group delete -n $imageResourceGroup
Om du har skapat ett virtuellt nätverk för den här snabbstarten kan du ta bort det virtuella nätverket om det inte längre används.