Tutorial: Erstellen Sie einen Traffic Manager Linked Record mit Azure PowerShell

In diesem Tutorial erstellst du einen Traffic Manager Linked Record in Azure DNS mit Azure PowerShell. Ein Traffic Manager Linked Record verbindet einen DNS-Datensatzsatz direkt mit einem Azure Traffic Manager-Profil und gibt IP-Adressen an Clients zurück, ohne eine Zwischenlösung von CNAME.

Wichtig

Traffic Manager Linked Records befindet sich derzeit in der VORSCHAU. Die zusätzlichen Nutzungsbestimmungen für Microsoft Azure-Vorschauen enthalten rechtliche Bedingungen. Sie gelten für diejenigen Azure-Features, die sich in der Beta- oder Vorschauversion befinden oder aber anderweitig noch nicht zur allgemeinen Verfügbarkeit freigegeben sind.

Für einen portalbasierten Walkthrough siehe Create a Traffic Manager Linked Record mit dem Azure-Portal. Für einen konzeptionellen Überblick siehe Traffic Manager Linked Records Übersicht.

In diesem Tutorial erfahren Sie, wie:

  • Erstellen Sie die Netzwerk- und virtuelle Maschineninfrastruktur.
  • Erstelle ein Traffic Manager-Profil mit Endpunkten.
  • Erstellen Sie einen Traffic Manager Linked Record mit Azure PowerShell.
  • Teste den vom Verkehrsmanager verknüpften Datensatz.

Wenn Sie noch kein Azure-Abonnement haben, erstellen Sie ein kostenloses Konto, bevor Sie beginnen.

Voraussetzungen

  • Ein Azure-Konto mit einem aktiven Abonnement.
  • Azure PowerShell Version 12.0.0 oder später lokal installiert oder Azure Cloud Shell verwenden. Führen Sie Get-Module -ListAvailable Az aus, um Ihre Version zu überprüfen. Informationen zum Installieren oder Upgraden finden Sie unter Installieren von Azure PowerShell.
  • Ein in Azure DNS gehosteter Domänenname. Wenn du keine Azure DNS-Zone hast, erstelle eine und delegiere deine Domain an Azure DNS.

Hinweis

In diesem Tutorial wird contoso.com als Beispieldomänenname verwendet. Ersetzen Sie contoso.com durch Ihren eigenen Domänennamen.

Hinweis

Es wird empfohlen, das Azure Az PowerShell-Modul für die Interaktion mit Azure zu verwenden. Informationen zu den ersten Schritten finden Sie unter Install Azure PowerShell. Informationen zum Migrieren zum Az PowerShell-Modul finden Sie unter Migrieren von Azure PowerShell von AzureRM zum Az-Modul.

Azure Cloud Shell

Azure hostet Azure Cloud Shell, eine interaktive Shell-Umgebung, die Sie über Ihren Browser nutzen können. Sie können entweder Bash oder PowerShell mit Cloud Shell verwenden, um mit Azure-Diensten zu arbeiten. Sie können die vorinstallierten Befehle von Cloud Shell verwenden, um den Code in diesem Artikel auszuführen, ohne etwas in Ihrer lokalen Umgebung installieren zu müssen.

So starten Sie Azure Cloud Shell:

Auswahl Beispiel/Link
Wählen Sie rechts oben in einem Code- oder Befehlsblock die Option Ausprobieren aus. Wenn Sie Try It auswählen, wird der Code oder befehl nicht automatisch in Cloud Shell kopiert. Screenshot: Beispiel von „Jetzt testen“ für Azure Cloud Shell.
Wechseln Sie zu https://shell.azure.com, oder wählen Sie die Schaltfläche "Cloud Shell starten " aus, um Cloud Shell in Ihrem Browser zu öffnen. Schaltfläche , um Azure Cloud Shell zu starten.
Wählen Sie im Azure-Portal rechts oben im Menü die Schaltfläche Cloud Shell aus. Screenshot: Schaltfläche „Cloud Shell“ im Azure-Portal

