Esercizio - Controllare l'ordine di distribuzione delle risorse

Completato

In questa parte si inizia eseguendo alcune attività di configurazione di base. In Visual Studio Code si connette una sessione di terminale alla sottoscrizione di Azure disponibile con l'ambiente sandbox di Azure gratuito. Questa operazione consente di autenticare i comandi in Azure.

Quindi, eseguire un modello di ARM di base che effettua il provisioning di una macchina virtuale (VM) Linux. Al termine della distribuzione verificare che la VM sia in esecuzione e collegabile.

Anche se l'uso delle macchine virtuali è un'attività comune, si scopre che una risorsa della VM richiede componenti di rete e di archiviazione che devono già esistere per poter creare la VM. Viene illustrato come il costrutto consente di impostare l'ordine in cui viene effettuato il dependsOn provisioning delle risorse.

Impostare

Aprire Visual Studio Code, creare una sessione di PowerShell ed eseguire la connessione alla sottoscrizione di Azure disponibile con l'ambiente sandbox di Azure gratuito.

È necessario eseguire queste attività di configurazione una volta durante questo modulo. È possibile fare riferimento a questi passaggi se si esegue la disconnessione o si viene disconnessi in un esercizio successivo.

Aprire PowerShell in Visual Studio Code

  1. Aprire Visual Studio Code.

  2. Aprire una finestra del terminale usando il menu Terminale.

  3. Se nel menu a discesa a destra della finestra del terminale viene visualizzato pwsh, la shell è corretta ed è possibile passare alla sezione successiva.

    Screenshot of Terminal window, terminal type.

  4. In caso contrario, fare clic sull'elenco a discesa e scegliere Seleziona shell predefinita.

  5. Selezionare pwsh.

    Screenshot that shows selecting a shell from the drop-down menu.

  6. Selezionare + nel terminale per creare un nuovo terminale con pwsh come shell.

Accedere ad Azure

  1. Eseguire Connect-AzAccount per accedere al proprio account.

    Connect-AzAccount
    

    Verrà visualizzata una finestra del browser.

  2. Selezionare l'account usato per attivare la sandbox e chiudere la finestra del browser quando richiesto.

Impostare la sottoscrizione attiva

  1. Eseguire Get-AzSubscription per ottenere l'ID sottoscrizione per l'ambiente sandbox.

    Get-AzSubscription
    

    Cercare Concierge Subscription e copiare la seconda colonna. Sarà simile a cf49fbbc-217c-4eb6-9eb5-a6a6c68295a0.

  2. Eseguire Set-AzContext per modificare la sottoscrizione attiva impostandola sulla sottoscrizione Concierge.

    Nota

    Assicurarsi di sostituire {Your subscription ID} con l'ID della sottoscrizione Concierge ottenuto con il comando precedente.

    $subscription = Get-AzSubscription -SubscriptionId {Your subscription ID}
    Set-AzContext $subscription
    

Impostare il gruppo di risorse predefinito

In genere, quando si esegue un comando dell'interfaccia della riga di comando di Azure è necessario specificare un gruppo di risorse.

L'ambiente sandbox mette a disposizione un gruppo di risorse predefinito. Per semplificare l'esecuzione dei comandi dell'interfaccia della riga di comando di Azure, impostare il gruppo di risorse predefinito.

Eseguire il cmdlet Set-AzDefault per impostare il gruppo di risorse predefinito.

Set-AzDefault -ResourceGroupName <rgn>resource group name</rgn>

Nota

In genere, quando si usa PowerShell per distribuire una risorsa in Azure, è necessario specificare un gruppo di risorse. Per ignorare questo requisito, impostare il contesto della distribuzione usando Set-AzDefault.

Contenuto di una tipica distribuzione di VM

Quando si distribuisce una macchina virtuale, tenere presente che è necessario distribuire anche alcune risorse per consentire il funzionamento della macchina virtuale.

Di seguito è riportato un breve riepilogo dei tipi di risorse che in genere devono essere distribuiti insieme a una VM:

  • Microsoft.Storage/storageAccounts. Un account di archiviazione offre lo spazio su disco per il sistema operativo e i file.
  • Microsoft.Network/publicIPAddresses. Un indirizzo IP pubblico consente di connettersi alla VM da Internet.
  • Microsoft.Network/networkSecurityGroups. Un gruppo di sicurezza di rete contiene le regole per la gestione del traffico in ingresso e in uscita verso la rete virtuale.
  • Microsoft.Network/virtualNetworks. La VM deve essere posizionata in una rete virtuale. Questa risorsa richiede che venga prima distribuito il gruppo di sicurezza di rete.
  • Microsoft.Network/networkInterfaces. Questa risorsa dipende da altre due risorse: l'indirizzo IP pubblico e la rete virtuale.
  • Microsoft.Compute/virtualMachines. La macchina virtuale è la risorsa principale da distribuire. Dipende da due risorse diverse: l'account di archiviazione e le interfacce di rete.

