Esercizio - Distribuire modelli di Azure Resource Manager collegati e annidati

Completato

Nota

La prima volta che si attiva una sandbox e si accettano le condizioni, l'account Microsoft viene associato a una nuova directory di Azure denominata Microsoft Learn Sandbox. Si viene aggiunti a una sottoscrizione speciale denominata Concierge Subscription.

In questa unità si distribuisce un modello che include due modelli collegati nell'ambiente sandbox fornito.

Questo esercizio usa Strumenti di Azure Resource Manager per Visual Studio Code. Assicurarsi di installare questa estensione in Visual Studio Code.

Configurare l'ambiente di test con la sottoscrizione della sandbox di Azure fornita

Per eseguire ogni distribuzione in questa unità, è necessario accedere all'account Azure dal terminale di Visual Studio Code.

Verificare di accedere allo stesso account che ha attivato la sandbox.

Accedere ad Azure

  1. Dal terminale in Visual Studio Code eseguire il comando seguente per accedere ad Azure. Eseguendo questo comando viene aperta una finestra del browser che consente di accedere al proprio account.

    Connect-AzAccount
    
  2. Dopo aver effettuato l'accesso, viene visualizzato un elenco di sottoscrizioni associate all'account nel terminale. Se è stata attivata la sandbox, l'elenco includerà la sottoscrizione Concierge.

  3. Ottenere l'ID sottoscrizione. Il comando seguente elenca le sottoscrizioni e i rispettivi ID in un formato di tabella di facile lettura. L'ID sottoscrizione è la seconda colonna. Cercare Concierge Subscription e copiare la seconda colonna. Il risultato sarà simile a: cf49fbbc-217c-4eb6-9eb5-a6a6c68295a0.

    Get-AzSubscription
    
  4. Modificare la sottoscrizione attiva impostandola sulla sottoscrizione Concierge Subscription. Assicurarsi di sostituire {Your subscription ID} con l'ID della sottoscrizione Concierge ottenuto con il comando precedente.

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

Impostare il gruppo di risorse predefinito

A questo punto è necessario impostare il gruppo di risorse creato nella sandbox come gruppo di risorse predefinito. Per eseguire questa operazione, è necessario prima di tutto ottenere il nome del gruppo di risorse usando il comando seguente:

Get-AzResourceGroup

In questo comando usare il nome della risorsa ottenuto dal comando precedente. Il risultato sarà simile a: learn-a73131a1-b618-48b8-af70-21af7ca420c4. Questo comando consente di omettere il parametro dagli altri comandi di Azure PowerShell in questo esercizio.

Nota

In genere, quando si usa un comando di PowerShell o dell'interfaccia della riga di comando di Azure per distribuire un modello, è necessario specificare il nome del gruppo di risorse di destinazione. Nell'esercizio in questo modulo questo requisito viene ignorato impostando il contesto della distribuzione. Il nome del gruppo di risorse dell'ambiente sandbox viene specificato nel passaggio successivo usando il comando Set-AzDefault di PowerShell.

Set-AzDefault -ResourceGroupName {Resource Group Name}

Distribuire un modello collegato

