Tutorial: Crea un record collegato al Traffic Manager usando Azure PowerShell

In questo tutorial, crei un record collegato di Traffic Manager in DNS di Azure usando Azure PowerShell. Un Record Collegato di Traffic Manager collega direttamente un record DNS a un profilo Gestione traffico di Azure, restituendo indirizzi IP ai client senza una risoluzione CNAME intermedia.

Important

I Record collegati di Gestione traffico sono attualmente in ANTEPRIMA. Vedi le Condizioni supplementari d'uso per le anteprime di Microsoft Azure per conoscere le condizioni legali applicabili alle funzionalità di Azure che sono in beta, in anteprima o non ancora rilasciate nella disponibilità generale.

Per una guida basata su portale, vedi Crea un Record Collegato del Traffic Manager usando il portale Azure. Per una panoramica concettuale, vedi Traffic Manager Linked Records Overview.

In questa esercitazione apprenderai a:

  • Crea l'infrastruttura di rete e delle macchine virtuali.
  • Crea un profilo Traffic Manager con endpoint.
  • Crea un record collegato al Traffic Manager usando Azure PowerShell.
  • Provare il record collegato di Gestione traffico.

Se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.

Prerequisiti

  • Un account Azure con una sottoscrizione attiva.
  • Azure PowerShell versione 12.0.0 o successiva installata localmente, oppure usa Azure Cloud Shell. Esegui Get-Module -ListAvailable Az per verificare la versione. Per eseguire l'installazione o l'aggiornamento, vedere Installare Azure PowerShell.
  • Nome di dominio ospitato in DNS di Azure. Se non hai una zona DNS di Azure, creala e delega il tuo dominio ad DNS di Azure.

Note

In questa esercitazione viene usato contoso.com come nome di dominio di esempio. Sostituire contoso.com con il proprio nome di dominio.

Note

È consigliabile usare il modulo Azure Az PowerShell per interagire con Azure. Per iniziare, vedere Installare Azure PowerShell. Per informazioni su come eseguire la migrazione al modulo Az PowerShell, vedere Eseguire la migrazione di Azure PowerShell da AzureRM ad Az.

Azure Cloud Shell

Azure ospita Azure Cloud Shell, un ambiente shell interattivo che è possibile usare tramite il browser. È possibile usare Bash o PowerShell con Cloud Shell per usare i servizi di Azure. È possibile usare i comandi preinstallati di Cloud Shell per eseguire il codice contenuto in questo articolo senza dover installare strumenti nell'ambiente locale.

Per avviare Azure Cloud Shell:

Option Esempio/collegamento
Selezionare Prova nell'angolo superiore destro di un codice o di un blocco di comandi. Quando si seleziona Prova, il codice o il comando non viene copiato automaticamente in Cloud Shell. Schermata che mostra un esempio di utilizzo di Try It per Azure Cloud Shell.
Passare a https://shell.azure.com o selezionare il pulsante Avvia Cloud Shell per aprire Cloud Shell nel browser. Pulsante per avviare Azure Cloud Shell.
Selezionare il pulsante Cloud Shell nella barra dei menu in alto a destra nel portale di Azure. Screenshot che mostra il pulsante Cloud Shell nel portale di Azure

Per usare Azure Cloud Shell:

  1. Avviare Cloud Shell.

  2. Selezionare il pulsante Copia in un blocco di codice (o blocco di comandi) per copiare il codice o il comando.

  3. Incollare il codice o il comando nella sessione di Cloud Shell selezionando Ctrl+Shift+V in Windows e Linux oppure selezionando Cmd+Shift+V in macOS.

  4. Premere INVIO per eseguire il codice o il comando.

Impostare variabili

Definisci variabili per i nomi delle risorse e le posizioni utilizzate in questo tutorial.

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

Note

Sostituisci <dns-zone-resource-group> con il gruppo di risorse che contiene la tua attuale zona DNS di Azure.

Creare il gruppo di risorse

New-AzResourceGroup -Name $ResourceGroup -Location $Location

Creare la rete virtuale

$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

Creare macchine virtuali server Web

Crea gli indirizzi IP pubblici

$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

Creare il gruppo di sicurezza di rete

$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

Creare le interfacce di rete e le macchine virtuali

$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

Crea le configurazioni delle macchine virtuali e distribuisci le VM. Quando richiesto, inserisci una password per l'account amministratore.

$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

Installa NGINX sulle macchine virtuali

$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

Recupera gli indirizzi IP pubblici

$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"

Crea il profilo del Traffic Manager

$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

Aggiungi endpoint al profilo di Traffic Manager

$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

Crea il record associato di Traffic Manager

Usa New-AzDnsRecordSet con il -TrafficManagementProfile parametro per creare il Record Collegato del Traffic Manager. Il seguente comando crea un record A all'apice della zona (@).

Note

Il parametro -TrafficManagementProfile è disponibile in Az.Dns 5.0.0 e successivi e richiede l'API di anteprima dei Record Collegati del Traffic Manager (2024-06-01-preview o successiva).

$TmProfileId = $TmProfile.Id

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

Per creare il record per un sottodominio invece dell'apice della zona, sostituisci "@" con il nome del sottodominio. Per esempio:

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

Verifica il record collegato

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

L'output contiene una proprietà TrafficManagementProfile che mostra l'ID della risorsa del profilo Traffic Manager, confermando che il collegamento è stato stabilito.

Note

Il valore TTL nel record riflette il profilo TTL del Traffic Manager. Qualsiasi TTL specificato durante la creazione del record viene sostituito dal valore DNS TTL del profilo Traffic Manager.

Testa il record collegato al Traffic Manager

Recupera i server di nomi della tua zona DNS e consulta direttamente uno di essi.

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

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

La risposta contiene record A con indirizzi IP, confermando che i Record Collegati del Traffic Manager restituiscono direttamente gli indirizzi IP senza un salto CNAME.

Failover di test

  1. Naviga nel tuo dominio. Dovresti vedere la pagina NGINX per VM-1.

  2. Ferma la VM-1 VM:

    Stop-AzVM -ResourceGroupName $ResourceGroup -Name "vm-1" -Force
    
  3. Aspetta qualche minuto che Traffic Manager rilevi l'endpoint come non sano.

  4. Scarica la cache DNS locale se necessario, poi naviga di nuovo sul tuo dominio. Dovrebbe essere visualizzata la pagina vm-2.

  5. Riavvia VM-1 per ripristinare la configurazione originale:

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

Pulire le risorse

Quando non hai più bisogno delle risorse, rimuovi il gruppo di risorse e il record DNS:

# 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

Passaggi successivi

In questo tutorial, hai creato un Record Collegato al Traffic Manager usando Azure PowerShell. Il record collega la tua zona DNS a un profilo Traffic Manager, restituendo gli indirizzi IP direttamente ai client.