Distribuire una macchina virtuale Linux

Qui è possibile scaricare un modello di ARM da un repository GitHub disponibile per l'utente. Il modello esegue il provisioning di una macchina virtuale Linux e di tutte le risorse necessarie per eseguirla.

  1. Eseguire il seguente comando curl per scaricare il modello di ARM:

    curl -O 'https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.compute/vm-simple-linux/azuredeploy.json'
    
  2. Eseguire il cmdlet ConvertTo-SecureString e assegnare i risultati a una variabile di PowerShell denominata $secure:

    $secure = "insecurepassword123!" | ConvertTo-SecureString -AsPlainText -Force
    

    A questo punto è disponibile una versione crittografata della password che successivamente si può passare allo script di distribuzione.

  3. Eseguire il comando New-AzResourceGroupDeployment per distribuire il modello:

    New-AzResourceGroupDeployment `
      -TemplateFile "./azuredeploy.json" `
      -adminUsername "azureuser" `
      -vmName "vm1" `
      -adminPasswordOrKey $secure
    

    L'esecuzione del comando può richiedere alcuni minuti. Durante l'esecuzione del comando è possibile esaminare il modello di ARM in una scheda separata del browser.

    Prendere nota delle dipendenze delle risorse cercando la chiave dependsOn. Ad esempio, la risorsa della macchina virtuale dipende dall'interfaccia di rete:

    "type": "Microsoft.Compute/virtualMachines",
    "apiVersion": "2020-06-01",
    "name": "[parameters('vmName')]",
    "location": "[parameters('location')]",
    "dependsOn": [
      "[resourceId('Microsoft.Network/networkInterfaces/', variables('networkInterfaceName'))]"
    ],
    

Verificare la distribuzione

Verificare che la macchina virtuale sia stata sottoposta a provisioning e sia collegabile via SSH. A questo scopo:

  1. Eseguire il comando Invoke-Expression per effettuare la connessione alla VM via SSH:

    Invoke-Expression (Get-AzResourceGroupDeployment -Name azuredeploy -ResourceGroupName <rgn>your resource group</rgn>).outputs.sshCommand.value
    

    Quando richiesto, immettere yes per continuare la connessione. Immettere quindi la password dell'amministratore, insecurepassword123!.

    Importante

    Nella pratica le password vanno protette. È anche possibile usare l'autenticazione con chiave pubblica, che in genere è più sicura rispetto all'uso delle password.

  2. Dalla connessione SSH alla VM eseguire hostname per stampare il nome host della VM:

    hostname
    

    Viene visualizzato il nome host interno della macchina virtuale, vm1:

    vm1
    
  3. Eseguire exit per lasciare la sessione SSH.

    exit
    

La distribuzione di una VM Linux usando un modello di ARM è stata completata. Una VM è un tipo di risorsa comune che include risorse dipendenti.

Impostare

Aprire Visual Studio Code, creare una sessione di terminale ed eseguire la connessione alla sottoscrizione di Azure disponibile con l'ambiente sandbox di Azure gratuito.

È necessario eseguire queste attività di configurazione una volta durante questo modulo. È possibile fare riferimento a questi passaggi se si esegue la disconnessione o si viene disconnessi in un esercizio successivo.

Aprire una shell in Visual Studio Code

  1. Aprire Visual Studio Code.

  2. Aprire una finestra del terminale usando il menu Terminale.

  3. Se il menu a discesa visualizza la shell preferita, ad esempio bash o zsh, passare alla sezione successiva.

  4. In caso contrario, fare clic sull'elenco a discesa e scegliere Seleziona shell predefinita.

  5. Selezionare il tipo di shell che si vuole usare.

    Screenshot that shows selecting a shell from the drop-down menu.

  6. Selezionare + nel terminale per creare un nuovo terminale con il tipo di shell selezionato.

Accedere ad Azure

  1. Dal terminale eseguire az login:

    az login
    

    Verrà visualizzata una finestra del browser.

  2. Selezionare l'account usato per attivare la sandbox e chiudere la finestra del browser quando richiesto.

Impostare la sottoscrizione attiva

Eseguire il seguente comando az account set per impostare l'ambiente sandbox di Azure come sottoscrizione attiva:

az account set -s "Concierge Subscription"

Nota

Se il comando non riesce, eseguire az account list --refresh --all e quindi eseguire di nuovo il comando az account set.

Impostare il gruppo di risorse predefinito

In genere, quando si esegue un comando dell'interfaccia della riga di comando di Azure è necessario specificare un gruppo di risorse.

L'ambiente sandbox mette a disposizione un gruppo di risorse predefinito. Per semplificare l'esecuzione dei comandi dell'interfaccia della riga di comando di Azure, impostare il gruppo di risorse predefinito.

Eseguire il seguente comando az configure per impostare il gruppo di risorse predefinito:

