Creare una VM con un indirizzo IP pubblico statico mediante Azure PowerShell

È possibile creare macchine virtuali (VM) in Azure ed esporle a Internet pubblico tramite un indirizzo IP pubblico. Per impostazione predefinita, gli IP pubblici sono dinamici e l'indirizzo associato può cambiare quando viene eliminata la VM. Per garantire che la VM utilizzi sempre lo stesso indirizzo IP pubblico, è necessario creare un IP pubblico statico.

Prima di implementare gli IP pubblici statici nelle VM, è necessario capire quando e come si possono usare gli IP pubblici statici. Leggere la panoramica sugli indirizzi IP per altre informazioni sull'indirizzamento IP in Azure.

Nota

Azure offre due modelli di distribuzione per creare e usare le risorse: Gestione risorse e la distribuzione classica. Questo articolo illustra l'uso del modello di distribuzione Resource Manager che Microsoft consiglia di usare invece del modello di distribuzione classica per le distribuzioni più recenti.

Scenario

In questo documento verrà illustrata una distribuzione che usa un indirizzo IP pubblico statico allocato a una macchina virtuale (VM). In questo scenario, si dispone di una singola VM con il proprio indirizzo IP pubblico statico. La VM fa parte di una subnet denominata FrontEnd e ha anche un indirizzo IP privato statico (192.168.1.101) nella subnet.

Potrebbe essere necessario un indirizzo IP statico per i server Web che richiedono connessioni SSL in cui il certificato SSL è collegato a un indirizzo IP.

DESCRIZIONE DELL’IMMAGINE

È possibile seguire i passaggi riportati sotto per distribuire l'ambiente illustrato nella figura precedente.

Prerequisito: installare il modulo Azure PowerShell.

Per realizzare la procedura descritta in questo articolo, è necessario installare e configurare Azure PowerShell e seguire le istruzioni fino al termine della procedura per accedere ad Azure e selezionare la sottoscrizione desiderata.

Nota

Se non si dispone di un account Azure, è necessario procurarsene uno. Usare la versione di valutazione gratuita.

Passaggio 1 - avviare lo script

È possibile scaricare lo script di PowerShell completo utilizzato qui. Attenersi alla procedura seguente per modificare lo script da usare nell'ambiente.

Modificare i valori delle variabili indicate di seguito in base ai valori che si desidera usare per la distribuzione. I valori seguenti si riferiscono allo scenario usato in questo articolo:

# Set variables resource group
$rgName                = "IaaSStory"
$location              = "West US"

# Set variables for VNet
$vnetName              = "WTestVNet"
$vnetPrefix            = "192.168.0.0/16"
$subnetName            = "FrontEnd"
$subnetPrefix          = "192.168.1.0/24"

# Set variables for storage
$stdStorageAccountName = "iaasstorystorage"

# Set variables for VM
$vmSize                = "Standard_A1"
$diskSize              = 127
$publisher             = "MicrosoftWindowsServer"
$offer                 = "WindowsServer"
$sku                   = "2012-R2-Datacenter"
$version               = "latest"
$vmName                = "WEB1"
$osDiskName            = "osdisk"
$nicName               = "NICWEB1"
$privateIPAddress      = "192.168.1.101"
$pipName               = "PIPWEB1"
$dnsName               = "iaasstoryws1"

Passaggio 2 - Creare le risorse necessarie per la VM

Prima di creare una VM, è necessario disporre di un gruppo di risorse, una rete virtuale, un IP pubblico e una scheda di rete utilizzabili dalla VM.

  1. Creare un nuovo gruppo di risorse.

    New-AzureRmResourceGroup -Name $rgName -Location $location
    
  2. Creare rete virtuale e subnet.

    $vnet = New-AzureRmVirtualNetwork -ResourceGroupName $rgName -Name $vnetName `
        -AddressPrefix $vnetPrefix -Location $location
    
    Add-AzureRmVirtualNetworkSubnetConfig -Name $subnetName `
        -VirtualNetwork $vnet -AddressPrefix $subnetPrefix
    
    Set-AzureRmVirtualNetwork -VirtualNetwork $vnet
    
  3. Creare la risorsa di IP pubblico.

    $pip = New-AzureRmPublicIpAddress -Name $pipName -ResourceGroupName $rgName `
        -AllocationMethod Static -DomainNameLabel $dnsName -Location $location
    
  4. Creare l'interfaccia di rete (NIC) per la VM nella subnet creata in precedenza, con l'IP pubblico. Notare che il primo cmdlet che recupera la rete virtuale da Azure è necessario perché Set-AzureRmVirtualNetwork è stato eseguito per modificare la rete virtuale esistente.

    $vnet = Get-AzureRmVirtualNetwork -Name $vnetName -ResourceGroupName $rgName
    $subnet = Get-AzureRmVirtualNetworkSubnetConfig -VirtualNetwork $vnet -Name $subnetName
    $nic = New-AzureRmNetworkInterface -Name $nicName -ResourceGroupName $rgName `
        -Subnet $subnet -Location $location -PrivateIpAddress $privateIPAddress `
        -PublicIpAddress $pip
    
  5. Creare un account di archiviazione per ospitare l'unità del sistema operativo della VM.

    $stdStorageAccount = New-AzureRmStorageAccount -Name $stdStorageAccountName `
    -ResourceGroupName $rgName -Type Standard_LRS -Location $location
    