So verwenden Sie Azure Cloud Shell:

  1. Starten Sie Cloud Shell.

  2. Wählen Sie die Schaltfläche Kopieren für einen Codeblock (oder Befehlsblock) aus, um den Code oder Befehl zu kopieren.

  3. Fügen Sie den Code oder Befehl in die Cloud Shell Sitzung ein, indem Sie Ctrl+Shift+V auf Windows und Linux auswählen, oder indem Sie Cmd+Shift+V unter macOS auswählen.

  4. Wählen Sie Geben Sie ein, um den Code oder Befehl auszuführen.

Festlegen von Variablen

Definiere Variablen für Ressourcennamen und -standorte, die in diesem Tutorial verwendet werden.

$ResourceGroup = "test-rg"
$Location = "eastus"
$VNetName = "vnet-1"
$TmProfileName = "tm-profile"
$DnsZone = "contoso.com"
$DnsZoneResourceGroup = "<dns-zone-resource-group>"

Hinweis

Ersetzen Sie <dns-zone-resource-group> sie durch die Ressourcengruppe, die Ihre bestehende Azure DNS-Zone enthält.

Ressourcengruppe erstellen

New-AzResourceGroup -Name $ResourceGroup -Location $Location

Erstellen des virtuellen Netzwerks

$subnet = @{
    Name          = "subnet-1"
    AddressPrefix = "10.10.0.0/24"
}
$SubnetConfig = New-AzVirtualNetworkSubnetConfig @subnet

$vnet = @{
    ResourceGroupName = $ResourceGroup
    Name              = $VNetName
    Location          = $Location
    AddressPrefix     = "10.10.0.0/16"
    Subnet            = $SubnetConfig
}
New-AzVirtualNetwork @vnet

Erstellen eines virtuellen Webservercomputers

Erstellen Sie die öffentlichen IP-Adressen

$pip1 = @{
    ResourceGroupName = $ResourceGroup
    Name              = "public-ip-1"
    Location          = $Location
    Sku               = "Standard"
    AllocationMethod  = "Static"
    DomainNameLabel   = "vm-1-tmlink"
}
$Vm1Pip = New-AzPublicIpAddress @pip1

$pip2 = @{
    ResourceGroupName = $ResourceGroup
    Name              = "public-ip-2"
    Location          = $Location
    Sku               = "Standard"
    AllocationMethod  = "Static"
    DomainNameLabel   = "vm-2-tmlink"
}
$Vm2Pip = New-AzPublicIpAddress @pip2

Erstellen der Netzwerksicherheitsgruppe

$httpRule = @{
    Name                     = "AllowHTTP"
    Protocol                 = "Tcp"
    Direction                = "Inbound"
    Priority                 = 100
    SourceAddressPrefix      = "*"
    SourcePortRange          = "*"
    DestinationAddressPrefix = "*"
    DestinationPortRange     = 80
    Access                   = "Allow"
}
$HttpRule = New-AzNetworkSecurityRuleConfig @httpRule

$httpsRule = @{
    Name                     = "AllowHTTPS"
    Protocol                 = "Tcp"
    Direction                = "Inbound"
    Priority                 = 110
    SourceAddressPrefix      = "*"
    SourcePortRange          = "*"
    DestinationAddressPrefix = "*"
    DestinationPortRange     = 443
    Access                   = "Allow"
}
$HttpsRule = New-AzNetworkSecurityRuleConfig @httpsRule

$nsg = @{
    ResourceGroupName = $ResourceGroup
    Location          = $Location
    Name              = "nsg-1"
    SecurityRules     = $HttpRule, $HttpsRule
}
$Nsg = New-AzNetworkSecurityGroup @nsg

Erstellen Sie die Netzwerkschnittstellen und virtuellen Maschinen

$VNet = Get-AzVirtualNetwork -ResourceGroupName $ResourceGroup -Name $VNetName
$Subnet = Get-AzVirtualNetworkSubnetConfig -VirtualNetwork $VNet -Name "subnet-1"

$nic1 = @{
    ResourceGroupName      = $ResourceGroup
    Name                   = "nic-1"
    Location               = $Location
    SubnetId               = $Subnet.Id
    PublicIpAddressId      = $Vm1Pip.Id
    NetworkSecurityGroupId = $Nsg.Id
}
$Vm1Nic = New-AzNetworkInterface @nic1

