Esercizio - Creare una risorsa di Azure tramite script in Azure PowerShell

Completato

Si ricordi lo scenario originale, ossia la creazione di macchine virtuali per testare il software CRM. Quando è disponibile una nuova build, si vuole creare rapidamente una nuova macchina virtuale in modo da poter testare l'esperienza di installazione completa da un'immagine pulita. Completati i test, la macchina virtuale dovrà essere eliminata.

Si proveranno ora i comandi per creare una macchina virtuale.

Creare una macchina virtuale Linux con Azure PowerShell

Poiché si sta usando l'ambiente sandbox di Azure, non è necessario creare un gruppo di risorse. Usare invece il gruppo di risorse [Nome del gruppo di risorse sandbox]. Tenere anche presenti le restrizioni per la posizione.

È possibile creare una nuova macchina virtuale di Azure con PowerShell.

  1. Usare il cmdlet New-AzVm per creare una macchina virtuale.

    • Usare il gruppo di risorse [Nome del gruppo di risorse sandbox].

    • Assegnare un nome alla macchina virtuale. In genere si usa un nome significativo che identifichi gli scopi della macchina virtuale, la posizione e il numero di istanza (se ne esiste più di una). Si userà "testvm-eus-01" per "Test VM in East US, instance 1". Scegliere un nome appropriato in base a dove è stata posizionata la macchina virtuale.

    • Selezionare una località vicina dall'elenco seguente, disponibile nell'ambiente sandbox di Azure. Assicurarsi di modificare il valore nel comando di esempio seguente, se si usa Copia e incolla.

      • westus2
      • Stati Uniti centro-meridionali
      • centralus
      • eastus
      • westeurope
      • Asia sud-orientale
      • japaneast
      • brazilsouth
      • australiasoutheast
      • centralindia
    • Usare "Canonical:0001-com-ubuntu-server-focal:20_04-lts:latest" per l'immagine. Questa immagine è Ubuntu Linux.

    • Usare il cmdlet Get-Credential e inviare i risultati nel parametro Credential.

      Importante

      Vedere le domande frequenti sulle macchine virtuali Linux per le limitazioni relative a nome utente e password. Le password devono contenere da 12 a 123 caratteri e soddisfare tre dei quattro requisiti di complessità seguenti:

      • Devono contenere caratteri minuscoli
      • Devono contenere caratteri maiuscoli
      • Devono contenere un numero
      • Devono contenere un carattere speciale (REGEX.CONFRONTA [\W_])
    • Aggiungere il parametro -OpenPorts e passare "22" come porta. Questa porta permette di usare SSH nel computer.

    • Creare un nome di indirizzo IP pubblico. Questo nome viene usato per creare e individuare l'indirizzo IP statico per accedere al computer.

    New-AzVm -ResourceGroupName <rgn>[sandbox resource group name]</rgn> -Name "testvm-eus-01" -Credential (Get-Credential) -Location "eastus" -Image Canonical:0001-com-ubuntu-server-focal:20_04-lts:latest -OpenPorts 22 -PublicIpAddressName "testvm-eus-01"
    

    Suggerimento

    È possibile usare il pulsante Copia per copiare i comandi negli Appunti. Per incollare, fare clic con il pulsante destro del mouse su una nuova riga nel terminale di Cloud Shell e scegliere Incolla oppure usare i tasti di scelta rapida MAIUSC+INS (⌘+V in macOS).

  2. Creare un nome utente e una password, quindi premere INVIO. PowerShell inizia a creare la macchina virtuale.

  3. La creazione della macchina virtuale richiede alcuni minuti. Al termine, è possibile eseguire una query e assegnare l'oggetto macchina virtuale a una variabile ($vm).

    $vm = (Get-AzVM -Name "testvm-eus-01" -ResourceGroupName <rgn>[sandbox resource group name]</rgn>)
    
  4. Eseguire una query per ottenere il valore per eseguire il dump delle informazioni relative alla macchina virtuale.

    $vm
    

    Verrà visualizzato un output simile al seguente:

    ResourceGroupName : <rgn>[sandbox resource group name]</rgn>
    Id                : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/<rgn>[sandbox resource group name]</rgn>/providers/Microsoft.Compute/virtualMachines/testvm-eus-01
    VmId              : 00000000-0000-0000-0000-000000000000
    Name              : testvm-eus-01
    Type              : Microsoft.Compute/virtualMachines
    Location          : eastus
    Tags              : {}
    HardwareProfile   : {VmSize}
    NetworkProfile    : {NetworkInterfaces}
    OSProfile         : {ComputerName, AdminUsername, LinuxConfiguration, Secrets}
    ProvisioningState : Succeeded
    StorageProfile    : {ImageReference, OsDisk, DataDisks}
    
  5. È possibile accedere a oggetti complessi tramite la notazione con punto (.). Ad esempio, per visualizzare le proprietà nell'oggetto VMSize associato alla sezione HardwareProfile, eseguire il comando seguente:

    $vm.HardwareProfile
    
  6. Oppure, per ottenere informazioni su uno dei dischi, eseguire il comando seguente:

    $vm.StorageProfile.OsDisk
    
  7. È anche possibile passare l'oggetto macchina virtuale in altri cmdlet. Ad esempio, l'esecuzione del comando seguente mostra tutte le dimensioni disponibili per la macchina virtuale:

    $vm | Get-AzVMSize
    
  8. Eseguire ora il comando seguente per ottenere l'indirizzo IP pubblico:

    az vm list-ip-addresses -n testvm-eus-01 -g <rgn>[sandbox resource group name]</rgn>
    
  9. Con l'indirizzo IP è possibile connettersi alla macchina virtuale con SSH. Ad esempio, se è stato usato il nome utente bob e l'indirizzo IP è 205.22.16.5, eseguendo questo comando è possibile connettersi alla macchina Linux:

    ssh bob@205.22.16.5
    

    Per disconnettersi immettere exit.