Passaggio 3 - Creare la VM

Ora che tutte le risorse necessarie sono presenti, è possibile creare una nuova VM.

  1. Creare l'oggetto di configurazione per la VM.

    $vmConfig = New-AzureRmVMConfig -VMName $vmName -VMSize $vmSize
    
  2. Ottenere le credenziali per l'account amministratore locale della VM.

    $cred = Get-Credential -Message "Type the name and password for the local administrator account."
    
  3. Creare un oggetto di configurazione della VM.

    $vmConfig = Set-AzureRmVMOperatingSystem -VM $vmConfig -Windows -ComputerName $vmName `
        -Credential $cred -ProvisionVMAgent -EnableAutoUpdate
    
  4. Impostare l'immagine del sistema operativo per la VM.

    $vmConfig = Set-AzureRmVMSourceImage -VM $vmConfig -PublisherName $publisher `
        -Offer $offer -Skus $sku -Version $version
    
  5. Configurare il disco del sistema operativo.

    $osVhdUri = $stdStorageAccount.PrimaryEndpoints.Blob.ToString() + "vhds/" + $osDiskName + ".vhd"
    $vmConfig = Set-AzureRmVMOSDisk -VM $vmConfig -Name $osDiskName -VhdUri $osVhdUri -CreateOption fromImage
    
  6. Aggiungere la scheda di rete alla VM.

    $vmConfig = Add-AzureRmVMNetworkInterface -VM $vmConfig -Id $nic.Id -Primary
    
  7. Creare la macchina virtuale

    New-AzureRmVM -VM $vmConfig -ResourceGroupName $rgName -Location $location
    
  8. Salvare il file di script.

Passaggio 4 - eseguire lo script.

Dopo aver apportato tutte le modifiche necessarie e aver compreso il funzionamento dello script illustrato sopra, eseguire lo script.

  1. Dalla console di PowerShell o PowerShell ISE, eseguire lo script sopra riportato.
  2. L'output seguente deve essere visualizzato dopo pochi minuti:

     ResourceGroupName : IaaSStory
     Location          : westus
     ProvisioningState : Succeeded
     Tags              : 
     ResourceId        : /subscriptions/[Subscription ID]/resourceGroups/IaaSStory
    
     AddressSpace      : Microsoft.Azure.Commands.Network.Models.PSAddressSpace
     DhcpOptions       : Microsoft.Azure.Commands.Network.Models.PSDhcpOptions
     Subnets           : {FrontEnd}
     ProvisioningState : Succeeded
     AddressSpaceText  : {
                           "AddressPrefixes": [
                             "192.168.0.0/16"
                           ]
                         }
     DhcpOptionsText   : {}
     SubnetsText       : [
                           {
                             "Name": "FrontEnd",
                             "AddressPrefix": "192.168.1.0/24"
                           }
                         ]
     ResourceGroupName : IaaSStory
     Location          : westus
     ResourceGuid      : [Id]
     Tag               : {}
     TagsTable         : 
     Name              : WTestVNet
     Etag              : W/"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
     Id                : /subscriptions/[Subscription ID]/resourceGroups/IaaSStory/providers/Microsoft.Network/virtualNetworks/WTestVNet
    
     AddressSpace      : Microsoft.Azure.Commands.Network.Models.PSAddressSpace
     DhcpOptions       : Microsoft.Azure.Commands.Network.Models.PSDhcpOptions
     Subnets           : {FrontEnd}
     ProvisioningState : Succeeded
     AddressSpaceText  : {
                           "AddressPrefixes": [
                             "192.168.0.0/16"
                           ]
                         }
     DhcpOptionsText   : {
                           "DnsServers": []
                         }
     SubnetsText       : [
                           {
                             "Name": "FrontEnd",
                             "Etag": [Id],
                             "Id": "/subscriptions/[Subscription ID]/resourceGroups/IaaSStory/providers/Microsoft.Network/virtualNetworks/WTestVNet/subnets/FrontEnd",
                             "AddressPrefix": "192.168.1.0/24",
                             "IpConfigurations": [],
                             "ProvisioningState": "Succeeded"
                           }
                         ]
     ResourceGroupName : IaaSStory
     Location          : westus
     ResourceGuid      : [Id]
     Tag               : {}
     TagsTable         : 
     Name              : WTestVNet
     Etag              : [Id]
     Id                : /subscriptions/[Subscription Id]/resourceGroups/IaaSStory/providers/Microsoft.Network/virtualNetworks/WTestVNet
    
     TrackingOperationId : [Id]
     RequestId           : [Id]
     Status              : Succeeded
     StatusCode          : OK
     Output              : 
     StartTime           : [Subscription Id]
     EndTime             : [Subscription Id]
     Error               : 
     ErrorText           :