Grundlagen: Azure & PowerShell: VMs erstellen


Die Assistenten im Verwaltungsportal von Azure machen das Erstellen von VMs sehr einfach und nehmen die Komplexität, die dahinter steckt. Möchten wir per PowerShell eine VM erstellen, sollten wir ein paar Grundkenntnisse über Speicherkonten, Cloud-Dienste und die Konfiguration von VMs mitbringen und die Zusammenhänge verstehen.

Wer lieber Videos schaut, statt zu lesen, kann sich hierzu auch das Modul 2: VMs automatisiert erstellen im MVA-Kurs PowerShell: Azure-Automatisierung für Einsteiger ansehen.

Bevor man VMs in Azure erzeugen kann, sind einige Voraussetzungen zu schaffen.

  1. Ein Cloud-Dienst muss vorhanden sein.
  2. Ein Speicherkonto muss vorhanden sein.
  3. Im Speicherkonto muss ein Container vorhanden sein.
  4. Ein Speicherkonto muss in PowerShell als aktuelles Speicherkonto festgelegt sein.

Danach kann die Erstellung der VM beginnen.

  1. Eine VM-Konfiguration erstellen. (Vorlage, Instanzgröße, Name, Speicherort etc.)
  2. Provisionierung konfigurieren. (Benutzername, Benutzerkennwort etc.)
  3. VM erstellen!

Es folgt eine Erklärung der einzelnen Schritte. Daran anschließend ein Beispiel in PowerShell.

1. Cloud-Dienst

Cloud-Dienste (engl. Cloud Services) bilden die Container für VMs bei IaaS oder Web- und Worker-Rollen bei PaaS in Microsoft Azure.

Als Container haben Cloud-Dienste eine öffentliche IP-Adresse (virtual IP, vip) und Endpunkte, die zum Internet hin Ports öffnen, die zu internen Ports von virtuellen Maschinen weiterleiten. Das heißt, dass VMs nur über die IP-Adresse des Cloud-Dienstes erreicht werden können, sofern für die VMs keine öffentlichen IP-Adressen (public IP, PIP) konfiguriert wurden. Ein Cloud-Dienst kann maximal 25 Endpunkte und 50 VMs besitzen.

Existieren mehrere VMs in einem Cloud-Dienst, können sich diese VMs über ihre internen IP-Adressen erreichen. (Außer die VMs wurden unterschiedlichen virtuellen Netzwerken zugeordnet.)

Als erstes muss also ein Cloud-Dienst als Container erstellt werden. Dafür verwenden wir in PowerShell den Befehl New-AzureService. (Falls Sie Hilfe bei der Installation des PowerShell-Moduls für Microsoft Azure benötigen, schauen Sie in den Blog-Post Grundlagen: PowerShell für Microsoft Azure installieren.)

image

2. Speicherkonto

Als nächstes benötigen wir, ebenfalls vor der Erstellung der VM, ein Speicherkonto (engl. Storage Account), in dem die virtuellen Festplatten (virtual harddisk, vhd) gespeichert werden. Ein neues Speicherkonto wird mit dem Befehl New-AzureStorageAccount erstellt.

3. Container

Dateien in einem Speicherkonto müssen in einem Container gespeichert sein. Daher erstellen wir in unserem Speicherkonto einen Container. Dazu verwenden wir den PowerShell-Befehl New-AzureStorageContainer. Dieser Befehl benötigt als Parameter allerdings einen sogenannten Storage Context, der mit dem Befehl New-AzureStorageContext erstellt wird. New-AzureStorageContext wiederum braucht den Namen des Speicherkontos und einen Zugriffsschlüssel für das Speicherkonto. Die Zugriffsschlüssel erhält man über den Befehl Get-AzureStorageKey.

Das folgende Beispiel zeigt alle drei Befehle zusammen, um einen Container in einem Speicherkonto zu erstellen.

4. Aktuelles Speicherkonto

Der letzte PowerShell-Befehl, den wir in unserem Skript später verwenden werden, verlangt ein "aktuelles Speicherkonto". Dies ist vergleichbar mit einem aktuellen Arbeitsverzeichnis. Das aktuelle Speicherkonto wird mit dem Befehl Set-AzureSubscription festgelegt, wobei der Parameter CurrentStorageAccountName zu verwenden ist.

5. VM-Konfiguration

