Infrastruktur per Azure Resource Manager definieren, Teil 2 Welche Möglichkeiten bieten Azure-ARM Templates?

Die Grundlagen von ARM-Templatesfinden sich im ersten Teil des Zweiteilers: „IaC-Automatisierung mit Azure-ARM-Templates“ (siehe: Link). Um einen noch höheren Grad der Automatisierung zu erreichen, zeigt dieser Artikel, was sonst noch mit Azure-ARM-Templates anzustellen ist.

Anbieter zum Thema

Ein Ubuntu mit grafischer Oberfläche und Azure-Tools, bereitgestellt mit einem Mausklick in Azure.
Ein Ubuntu mit grafischer Oberfläche und Azure-Tools, bereitgestellt mit einem Mausklick in Azure.
(Bild: Drilling / Microsoft / Canonical)

Ergänzend zum sei zunächst darauf hingewiesen, dass Microsoft mit den Azure Quickstarts ein umfangreiches GitHub-Repository mit ARM-Vorlagen öffentlich zu Verfügung stellt, das derzeit rund 1.000 Vorlagen für IaaS- und PaaS-Bereitstellungen in Azure bereithält.

Das Azure-Quickstart-Repository.
Das Azure-Quickstart-Repository.
(Bild: Drilling / Microsoft)

Diese Templates lassen sich gut als Quelle und Inspiration für eigenen Entwicklungen nutzen oder mehr oder unverändert direkt in Azure bereitstellen. Da ein Großteil der Vorlagen aber nicht von Microsoft selbst stammt und das Repository zudem öffentlich zugänglich ist, sollte jedes Template vor der Bereitstellung in einem produktiven Konto grundlegend überprüft werden.

Ein einfaches Beispiel bietet eine Einzel-Linux-VM mit Ubuntu und grafischer Oberfläche. Hier findet sich zum Beispiel „Ubuntu Gnome Desktop, VS Code, Azure CLI and RDP Support“ von Lee Scott. Folgt man dem Link, werden zunächst alle im Template definierten Parameter angezeigt. Oberhalb davon gibt es zwei Schaltflächen.

Die Bereitstellung einer VM auf Basis eines Quickstart-Templates im Azure Portal.
Die Bereitstellung einer VM auf Basis eines Quickstart-Templates im Azure Portal.
(Bild: Drilling / Microsoft)

Mit „Deploy to Azure“ lässt sich das Template direkt in Azure-Portal bereitstellen. Mit „Auf Github suchen“ können die Deployment-Templates direkt auf Github angezeigt oder für eine Offline-Modifikation und Bereitstellung heruntergeladen werden.

Die Erläuterung beginnt mit dem Bereitstellen in Azure. Nach dem Klick auf die gleichnamige Schaltfläche landen Admins im Dialog für eine „vorlagenbasierte Bereitstellung“ im Azure-Portal und müssen nur noch die verbleibenden Parameter ausfüllen.

Eine Template-Bereitstellung im Azure-Portal.
Eine Template-Bereitstellung im Azure-Portal.
(Bild: Drilling / Microsoft)

Optional hat man auch hier – wie schon im Teil 1 erläutert – noch einmal die Möglichkeit, entweder die Vorlage zu bearbeiten (Link „Vorlage bearbeiten“) oder das Parameter-File („Parameter bearbeiten“). Mit einem Klick auf „Überprüfen und erstellen“ ist die VM nach wenigen Minuten einsatzbereit und man kann sich mit einem beliebigen RDP-Client mit der Linux-VM verbinden, zum Beispiel mstsc.

Man beachte im Deployment den vorletzten Parameter „_artifacts Location“ mit dem Wert „[deployment().properties.templateLink.uri]“. Hierbei handelt es sich um den Basis-URI, in dem sich die von dieser Vorlage benötigten Artefakte befinden. Wenn die Vorlage mithilfe der begleitenden Skripts bereitgestellt wird, wird ein privater Speicherort im Abonnement verwendet und dieser Wert automatisch generiert.

Ein Ubuntu mit grafischer Oberfläche und Azure-Tools, bereitgestellt mit einem Mausklick in Azure.
Ein Ubuntu mit grafischer Oberfläche und Azure-Tools, bereitgestellt mit einem Mausklick in Azure.
(Bild: Drilling / Microsoft / Canonical)

Alternativ ließe sich die VM auch von der Quickstart-Seite aus auch direkt in „Powershel“l oder „Azure CLI“ bereitstellen können, wahlweise aus der „Cloud Shell“ oder von einem lokalen Rechner aus. Die entsprechenden Kommandos finden sich auf der Quickstart-Seite direkt unterhalb der Parameterliste.

Powershell:

New-AzResourceGroupDeployment -ResourceGroupName <resource-group-name> -TemplateUri https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/demos/ubuntu-desktop-gnome-rdp/azuredeploy.json

Azure-CLI:

az group deployment create --resource-group <my-resource-group> --template-uri https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/demos/ubuntu-desktop-gnome-rdp/azuredeploy.json

Die gleiche Vorlage aus GitHub.
Die gleiche Vorlage aus GitHub.
(Bild: Drilling / Microsoft)

