Creare una VM con un IP pubblico statico usando l'interfaccia della riga di comando 1.0 di Azure

È 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 diversi 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 l'interfaccia della riga di comando di Azure

Per eseguire i passaggi in questo articolo, è necessario installare l'interfaccia della riga di comando di Azure per Mac, Linux e Windows (interfaccia della riga di comando di Azure) ed è necessario accedere ad Azure.

Nota

Se non si dispone di un account Azure, è necessario procurarsene uno. Usare la versione di valutazione gratuita. Inoltre, per completare l'operazione è necessario aver installato una libreria o uno strumento di analisi jq o JSON di altro tipo.

È possibile completare questa attività usando l'interfaccia della riga di comando di Azure 1.0 (questo articolo) o l'interfaccia della riga di comando di Azure 2.0.

Passaggio 1 - avviare lo script

È possibile scaricare lo script di bash completo utilizzato qui. Per modificare lo script da usare nell'ambiente, seguire questa procedura:

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 for the new resource group
rgName="IaaSStory"
location="westus"

# Set variables for VNet
vnetName="TestVNet"
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="Canonical"
offer="UbuntuServer"
sku="14.04.2-LTS"
version="latest"
vmName="WEB1"
osDiskName="osdisk"
nicName="NICWEB1"
privateIPAddress="192.168.1.101"
username='adminuser'
password='adminP@ssw0rd'
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.

    azure group create $rgName $location
    
  2. Creare rete virtuale e subnet.

    azure network vnet create --resource-group $rgName \
        --name $vnetName \
        --address-prefixes $vnetPrefix \
        --location $location
    azure network vnet subnet create --resource-group $rgName \
        --vnet-name $vnetName \
        --name $subnetName \
        --address-prefix $subnetPrefix
    
  3. Creare la risorsa di IP pubblico.

    azure network public-ip create --resource-group $rgName \
        --name $pipName \
        --location $location \
        --allocation-method Static \
        --domain-name-label $dnsName
    
  4. Creare l'interfaccia di rete (NIC) per la VM nella subnet creata in precedenza, con l'IP pubblico. Notare che il primo set di comandi viene utilizzato per recuperare l' Id della subnet creata in precedenza.

    subnetId="$(azure network vnet subnet show --resource-group $rgName \
        --vnet-name $vnetName \
        --name $subnetName|grep Id)"
    
    subnetId=${subnetId#*/}
    
    azure network nic create --name $nicName \
        --resource-group $rgName \
        --location $location \
        --private-ip-address $privateIPAddress \
        --subnet-id $subnetId \
        --public-ip-name $pipName
    
    Suggerimento

    Il primo comando precedente usa grep e manipolazione delle stringhe (in particolare, la rimozione di sottostringhe).

  5. Creare un account di archiviazione per ospitare l'unità del sistema operativo della VM.

    azure storage account create $stdStorageAccountName \
        --resource-group $rgName \
        --location $location --type LRS
    

Passaggio 3 - Creare la VM

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

  1. Creare la macchina virtuale

    azure vm create --resource-group $rgName \
        --name $vmName \
        --location $location \
        --vm-size $vmSize \
        --subnet-id $subnetId \
        --nic-names $nicName \
        --os-type linux \
        --image-urn $publisher:$offer:$sku:$version \
        --storage-account-name $stdStorageAccountName \
        --storage-account-container-name vhds \
        --os-disk-vhd $osDiskName.vhd \
        --admin-username $username \
        --admin-password $password
    
  2. 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 bash, eseguire lo script sopra riportato.

    sh myscript.sh
    
  2. L'output seguente deve essere visualizzato dopo pochi minuti.

     info:    Executing command group create
     info:    Getting resource group IaaSStory
     info:    Creating resource group IaaSStory
     info:    Created resource group IaaSStory
     data:    Id:                  /subscriptions/[Subscription ID]/resourceGroups/IaaSStory
     data:    Name:                IaaSStory
     data:    Location:            westus
     data:    Provisioning State:  Succeeded
     data:    Tags: null
     data:
     info:    group create command OK
     info:    Executing command network vnet create
     info:    Looking up virtual network "TestVNet"
     info:    Creating virtual network "TestVNet"
     info:    Loading virtual network state
     data:    Id                              : /subscriptions/[Subscription ID]/resourceGroups/IaaSStory/providers/Microsoft.Network/virtualNetworks/TestVNet
     data:    Name                            : TestVNet
     data:    Type                            : Microsoft.Network/virtualNetworks
     data:    Location                        : westus
     data:    ProvisioningState               : Succeeded
     data:    Address prefixes:
     data:      192.168.0.0/16
     info:    network vnet create command OK
     info:    Executing command network vnet subnet create
     info:    Looking up the subnet "FrontEnd"
     info:    Creating subnet "FrontEnd"
     info:    Looking up the subnet "FrontEnd"
     data:    Id                              : /subscriptions/[Subscription ID]/resourceGroups/IaaSStory/providers/Microsoft.Network/virtualNetworks/TestVNet/subnets/FrontEnd
     data:    Type                            : Microsoft.Network/virtualNetworks/subnets
     data:    ProvisioningState               : Succeeded
     data:    Name                            : FrontEnd
     data:    Address prefix                  : 192.168.1.0/24
     data:
     info:    network vnet subnet create command OK
     info:    Executing command network public-ip create
     info:    Looking up the public ip "PIPWEB1"
     info:    Creating public ip address "PIPWEB1"
     info:    Looking up the public ip "PIPWEB1"
     data:    Id                              : /subscriptions/[Subscription ID]/resourceGroups/IaaSStory/providers/Microsoft.Network/publicIPAddresses/PIPWEB1
     data:    Name                            : PIPWEB1
     data:    Type                            : Microsoft.Network/publicIPAddresses
     data:    Location                        : westus
     data:    Provisioning state              : Succeeded
     data:    Allocation method               : Static
     data:    Idle timeout                    : 4
     data:    IP Address                      : 40.78.63.253
     data:    Domain name label               : iaasstoryws1
     data:    FQDN                            : iaasstoryws1.westus.cloudapp.azure.com
     info:    network public-ip create command OK
     info:    Executing command network nic create
     info:    Looking up the network interface "NICWEB1"
     info:    Looking up the public ip "PIPWEB1"
     info:    Creating network interface "NICWEB1"
     info:    Looking up the network interface "NICWEB1"
     data:    Id                              : /subscriptions/[Subscription ID]/resourceGroups/IaaSStory/providers/Microsoft.Network/networkInterfaces/NICWEB1
     data:    Name                            : NICWEB1
     data:    Type                            : Microsoft.Network/networkInterfaces
     data:    Location                        : westus
     data:    Provisioning state              : Succeeded
     data:    Enable IP forwarding            : false
     data:    IP configurations:
     data:      Name                          : NIC-config
     data:      Provisioning state            : Succeeded
     data:      Public IP address             : /subscriptions/[Subscription ID]/resourceGroups/IaaSStory/providers/Microsoft.Network/publicIPAddresses/PIPWEB1
     data:      Private IP address            : 192.168.1.101
     data:      Private IP Allocation Method  : Static
     data:      Subnet                        : /subscriptions/[Subscription ID]/resourceGroups/IaaSStory2/providers/Microsoft.Network/virtualNetworks/TestVNet/subnets/FrontEnd
     data:
     info:    network nic create command OK
     info:    Executing command storage account create
     info:    Creating storage account
     info:    storage account create command OK
     info:    Executing command vm create
     info:    Looking up the VM "WEB1"
     info:    Using the VM Size "Standard_A1"
     info:    The [OS, Data] Disk or image configuration requires storage account
     info:    Looking up the storage account iaasstorystorage
     info:    Looking up the NIC "NICWEB1"
     info:    Creating VM "WEB1"
     info:    vm create command OK