$nic2 = @{
    ResourceGroupName      = $ResourceGroup
    Name                   = "nic-2"
    Location               = $Location
    SubnetId               = $Subnet.Id
    PublicIpAddressId      = $Vm2Pip.Id
    NetworkSecurityGroupId = $Nsg.Id
}
$Vm2Nic = New-AzNetworkInterface @nic2

Erstellen Sie die Konfigurationen der virtuellen Maschine und bereiten Sie die VMs aus. Wenn du aufgefordert wirst, gib ein Passwort für das Administratorkonto ein.

$Credential = Get-Credential -Message "Enter a username and password for the VMs"

$image = @{
    PublisherName = "Canonical"
    Offer         = "ubuntu-24_04-lts"
    Skus          = "server"
    Version       = "latest"
}

$Vm1Config = New-AzVMConfig -VMName "vm-1" -VMSize "Standard_B1s" |
    Set-AzVMOperatingSystem -Linux -ComputerName "vm-1" -Credential $Credential |
    Set-AzVMSourceImage @image |
    Add-AzVMNetworkInterface -Id $Vm1Nic.Id

New-AzVM -ResourceGroupName $ResourceGroup -Location $Location -VM $Vm1Config -AsJob

$Vm2Config = New-AzVMConfig -VMName "vm-2" -VMSize "Standard_B1s" |
    Set-AzVMOperatingSystem -Linux -ComputerName "vm-2" -Credential $Credential |
    Set-AzVMSourceImage @image |
    Add-AzVMNetworkInterface -Id $Vm2Nic.Id

New-AzVM -ResourceGroupName $ResourceGroup -Location $Location -VM $Vm2Config

Installiere NGINX auf den virtuellen Maschinen

$run1 = @{
    ResourceGroupName = $ResourceGroup
    VMName            = "vm-1"
    CommandId         = "RunShellScript"
    ScriptString      = "sudo apt-get update && sudo apt-get install -y nginx && echo 'Hello World from vm-1' | sudo tee /var/www/html/index.html"
}
Invoke-AzVMRunCommand @run1

$run2 = @{
    ResourceGroupName = $ResourceGroup
    VMName            = "vm-2"
    CommandId         = "RunShellScript"
    ScriptString      = "sudo apt-get update && sudo apt-get install -y nginx && echo 'Hello World from vm-2' | sudo tee /var/www/html/index.html"
}
Invoke-AzVMRunCommand @run2

Abfrage der öffentlichen IP-Adressen

$Vm1IPAddress = (Get-AzPublicIpAddress -ResourceGroupName $ResourceGroup -Name "public-ip-1").IpAddress
$Vm2IPAddress = (Get-AzPublicIpAddress -ResourceGroupName $ResourceGroup -Name "public-ip-2").IpAddress

Write-Output "vm-1 IP: $Vm1IPAddress"
Write-Output "vm-2 IP: $Vm2IPAddress"

Erstellen Sie das Traffic Manager-Profil

$tm = @{
    Name                 = $TmProfileName
    ResourceGroupName    = $ResourceGroup
    TrafficRoutingMethod = "Priority"
    RelativeDnsName      = "tm-profile-$(Get-Random)"
    Ttl                  = 30
    MonitorProtocol      = "HTTP"
    MonitorPort          = 80
    MonitorPath          = "/"
    RecordType           = "A"
}
$TmProfile = New-AzTrafficManagerProfile @tm

Fügen Sie Endpunkte zum Traffic Manager-Profil hinzu

$ep1 = @{
    EndpointName          = "tmendpoint-1"
    TrafficManagerProfile = $TmProfile
    Type                  = "ExternalEndpoints"
    Target                = $Vm1IPAddress
    EndpointStatus        = "Enabled"
    Priority              = 1
}
Add-AzTrafficManagerEndpointConfig @ep1

$ep2 = @{
    EndpointName          = "tmendpoint-2"
    TrafficManagerProfile = $TmProfile
    Type                  = "ExternalEndpoints"
    Target                = $Vm2IPAddress
    EndpointStatus        = "Enabled"
    Priority              = 2
}
Add-AzTrafficManagerEndpointConfig @ep2

Set-AzTrafficManagerProfile -TrafficManagerProfile $TmProfile

Erstellen Sie den verknüpften Datensatz des Verkehrsmanagers