az configure --defaults group=<rgn>resource group name</rgn>

Contenuto di una tipica distribuzione di VM

Quando si distribuisce una macchina virtuale, tenere presente che è necessario distribuire anche alcune risorse per consentire il funzionamento della macchina virtuale.

Di seguito è riportato un breve riepilogo dei tipi di risorse che in genere devono essere distribuiti insieme a una VM:

  • Microsoft.Storage/storageAccounts. Un account di archiviazione offre lo spazio su disco per il sistema operativo e i file.
  • Microsoft.Network/publicIPAddresses. Un indirizzo IP pubblico consente di connettersi alla VM da Internet.
  • Microsoft.Network/networkSecurityGroups. Un gruppo di sicurezza di rete contiene le regole per la gestione del traffico in ingresso e in uscita verso la rete virtuale.
  • Microsoft.Network/virtualNetworks. La VM deve essere posizionata in una rete virtuale. Questa risorsa richiede che venga prima distribuito il gruppo di sicurezza di rete.
  • Microsoft.Network/networkInterfaces. Questa risorsa dipende da altre due risorse: l'indirizzo IP pubblico e la rete virtuale.
  • Microsoft.Compute/virtualMachines. La macchina virtuale è la risorsa principale da distribuire. Dipende da due risorse diverse: l'account di archiviazione e le interfacce di rete.

Distribuire una macchina virtuale Linux

Qui è possibile scaricare un modello di Azure Resource Manager (ARM) da un repository GitHub disponibile per l'utente. Il modello esegue il provisioning di una macchina virtuale Linux e di tutte le risorse necessarie per eseguirla.

  1. Eseguire il seguente comando wget per scaricare il modello di ARM:

    wget https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.compute/vm-simple-linux/azuredeploy.json
    

    Se wget non è installato, è possibile eseguire questo comando curl:

    curl https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.compute/vm-simple-linux/azuredeploy.json > azuredeploy.json
    
  2. Eseguire il comando az deployment group create per distribuire il modello:

    az deployment group create \
      --template-file azuredeploy.json \
      --parameters adminUsername=azureuser vmName=vm1 adminPasswordOrKey='insecurepassword123!'
    

    L'esecuzione del comando può richiedere alcuni minuti. Durante l'esecuzione del comando è possibile esaminare il modello di ARM in una scheda separata del browser.

    Prendere nota delle dipendenze delle risorse cercando la chiave dependsOn. Ad esempio, la risorsa della macchina virtuale dipende dall'interfaccia di rete:

    "type": "Microsoft.Compute/virtualMachines",
    "apiVersion": "2020-06-01",
    "name": "[parameters('vmName')]",
    "location": "[parameters('location')]",
    "dependsOn": [
      "[resourceId('Microsoft.Network/networkInterfaces/', variables('networkInterfaceName'))]"
    ],
    

Verificare la distribuzione

Verificare che la macchina virtuale sia stata sottoposta a provisioning e sia collegabile via SSH. A questo scopo:

  1. Eseguire il seguente comando az deployment group list per elencare i gruppi di distribuzione della sottoscrizione:

    az deployment group list --output table
    

    Viene visualizzato un gruppo di distribuzione, denominato azuredeploy:

    Name         ResourceGroup                               State      Timestamp                         Mode
    -----------  ------------------------------------------  ---------  --------------------------------  -----------
    azuredeploy  learn-1ef901aa-3f6a-46aa-8e93-a7f11e5192b8  Succeeded  2020-11-24T17:55:39.762517+00:00  Incremental
    
  2. Eseguire il seguente comando az deployment group show per visualizzare il comando SSH da usare per la connessione alla VM:

    az deployment group show \
      --name azuredeploy \
      --query properties.outputs.sshCommand.value \
      --output tsv
    

    Il modello di ARM definisce questa proprietà nella sezione output. Ecco un esempio:

    ssh azureuser@simplelinuxvm-a33zb3sc332ue.westus.cloudapp.azure.com
    
  3. Eseguire di nuovo il comando, questa volta usando la sintassi $() per eseguire il comando SSH:

    $(az deployment group show \
      --name azuredeploy \
      --query properties.outputs.sshCommand.value \
      --output tsv)
    

    Quando richiesto, immettere yes per continuare la connessione. Immettere quindi la password dell'amministratore, insecurepassword123!.

    Importante

    Nella pratica le password vanno protette. È anche possibile usare l'autenticazione con chiave pubblica, che in genere è più sicura rispetto all'uso delle password.

  4. Dalla connessione SSH alla VM eseguire hostname per stampare il nome host della VM:

    hostname
    

    Viene visualizzato il nome host interno della macchina virtuale, vm1:

    vm1
    
  5. Eseguire exit per lasciare la sessione SSH.

    exit
    

La distribuzione di una VM Linux usando un modello di ARM è stata completata. Una VM è un tipo di risorsa comune che include risorse dipendenti.