Interaktiv abgefragt werden dann nur die diejenigen Parameter, die „mandatory“ sind, nicht jene, die schon im Template über einen Default-Wert verfügen. Man kann aber optional auch erst einmal dem Link zur Github-Seite folgen. Dort lassen sich die betreffenden JSON-Template- und JSON-Parameter-Files auch direkt, anzeigen, bearbeiten oder herunterladen. Außerdem ist es auch von hier aus möglich, das Deployment grafisch im Azuze-Portal durchzuführen.

Das Visualisieren eines Deployments in GitHub.
Das Visualisieren eines Deployments in GitHub.
(Bild: Drilling / Microsoft)

Von hier aus lässt sich außerdem das Deployment mit einem Klick auf „Visualize“ visualisieren. Lädt man sich die JSON-Files von hier herunter, kann man es ggf. modifizieren und wie in Teil 1 beschrieben von eigenem Arbeitsplatz aus als Group-Deployment in PowerShell oder Azure-CLI bereitstellen.

Jetzt Newsletter abonnieren

Täglich die wichtigsten Infos zu RZ- und Server-Technik

Mit Klick auf „Newsletter abonnieren“ erkläre ich mich mit der Verarbeitung und Nutzung meiner Daten gemäß Einwilligungserklärung (bitte aufklappen für Details) einverstanden und akzeptiere die Nutzungsbedingungen. Weitere Informationen finde ich in unserer Datenschutzerklärung.

Aufklappen für Details zu Ihrer Einwilligung

Powershell:

New-AzResourceGroupDeployment `
  -locaton <location>
  -ResourceGroupName <Resource-Group>
  -TemplateFile <Pfad zum Template-File>
  -TemplateParameterFile <Pfad zum Parameter-File>

Azure-CLI:

az group deployment create -g <Resource-Group> --template-file azuredeploy.json \
  --parameters "{ \"location\": { \"value\": \"<location>\" } }"

Deployment skripten

Der Vorteil der Kommandozeile – egal ob PowerShell oder Azure CLI – besteht darin, dass sich Deployments auch hervorragend skripten lassen. Generell ist es egal, ob Sie das lieber in einem „Bash“- oder Powershell-Kontext tun. Letztere zeichnet sich aber durch ihre objektorientierten Eigenschaften aus.

In der Powershell kann man mit den entsprechenden Powershell-Modulen im Übigen nicht nur den Azure Resource Manager abfragen kann, sondern beispielsweise auch das „Azure AD“ oder „Azure Resource Graph“ oder „Log Analytics“, welche beide die „Kusto Query Langue“ verwenden (KQL).

Nun aber zum programmgesteuerten Erzeugen von Ressourcen: Es sollen fünf neue VMs mit fünf unterschiedlichen Namen auf Basis der gleichen Konfiguration erzeugt werden: Dann muss man nicht fünf Mal das gleiche Skript modifizieren und fünf Mal hintereinander ausführen. Vielmehr gibt man einfach die Namen der entsprechenden Parameter als Liste mit in die Schleife zur Erzeugung der VMs mit.

Das könnte abschließend so aussehen:

#Resource Group
$locationName = "westeurope"
$ResourceGroupName = "AZ-RG-DEMO"
#Virtual Network
$networkName = "AZ-VNET"
$nicName = "NIC-"
$vnet = Get-AzVirtualNetwork
        -Name $NetworkName `
        -ResourceGroupName $ResourceGroupName
#Virtual Machines
$computerNames = @("VM01","VM02",”VM03","VM04","VM05")
$vmSize = "Standard_B2s"
$publisherName = "MicrosoftWindowsServer"
$offer = "WindowsServer"
$skus = "2019-Datacenter"
$credential = Get-Credential

Und dann die eigentliche Deployment-Schleife:

for($i = 0; $i -le $ComputerName.count -1; $i++) {
  $NIC = New-AzNetworkInterface
         -Name ($NICName+$ComputerName[$i]) `
         -ResourceGroupName $ResourceGroupName `
         -Location $LocationName `
         -SubnetId $Vnet.Subnets[0].Id
  $VirtualMachine = New-AzVMConfig
                    -VMName $ComputerName[$i] `
                    -VMSize $VMSize
  $VirtualMachine = Set-AzVMOperatingSystem
                    -VM $VirtualMachine `
                    -Windows `
                    -ComputerName $ComputerName[$i] `
                    -Credential $Credential `
                    -ProvisionVMAgent `
                    -EnableAutoUpdate
  $VirtualMachine = Add-AzVMNetworkInterface
                    -VM $VirtualMachine `
                    -Id $NIC.Id
  $VirtualMachine = Set-AzVMSourceImage
                    -VM $VirtualMachine `
                    -PublisherName $publisherName `
                    -Offer $offer `
                    -Skus $skus `
                    -Version latest
  New-AzVM -ResourceGroupName $ResourceGroupName `
           -Location $LocationName `
           -VM $VirtualMachine `
           -Verbose
}

Artikelfiles und Artikellinks

(ID:47937237)