In questo esercizio viene esaminato e distribuito un modello che include due modelli collegati.

  1. Per aggiungere un modello collegato al modello ARM, aggiungere una risorsa Microsoft.Resources/deployments e la proprietà templateLink configurata con il percorso del modello.

  2. Nel modello di esempio seguente è possibile notare la presenza di due variabili che definiscono i modelli remoti o esterni che si trovano in un repository GitHub.

    Esaminare il modello e prendere nota delle sezioni "type": "Microsoft.Resources/deployments" che definiscono dove e come vengono distribuiti i modelli collegati.

    Il primo modello collegato distribuisce un account di archiviazione. Utilizza i parametri padre e distribuisce il modello di archiviazione.

    Il secondo modello collegato è configurato per dipendere dalla distribuzione dell'archiviazione e per distribuire un modello di rete virtuale.

    {
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "name": {
            "type": "string",
            "defaultValue": "linkeddemo001"
        }
    },
    "variables": {
        "linked-template": "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.storage/storage-account-create/azuredeploy.json",
        "linked-template-2": "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/what-if/what-if-before.json"
    },
    "resources": [
        {
            "name": "storage",
            "type": "Microsoft.Resources/deployments",
            "apiVersion": "2019-10-01",
            "properties": {
                "mode": "Incremental",
                "templateLink": {
                    "uri": "[variables('linked-template')]",
                    "contentVersion": "1.0.0.0"
                },
                "parameters": {
                    "location": { "value": "[resourceGroup().location]" }
                }
            }
        },
        {
            "name": "identity",
            "type": "Microsoft.Resources/deployments",
            "apiVersion": "2019-10-01",
            "dependsOn": [
                "[resourceId('Microsoft.Resources/deployments','storage')]"
            ],
            "properties": {
                "mode": "Incremental",
                "templateLink": {
                    "uri": "[variables('linked-template-2')]",
                    "contentVersion": "1.0.0.0"
                }
            }
        }
    ],
    "outputs": {}
    }
    
  3. Copiare e incollare il contenuto del modello precedente in un file in una directory locale. Ad esempio, usare C:\JSON\linkedtemplate.json.

  4. Dopo aver salvato il file in locale, usare il comando di PowerShell seguente per distribuirlo a livello del gruppo di risorse, come descritto nell'unità precedente. Nello specifico, usare New-AzResourceGroupDeployment.

        $templateFile="C:\JSON\linkedtemplate.json"
        $today=Get-Date -Format "MM-dd-yyyy"
        $DeploymentName="DeployLinkedTemplate-"+"$today"
    
        New-AzResourceGroupDeployment `
        -Name $DeploymentName `
        -TemplateFile $templateFile
    

    Al termine, i risultati saranno simili all'esempio seguente.

    Risultati della distribuzione del modello collegato.

  5. Convalidare i risultati.

    1. Passare al portale di Azure e assicurarsi di trovarsi nella sottoscrizione dell'ambiente sandbox. A tale scopo, selezionare l'avatar nell'angolo superiore destro della pagina. Selezionare Cambia directory. Nell'elenco scegliere la directory Microsoft Learn Sandbox.

    2. Nel riquadro a sinistra selezionare Gruppi di risorse.

    3. Selezionare [nome gruppo di risorse sandbox].

    4. Nell'area Panoramica è possibile osservare che la distribuzione ha esito positivo. Selezionare 3 Riuscita per visualizzare i dettagli della distribuzione. Possono essere presenti più distribuzioni completate a seconda che siano stati eseguiti o meno gli esercizi dell'unità precedente.

    Interfaccia del portale di Azure per le distribuzioni con una distribuzione completata.

    Si noterà che è stato distribuito un modello, ma nel riquadro relativo alle distribuzioni del portale ne sono elencati tre. Queste tre distribuzioni corrispondono al modello principale e ai due modelli collegati.

    Interfaccia del portale di Azure per la distribuzione specifica senza risorse elencate.

Accedere ad Azure

  1. Dal terminale in Visual Studio Code eseguire il comando seguente per accedere ad Azure. Eseguendo questo comando viene aperta una finestra del browser che consente di accedere al proprio account.

    az login
    
  2. Dopo aver effettuato l'accesso, viene visualizzato un elenco JSON delle sottoscrizioni associate all'account nel terminale. Se è stata attivata la sandbox, l'elenco includerà la sottoscrizione Concierge.

  3. Ottenere l'ID sottoscrizione. Il comando seguente elenca le sottoscrizioni e i rispettivi ID. L'ID sottoscrizione corrisponde alla terza colonna. Cercare Concierge Subscription e copiare la terza colonna. Il risultato sarà simile a: cf49fbbc-217c-4eb6-9eb5-a6a6c68295a0.

    az account list -o table
    
  4. Modificare la sottoscrizione attiva impostandola sulla sottoscrizione Concierge Subscription. Assicurarsi di sostituire {Your subscription ID} con l'ID della sottoscrizione Concierge ottenuto con il comando precedente.

    az account set -s {Your subscription ID}
    