Eliminare una macchina virtuale

Per provare alcuni altri comandi, eliminare la macchina virtuale. Prima di tutto, è necessario arrestarla (se richiesto, immettere Y per continuare):

Stop-AzVM -Name $vm.Name -ResourceGroupName $vm.ResourceGroupName

Quando la macchina virtuale è stata arrestata, eliminare la macchina virtuale eseguendo il cmdlet Remove-AzVM (se richiesto, immettere Y per continuare):

Remove-AzVM -Name $vm.Name -ResourceGroupName $vm.ResourceGroupName

Provare questo comando per elencare tutte le risorse presenti nel gruppo di risorse:

Get-AzResource -ResourceGroupName $vm.ResourceGroupName | Format-Table

Verranno visualizzate diverse risorse (dischi, reti virtuali e così via) ancora esistenti.

Microsoft.Compute/disks
Microsoft.Network/networkInterfaces
Microsoft.Network/networkSecurityGroups
Microsoft.Network/publicIPAddresses
Microsoft.Network/virtualNetworks

Il comando Remove-AzVMelimina solo la macchina virtuale. e non pulisce tutte le altre risorse. A questo punto, probabilmente è sufficiente eliminare il gruppo di risorse stesso per fare pulizia. Si vedrà invece come eseguire manualmente l'operazione eseguendo l'esercizio. Si noterà uno schema nei comandi.

  1. Eliminare l'interfaccia di rete:

    $vm | Remove-AzNetworkInterface –Force
    
  2. Eliminare i dischi del sistema operativo gestiti:

    Get-AzDisk -ResourceGroupName $vm.ResourceGroupName -DiskName $vm.StorageProfile.OSDisk.Name | Remove-AzDisk -Force
    
  3. Eliminare quindi la rete virtuale:

    Get-AzVirtualNetwork -ResourceGroupName $vm.ResourceGroupName | Remove-AzVirtualNetwork -Force
    
  4. Eliminare il gruppo di sicurezza di rete:

    Get-AzNetworkSecurityGroup -ResourceGroupName $vm.ResourceGroupName | Remove-AzNetworkSecurityGroup -Force
    
  5. Infine, eliminare l'indirizzo IP pubblico:

    Get-AzPublicIpAddress -ResourceGroupName $vm.ResourceGroupName | Remove-AzPublicIpAddress -Force
    

A questo punto dovrebbero essere state eliminate tutte le risorse create. Per sicurezza controllare il gruppo di risorse. Sono stati eseguiti numerosi comandi manuali, ma un approccio migliore sarebbe stato scrivere uno script, in modo da poter riusare questa logica in un secondo momento per creare o eliminare una macchina virtuale. Si vedranno ora le tecniche di scripting con PowerShell.