Damit sind nun alle Voraussetzungen erfüllt und wir können damit beginnen, die gewünschte VM zu konfigurieren. Das heißt, welche Vorlage oder Disk soll verwendet werden, wie groß soll die VM sein, wie soll sie heißen und viele weitere Dinge. An dieser Stelle kommt der PowerShell-Befehl New-AzureVMConfig zum Einsatz. Wir können diesen Befehl verwenden, um eine neue VM mithilfe einer Vorlage zu erzeugen oder eine existierende Disk zu verwenden.

6. Provisionierung

Interne Einstellungen der VM werden über den PowerShell-Befehl Add-AzureProvisioningConfig gesetzt. Welche Parameter hier verwendet werden, hängt stark davon ab, welches Betriebssystem (Windows oder Linux) eingesetzt wird und bei Windows, ob das System einer Domäne hinzugefügt wird.

Generell sind Einstellungen zum Benutzernamen und dem Kennwort des lokalen Administrators möglich, zum Ein- und Ausschalten von Ports für den Fernzugriff (WinRM, RDP oder SSH), zur Installation von Zertifikaten und anderen Details.

7. VM erstellen

Zum Schluss können wir dem Befehl New-AzureVM unsere VM erzeugen lassen. Als Parameter geben wir nun nur noch mit, in welchem Cloud-Dienst und/oder welchem virtuellen Netzwerk die VM erstellt werden soll.

Beispiel

Das folgende Beispiel fasst alle Schritte zur Erstellung einer VM an einem praktischen Beispiel zusammen.

Weitere Informationen

PowerShell: Azure-Automatisierung für Einsteiger (Microsoft Virtual Academy)

Grundlagen: PowerShell für Microsoft Azure installieren (MSDN Blogs)

Tipp: PowerShell ISE - das richtige Werkzeug ist die halbe Arbeit! (MSDN Blogs)

Skripte

Für den Fall, dass die Skripte auf GitHub Gist nicht aufrufbar sind, sind diese hier noch einmal unformatiert aufgeführt.

# Sample by Peter Kirchner (peter.kirchner@microsoft.com)

# Settings
$subscriptionName = "MSFT MVA Live" # Get-AzureSubscription
$location = "West Europe" # Get-AzureLocation
$serviceName = "pktestservice"
$storageAccountName = "pkteststorage"
$storageContainerName = "vhds"
$adminUsername = "adm_test"
$adminPassword = "Azureisttoll!"
$imageNameWS2012R2 = "a699494373c04fc0bc8f2bb1389d6106__Windows-Server-2012-R2-201410.01-en.us-127GB.vhd" # Get-AzureVMImage

# In case you have more than one Azure subscription, select one.
Set-AzureSubscription -SubscriptionName $subscriptionName

# 1st: create cloud service
New-AzureService -Location $location -ServiceName $serviceName

# 2nd: create storage account.
New-AzureStorageAccount -Location $location -StorageAccountName $storageAccountName

# 3rd: create container for VHDs.
$storageAccountKey = Get-AzureStorageKey -StorageAccountName $storageAccountName
$storageContext = New-AzureStorageContext -StorageAccountKey $storageAccountKey.Primary -StorageAccountName $storageAccountKey.StorageAccountName
New-AzureStorageContainer -Name $storageContainerName -Permission Off -Context $storageContext

# 4th: New-AzureVM needs the CurrentStorageAccountName to be set.
Set-AzureSubscription -SubscriptionName $subscriptionName -CurrentStorageAccountName $storageAccountName

# 5th: create new VM configuration.
$vmConfig = New-AzureVMConfig -ImageName $imageNameWS2012R2 -InstanceSize Small -Name $vmName  `
                -MediaLocation "https://$storageAccountName.blob.core.windows.net/$storageContainerName/$vmName.vhd"

# 6th: add provisioning data to VM configuration.
Add-AzureProvisioningConfig -Windows -AdminUsername $AdminUsername -Password $AdminPassword -VM $vmConfig

# 7th: create new VM and let it start.
New-AzureVM -ServiceName $serviceName -Location $location -VMs $vmConfig

English Summary

This blog post describes how to create an Azure VM via Windows PowerShell. In the steps to create a new VM we create via PowerShell cloud services, storage accounts, containers and finally the VM based on a Windows Server 2012 R2 image.

Comments (0)

Skip to main content