Impostare il gruppo di risorse predefinito

A questo punto è necessario impostare il gruppo di risorse creato nella sandbox come gruppo di risorse predefinito. Per eseguire questa operazione, è necessario prima di tutto ottenere il nome del gruppo di risorse usando il comando seguente:

az group list -o table

In questo comando usare il gruppo della risorsa ottenuto dal comando precedente. Sarà simile a learn-a73131a1-b618-48b8-af70-21af7ca420c4. L'impostazione predefinita consente di omettere il parametro dagli altri comandi dell'interfaccia della riga di comando di Azure in questo esercizio.

Nota

In genere, quando si usa un comando dell'interfaccia della riga di comando di Azure per distribuire un modello occorre specificare il nome del gruppo di risorse di destinazione. Nell'esercizio in questo modulo questo requisito viene ignorato impostando il contesto della distribuzione. Nel passaggio successivo viene specificato il nome del gruppo di risorse dell'ambiente sandbox usando il comando az configure dell'interfaccia della riga di comando di Azure.

az configure --defaults group={Resource Group Name}

Distribuire un modello collegato

In questo esercizio viene esaminato e distribuito un modello che include due modelli collegati.

  1. Per aggiungere un modello collegato al modello ARM, aggiungere una risorsa Microsoft.Resources/deployments e la proprietà templateLink configurata con il percorso del modello.

  2. Nel modello di esempio seguente è possibile notare la presenza di due variabili che definiscono i modelli remoti o esterni che si trovano in un repository GitHub.

    Esaminare il modello e prendere nota delle sezioni "type": "Microsoft.Resources/deployments" che definiscono dove e come vengono distribuiti i modelli collegati.

    Il primo modello collegato distribuisce un account di archiviazione. Utilizza i parametri padre e distribuisce il modello di archiviazione.

    Il secondo modello collegato è configurato per dipendere dalla distribuzione dell'archiviazione e per distribuire un modello di rete virtuale.

    {
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "name": {
            "type": "string",
            "defaultValue": "linkeddemo001"
        }
    },
    "variables": {
        "linked-template": "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.storage/storage-account-create/azuredeploy.json",
        "linked-template-2": "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/what-if/what-if-before.json"
    },
    "resources": [
      {
          "name": "storage",
          "type": "Microsoft.Resources/deployments",
          "apiVersion": "2019-10-01",
          "properties": {
              "mode": "Incremental",
              "templateLink": {
                  "uri": "[variables('linked-template')]",
                  "contentVersion": "1.0.0.0"
              },
              "parameters": {
                  "location": { "value": "[resourceGroup().location]" }
              }
          }
      },
      {
          "name": "identity",
          "type": "Microsoft.Resources/deployments",
          "apiVersion": "2019-10-01",
          "dependsOn": [
              "[resourceId('Microsoft.Resources/deployments','storage')]"
          ],
          "properties": {
              "mode": "Incremental",
              "templateLink": {
                  "uri": "[variables('linked-template-2')]",
                  "contentVersion": "1.0.0.0"
              }
          }
      }
    ],
    "outputs": {}
    }
    
  3. Copiare e incollare il contenuto del modello precedente in un file in una directory locale. Ad esempio, usare C:\JSON\linkedtemplate.json or /mnt/c/Users/you/json/linkedtemplate.json.

  4. Dopo aver salvato il file in locale, distribuirlo a livello del gruppo di risorse usando il comando dell'interfaccia della riga di comando di Azure seguente. Nello specifico, usare az deployment group create.

    templateFile=/mnt/c/Users/<UserName>/json/linkedtemplate.json
    today=$(date +"%Y-%m-%d")
    deploymentname="DeployLocalTemplate-3-"$today
    
    az deployment group create \
    --name $deploymentname \
    --template-file $templateFile
    

    Al termine, i risultati saranno simili all'esempio seguente. Per assicurarsi che la distribuzione sia riuscita, controllare il valore "provisioningState".

    {- Finished ..
      "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/learn-159e2742-d3a1-4e71-84a3-16e19830242b/providers/Microsoft.Resources/deployments/DeployLocalTemplate-3-2020-08-19",
      "location": null,
      "name": "DeployLocalTemplate-3-2020-08-19",
      "properties": {
        "correlationId": "f127f689-badf-4063-ad55-dff549e63e48",
        "debugSetting": null,
        "dependencies": [
          {
            "dependsOn": [
              {
                "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/learn-159e2742-d3a1-4e71-84a3-16e19830242b/providers/Microsoft.Resources/deployments/storage",
                "resourceGroup": "learn-159e2742-d3a1-4e71-84a3-16e19830242b",
                "resourceName": "storage",
                "resourceType": "Microsoft.Resources/deployments"
              }
            ],
            "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/learn-159e2742-d3a1-4e71-84a3-16e19830242b/providers/Microsoft.Resources/deployments/identity",
            "resourceGroup": "learn-159e2742-d3a1-4e71-84a3-16e19830242b",
            "resourceName": "identity",
            "resourceType": "Microsoft.Resources/deployments"
          }
        ],
        "duration": "PT16.4639167S",
        "error": null,
        "mode": "Incremental",
        "onErrorDeployment": null,
        "outputResources": [
          {
            "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/learn-159e2742-d3a1-4e71-84a3-16e19830242b/providers/Microsoft.Network/virtualNetworks/vnet-001",
            "resourceGroup": "learn-159e2742-d3a1-4e71-84a3-16e19830242b"
          },
          {
            "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/learn-159e2742-d3a1-4e71-84a3-16e19830242b/providers/Microsoft.Storage/storageAccounts/store7zk7eyqew54l4",
            "resourceGroup": "learn-159e2742-d3a1-4e71-84a3-16e19830242b"
          }
        ],
        "outputs": {},
        "parameters": {
          "name": {
            "type": "String",
            "value": "linkeddemo001"
          }
        },
        "parametersLink": null,
        "providers": [
          {
            "id": null,
            "namespace": "Microsoft.Resources",
            "registrationPolicy": null,
            "registrationState": null,
            "resourceTypes": [
              {
                "aliases": null,
                "apiVersions": null,
                "capabilities": null,
                "locations": [
                  null
                ],
                "properties": null,
                "resourceType": "deployments"
              }
            ]
          }
        ],
        "provisioningState": "Succeeded",
        "templateHash": "12700491000282730217",
        "templateLink": null,
        "timestamp": "2020-08-19T21:07:18.729310+00:00",
        "validatedResources": null
      },
      "resourceGroup": "learn-159e2742-d3a1-4e71-84a3-16e19830242b",
      "tags": null,
      "type": "Microsoft.Resources/deployments"
    }
    
  5. Convalidare i risultati.

    1. Passare al portale di Azure e assicurarsi di trovarsi nella sottoscrizione dell'ambiente sandbox. A tale scopo, selezionare l'avatar nell'angolo superiore destro della pagina. Selezionare Cambia directory. Nell'elenco scegliere la directory Microsoft Learn Sandbox.

    2. Nel riquadro a sinistra selezionare Gruppi di risorse.

    3. Selezionare [nome gruppo di risorse sandbox].

    4. Nell'area Panoramica è possibile osservare che la distribuzione ha avuto esito positivo. Selezionare 3 Riuscita per visualizzare i dettagli della distribuzione. Possono essere presenti più distribuzioni completate a seconda che siano stati eseguiti o meno gli esercizi dell'unità precedente.

    Interfaccia del portale di Azure per le distribuzioni con una distribuzione completata.

    Si noterà che è stato distribuito un modello, ma nel riquadro relativo alle distribuzioni del portale ne sono elencati tre. Queste tre distribuzioni corrispondono al modello principale e ai due modelli collegati.

    Interfaccia del portale di Azure per la distribuzione specifica senza risorse elencate.