Schnellstart: Erstellen eines virtuellen Linux-Servers mithilfe von PowerShell im Azure Stack Hub
Sie können einen virtuellen Ubuntu Server 20.04 LTS-Computer (VM) mithilfe von Azure Stack Hub PowerShell erstellen. In diesem Artikel erstellen und verwenden Sie einen virtuellen Computer. In diesem Artikel erhalten Sie außerdem Informationen zu den folgenden Schritten:
- Herstellen der Verbindung mit dem virtuellen Computer über einen Remoteclient
- Installieren eines NGINX-Webservers und Anzeigen der Standardstartseite
- Bereinigen nicht mehr benötigter Ressourcen
Voraussetzungen
Ein Linux-Image im Azure Stack Hub-Marketplace Im Azure Stack Hub-Marketplace ist nicht standardmäßig ein Linux-Image enthalten. Lassen Sie den Azure Stack Hub-Operator das ubuntu Server 20.04 LTS-Image bereitstellen, das Sie benötigen. Hierzu kann der Betreiber die Anweisungen unter Herunterladen von Marketplace-Elementen in Azure Stack Hub befolgen.
Azure Stack Hub erfordert für die Ressourcenerstellung und -verwaltung eine spezifische Version der Azure CLI.
- Wenn Sie PowerShell nicht für Azure Stack Hub konfiguriert haben, lesen Sie die Informationen unter Installieren von PowerShell für Azure Stack Hub.
- Nach der Einrichtung von Azure Stack Hub PowerShell stellen Sie eine Verbindung mit Ihrer Azure Stack Hub-Umgebung her. Anweisungen dazu finden Sie unter Herstellen einer Verbindung mit Azure Stack Hub über PowerShell als Benutzer.
Ein öffentlicher SSH-Schlüssel (Secure Shell) mit dem Namen id_rsa.pub im SSH-Verzeichnis (.ssh) Ihres Windows-Benutzerprofils. Ausführliche Informationen zum Erstellen von SSH-Schlüsseln finden Sie unter Verwenden eines SSH-Schlüsselpaars mit Azure Stack Hub.
Erstellen einer Ressourcengruppe
Eine Ressourcengruppe ist ein logischer Container, in dem Sie Azure Stack Hub-Ressourcen bereitstellen und verwalten können. Führen Sie zum Erstellen einer Ressourcengruppe den folgenden Codeblock aus:
Hinweis
Allen Variablen in den folgenden Codebeispielen wurden Werte zugewiesen. Sie können jedoch Ihre eigenen Werte zuweisen.
# Create variables to store the location and resource group names.
$location = "local"
$ResourceGroupName = "myResourceGroup"
New-AzResourceGroup `
-Name $ResourceGroupName `
-Location $location
Erstellen von Speicherressourcen
Erstellen Sie ein Speicherkonto, das zum Speichern der Startdiagnoseausgabe verwendet wird.
# Create variables to store the storage account name and the storage account SKU information
$StorageAccountName = "mystorageaccount"
$SkuName = "Standard_LRS"
# Create a new storage account
$StorageAccount = New-AzStorageAccount `
-Location $location `
-ResourceGroupName $ResourceGroupName `
-Type $SkuName `
-Name $StorageAccountName
Set-AzCurrentStorageAccount `
-StorageAccountName $storageAccountName `
-ResourceGroupName $resourceGroupName
Erstellen von Netzwerkressourcen
Erstellen Sie ein virtuelles Netzwerk, ein Subnetz und eine öffentliche IP-Adresse. Diese Ressourcen dienen dazu, Netzwerkkonnektivität für die VM bereitzustellen.
# Create a subnet configuration
$subnetConfig = New-AzVirtualNetworkSubnetConfig `
-Name mySubnet `
-AddressPrefix 192.168.1.0/24
# Create a virtual network
$vnet = New-AzVirtualNetwork `
-ResourceGroupName $ResourceGroupName `
-Location $location `
-Name MyVnet `
-AddressPrefix 192.168.0.0/16 `
-Subnet $subnetConfig
# Create a public IP address and specify a DNS name
$pip = New-AzPublicIpAddress `
-ResourceGroupName $ResourceGroupName `
-Location $location `
-AllocationMethod Static `
-IdleTimeoutInMinutes 4 `
-Name "mypublicdns$(Get-Random)"
Erstellen Sie eine Netzwerksicherheitsgruppe und eine Netzwerksicherheitsgruppen-Regel.
Die Netzwerksicherheitsgruppe schützt die VM mithilfe von Eingangs- und Ausgangsregeln für Datenverkehr. Erstellen Sie eine Eingangsregel für Port 3389, um eingehende Remotedesktopverbindungen zuzulassen, und eine Eingangsregel für Port 80, um eingehenden Webdatenverkehr zuzulassen.
# Create variables to store the network security group and rules names.
$nsgName = "myNetworkSecurityGroup"
$nsgRuleSSHName = "myNetworkSecurityGroupRuleSSH"
$nsgRuleWebName = "myNetworkSecurityGroupRuleWeb"
# Create an inbound network security group rule for port 22
$nsgRuleSSH = New-AzNetworkSecurityRuleConfig -Name $nsgRuleSSHName -Protocol Tcp `
-Direction Inbound -Priority 1000 -SourceAddressPrefix * -SourcePortRange * -DestinationAddressPrefix * `
-DestinationPortRange 22 -Access Allow
# Create an inbound network security group rule for port 80
$nsgRuleWeb = New-AzNetworkSecurityRuleConfig -Name $nsgRuleWebName -Protocol Tcp `
-Direction Inbound -Priority 1001 -SourceAddressPrefix * -SourcePortRange * -DestinationAddressPrefix * `
-DestinationPortRange 80 -Access Allow
# Create a network security group
$nsg = New-AzNetworkSecurityGroup -ResourceGroupName $ResourceGroupName -Location $location `
-Name $nsgName -SecurityRules $nsgRuleSSH,$nsgRuleWeb
Erstellen einer Netzwerkkarte für die VM
Mit der Netzwerkkarte wird die VM mit einem Subnetz, einer Netzwerksicherheitsgruppe und einer öffentlichen IP-Adresse verbunden.
# Create a virtual network card and associate it with public IP address and NSG
$nic = New-AzNetworkInterface `
-Name myNic `
-ResourceGroupName $ResourceGroupName `
-Location $location `
-SubnetId $vnet.Subnets[0].Id `
-PublicIpAddressId $pip.Id `
-NetworkSecurityGroupId $nsg.Id
Erstellen eines virtuellen Computers (VM)
Erstellen Sie eine Konfiguration für den virtuellen Computer. Diese Konfiguration beinhaltet die Einstellungen, die beim Bereitstellen des virtuellen Computers verwendet werden sollen (etwa Benutzeranmeldeinformationen, Größe und VM-Image).
# Define a credential object
$UserName='demouser'
$securePassword = ConvertTo-SecureString ' ' -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential ($UserName, $securePassword)
# Create the VM configuration object
$VmName = "VirtualMachinelatest"
$VmSize = "Standard_D1"
$VirtualMachine = New-AzVMConfig `
-VMName $VmName `
-VMSize $VmSize
$VirtualMachine = Set-AzVMOperatingSystem `
-VM $VirtualMachine `
-Linux `
-ComputerName "MainComputer" `
-Credential $cred
$VirtualMachine = Set-AzVMSourceImage `
-VM $VirtualMachine `
-PublisherName "Canonical" `
-Offer "UbuntuServer" `
-Skus "20.04-LTS" `
-Version "latest"
# Set the operating system disk properties on a VM
$VirtualMachine = Set-AzVMOSDisk `
-VM $VirtualMachine `
-CreateOption FromImage | `
Set-AzVMBootDiagnostic -ResourceGroupName $ResourceGroupName `
-StorageAccountName $StorageAccountName -Enable |`
Add-AzVMNetworkInterface -Id $nic.Id
# Configure SSH keys
$sshPublicKey = Get-Content "$env:USERPROFILE\.ssh\id_rsa.pub"
# Add the SSH key to the VM
Add-AzVMSshPublicKey -VM $VirtualMachine `
-KeyData $sshPublicKey `
-Path "/home/$UserName/.ssh/authorized_keys"
# Create the VM
New-AzVM `
-ResourceGroupName $ResourceGroupName `
-Location $location `
-VM $VirtualMachine
VM-Schnellerstellung: Vollständiges Skript
Hinweis
Das Skript besteht im Wesentlichen aus dem zusammengeführten obigen Code. Allerdings enthält es anstelle eines SSH-Schlüssels ein Kennwort für die Authentifizierung.
## Create a resource group
<#
A resource group is a logical container where you can deploy and manage Azure Stack Hub resources. From your development kit or the Azure Stack Hub integrated system, run the following code block to create a resource group. Though we've assigned values for all the variables in this article, you can use these values or assign new ones.
#>
# Edit your variables, if required
# Create variables to store the location and resource group names
$location = "local"
$ResourceGroupName = "myResourceGroup"
# Create variables to store the storage account name and the storage account SKU information
$StorageAccountName = "mystorageaccount"
$SkuName = "Standard_LRS"
# Create variables to store the network security group and rules names
$nsgName = "myNetworkSecurityGroup"
$nsgRuleSSHName = "myNetworkSecurityGroupRuleSSH"
$nsgRuleWebName = "myNetworkSecurityGroupRuleWeb"
# Create variable for VM password
$VMPassword = 'Password123!'
# End of variables - no need to edit anything past that point to deploy a single VM
# Create a resource group
New-AzResourceGroup `
-Name $ResourceGroupName `
-Location $location
## Create storage resources
# Create a storage account, and then create a storage container for the Ubuntu Server 20.04 LTS image
# Create a new storage account
$StorageAccount = New-AzStorageAccount `
-Location $location `
-ResourceGroupName $ResourceGroupName `
-Type $SkuName `
-Name $StorageAccountName
Set-AzCurrentStorageAccount `
-StorageAccountName $storageAccountName `
-ResourceGroupName $resourceGroupName
# Create a storage container to store the VM image
$containerName = 'osdisks'
$container = New-AzureStorageContainer `
-Name $containerName `
-Permission Blob
## Create networking resources
# Create a virtual network, a subnet, and a public IP address, resources that are used provide network connectivity to the VM
# Create a subnet configuration
$subnetConfig = New-AzVirtualNetworkSubnetConfig `
-Name mySubnet `
-AddressPrefix 192.168.1.0/24
# Create a virtual network
$vnet = New-AzVirtualNetwork `
-ResourceGroupName $ResourceGroupName `
-Location $location `
-Name MyVnet `
-AddressPrefix 192.168.0.0/16 `
-Subnet $subnetConfig
# Create a public IP address and specify a DNS name
$pip = New-AzPublicIpAddress `
-ResourceGroupName $ResourceGroupName `
-Location $location `
-AllocationMethod Static `
-IdleTimeoutInMinutes 4 `
-Name "mypublicdns$(Get-Random)"
### Create a network security group and a network security group rule
<#
The network security group secures the VM by using inbound and outbound rules. Create an inbound rule for port 3389 to allow incoming Remote Desktop connections and an inbound rule for port 80 to allow incoming web traffic.
#>
# Create an inbound network security group rule for port 22
$nsgRuleSSH = New-AzNetworkSecurityRuleConfig -Name $nsgRuleSSHName -Protocol Tcp `
-Direction Inbound -Priority 1000 -SourceAddressPrefix * -SourcePortRange * -DestinationAddressPrefix * `
-DestinationPortRange 22 -Access Allow
# Create an inbound network security group rule for port 80
$nsgRuleWeb = New-AzNetworkSecurityRuleConfig -Name $nsgRuleWebName -Protocol Tcp `
-Direction Inbound -Priority 1001 -SourceAddressPrefix * -SourcePortRange * -DestinationAddressPrefix * `
-DestinationPortRange 80 -Access Allow
# Create a network security group
$nsg = New-AzNetworkSecurityGroup -ResourceGroupName $ResourceGroupName -Location $location `
-Name $nsgName -SecurityRules $nsgRuleSSH,$nsgRuleWeb
### Create a network card for the VM
# The network card connects the VM to a subnet, network security group, and public IP address.
# Create a virtual network card and associate it with public IP address and NSG
$nic = New-AzNetworkInterface `
-Name myNic `
-ResourceGroupName $ResourceGroupName `
-Location $location `
-SubnetId $vnet.Subnets[0].Id `
-PublicIpAddressId $pip.Id `
-NetworkSecurityGroupId $nsg.Id
## Create a VM
<#
Create a VM configuration. This configuration includes the settings used when deploying the VM. For example: user credentials, size, and the VM image.
#>
# Define a credential object
$UserName='demouser'
$securePassword = ConvertTo-SecureString $VMPassword -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential ($UserName, $securePassword)
# Create the VM configuration object
$VmName = "VirtualMachinelatest"
$VmSize = "Standard_D1"
$VirtualMachine = New-AzVMConfig `
-VMName $VmName `
-VMSize $VmSize
$VirtualMachine = Set-AzVMOperatingSystem `
-VM $VirtualMachine `
-Linux `
-ComputerName "MainComputer" `
-Credential $cred
$VirtualMachine = Set-AzVMSourceImage `
-VM $VirtualMachine `
-PublisherName "Canonical" `
-Offer "UbuntuServer" `
-Skus "20.04-LTS" `
-Version "latest"
$osDiskName = "OsDisk"
$osDiskUri = '{0}vhds/{1}-{2}.vhd' -f `
$StorageAccount.PrimaryEndpoints.Blob.ToString(),`
$vmName.ToLower(), `
$osDiskName
# Set the operating system disk properties on a VM
$VirtualMachine = Set-AzVMOSDisk `
-VM $VirtualMachine `
-Name $osDiskName `
-VhdUri $OsDiskUri `
-CreateOption FromImage | `
Add-AzVMNetworkInterface -Id $nic.Id
# Create the VM
New-AzVM `
-ResourceGroupName $ResourceGroupName `
-Location $location `
-VM $VirtualMachine
Herstellen der Verbindung zur VM
Konfigurieren Sie nach der Bereitstellung des virtuellen Computers eine SSH-Verbindung für ihn. Verwenden Sie den Befehl Get-AzPublicIpAddress, um die öffentliche IP-Adresse des virtuellen Computers abzurufen:
Get-AzPublicIpAddress -ResourceGroupName myResourceGroup | Select IpAddress
Verwenden Sie auf einem Clientsystem mit SSH-Installation den folgenden Befehl, um die Verbindung mit der VM herzustellen. Unter Windows können Sie PuTTY zum Herstellen der Verbindung verwenden.
ssh <Public IP Address>
Melden Sie sich bei entsprechender Aufforderung als azureuser an. Wenn Sie eine Passphrase beim Erstellen der SSH-Schlüssel verwendet haben, müssen Sie die Passphrase eingeben.
Installieren des NGINX-Webservers
Führen Sie das folgende Skript aus, um Paketquellen zu aktualisieren und das neueste NGINX-Paket zu installieren:
#!/bin/bash
# update package source
apt-get -y update
# install NGINX
apt-get -y install nginx
Anzeigen der NGINX-Willkommensseite
Nachdem der NGINX-Webserver installiert und Port 80 auf dem virtuellen Computer geöffnet wurde, können Sie über die öffentliche IP-Adresse des virtuellen Computers auf den Webserver zugreifen. Öffnen Sie einen Webbrowser, und navigieren Sie zu http://<public IP address>
.
Bereinigen von Ressourcen
Sie können die nicht mehr benötigten Ressourcen mit dem Befehl Remove-AzResourceGroup bereinigen. Um die Ressourcengruppe und alle dazugehörigen Ressourcen zu löschen, führen Sie den folgenden Befehl aus:
Remove-AzResourceGroup -Name myResourceGroup
Nächste Schritte
In dieser Schnellstartanleitung haben Sie einen einfachen virtuellen Linux-Server bereitgestellt. Weitere Informationen zu virtuellen Azure Stack Hub-Computern finden Sie unter Features von Azure Stack Hub-VMs.