Verwenden New-AzDnsRecordSet Sie mit dem Parameter, -TrafficManagementProfile um den Traffic Manager Linked Record zu erstellen. Der folgende Befehl erstellt einen A-Datensatz am Zonenapex (@).

Hinweis

Der Parameter -TrafficManagementProfile ist in Az.Dns 5.0.0 und später verfügbar und benötigt die Traffic Manager Linked Records Vorschau-API (2024-06-01-preview oder später).

$TmProfileId = $TmProfile.Id

$apex = @{
    ResourceGroupName        = $DnsZoneResourceGroup
    ZoneName                 = $DnsZone
    Name                     = "@"
    RecordType               = "A"
    Ttl                      = 30
    TrafficManagementProfile = $TmProfileId
}
New-AzDnsRecordSet @apex

Um den Datensatz für eine Subdomain statt des Zonen-Apex zu erstellen, ersetzen "@" Sie durch den Subdomain-Namen. Beispiel:

$www = @{
    ResourceGroupName        = $DnsZoneResourceGroup
    ZoneName                 = $DnsZone
    Name                     = "www"
    RecordType               = "A"
    Ttl                      = 30
    TrafficManagementProfile = $TmProfileId
}
New-AzDnsRecordSet @www

Überprüfen Sie den verknüpften Datensatz

$record = @{
    ResourceGroupName = $DnsZoneResourceGroup
    ZoneName          = $DnsZone
    Name              = "@"
    RecordType        = "A"
}
Get-AzDnsRecordSet @record

Die Ausgabe enthält eine TrafficManagementProfile Eigenschaft, die die Traffic-Manager-Profil-Resource ID zeigt und bestätigt, dass die Verbindung hergestellt wurde.

Hinweis

Der TTL-Wert im Datensatz spiegelt das Traffic Manager-Profil TTL wider. Jede TTL, die während der Datensatzerstellung angegeben wird, wird durch den DNS TTL-Wert des Traffic Manager-Profils ersetzt.

Testen Sie den verkehrsmanager-verknüpften Datensatz

Holen Sie die Nameserver für Ihre DNS-Zone ab und fragen Sie einen direkt an.

$ns = @{
    ResourceGroupName = $DnsZoneResourceGroup
    ZoneName          = $DnsZone
    Name              = "@"
    RecordType        = "NS"
}
$NameServer = (Get-AzDnsRecordSet @ns).Records[0].Nsdname

Resolve-DnsName -Name $DnsZone -Server $NameServer -Type A

Die Antwort enthält A-Datensätze mit IP-Adressen und bestätigt, dass Traffic Manager Linked Records IP-Adressen direkt ohne CNAME-Hop zurückgibt.

Test des Failovers

  1. Besuchen Sie Ihre Domain. Du solltest die NGINX-Seite für VM-1 sehen.

  2. Stoppe die VM-1 :

    Stop-AzVM -ResourceGroupName $ResourceGroup -Name "vm-1" -Force
    
  3. Warte ein paar Minuten, bis Traffic Manager den Endpunkt als ungesund erkennt.

  4. Löschen Sie bei Bedarf Ihren lokalen DNS-Cache und besuchen Sie dann erneut Ihre Domain. Du solltest jetzt die Seite für VM-2 sehen.

  5. VM-1 neu starten, um die ursprüngliche Konfiguration wiederherzustellen:

    Start-AzVM -ResourceGroupName $ResourceGroup -Name "vm-1"
    

Bereinigen von Ressourcen

Wenn Sie die Ressourcen nicht mehr benötigen, entfernen Sie die Ressourcengruppe und den DNS-Datensatz:

# Delete the resource group and all resources within it
Remove-AzResourceGroup -Name $ResourceGroup -Force -AsJob

# Delete the Traffic Manager Linked Record from the DNS zone
$cleanup = @{
    ResourceGroupName = $DnsZoneResourceGroup
    ZoneName          = $DnsZone
    Name              = "@"
    RecordType        = "A"
}
Remove-AzDnsRecordSet @cleanup

Nächste Schritte

In diesem Tutorial hast du einen Traffic Manager Linked Record mit Azure PowerShell erstellt. Der Datensatz verknüpft deine DNS-Zone mit einem Traffic Manager-Profil und gibt IP-Adressen direkt an die Clients zurück.