Esercizio - Aggiungere parametri e output al modello di Azure Resource Manager

Completato

In questo esercizio viene aggiunto un parametro per definire il nome dell'account di archiviazione di Azure durante la distribuzione. Viene quindi aggiunto un parametro per definire lo SKU dell'account di archiviazione autorizzato e quale usare per la distribuzione. È anche possibile aumentare l'utilità del modello di Azure Resource Manager (modello di ARM) aggiungendo un output utilizzabile in un secondo momento nel processo di distribuzione.

Creare parametri per il modello di Resource Manager

In questo esempio il modello di Resource Manager viene reso più flessibile aggiungendo parametri che possono essere impostati in fase di esecuzione. Creare un parametro per il valore storageName.

  1. Nel file azuredeploy.json in Visual Studio Code posizionare il cursore all'interno delle parentesi graffe nell'attributo parameters. Ha questo aspetto: "parameters":{},

  2. Premere INVIO e quindi immettere par. Viene visualizzato un elenco dei frammenti di codice correlati. Scegliere new-parameter, che aggiunge un parametro generico al modello. L'esempio è simile al seguente:

     "parameters": {
        "parameter1": {
        "type": "string",
        "metadata": {
            "description": "description"
        }
      }
    },
    
  3. Modificare il parametro da parameter1 a storageName e mantenere il tipo come string. Aggiungere un valore minLength pari a 3 e un valore maxLength di 24. Aggiungere un valore Nome della risorsa di archiviazione di Azure per la descrizione.

  4. Il blocco di parametri dovrebbe ora essere simile all'esempio seguente:

    "parameters": {
      "storageName": {
        "type": "string",
        "minLength": 3,
        "maxLength": 24,
        "metadata": {
          "description": "The name of the Azure storage resource"
        }
      }
    },
    
  5. Usare il nuovo parametro nel blocco resources nei valori name e displayName. L'intero file è simile a questo esempio di codice:

    {
      "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "storageName": {
          "type": "string",
          "minLength": 3,
          "maxLength": 24,
          "metadata": {
            "description": "The name of the Azure storage resource"
          }
        }
      },
      "functions": [],
      "variables": {},
      "resources": [
        {
          "type": "Microsoft.Storage/storageAccounts",
          "apiVersion": "2023-05-01",
          "name": "[parameters('storageName')]",
          "tags": {
            "displayName": "[parameters('storageName')]"
          },
          "location": "[resourceGroup().location]",
          "kind": "StorageV2",
          "sku": {
            "name": "Standard_LRS"
          }
        }
      ],
      "outputs": {}
    }
    
  6. Salvare il file.

Distribuire il modello di Resource Manager con parametri

In questo esempio si modifica il nome della distribuzione in modo da rispecchiare meglio l'obiettivo della distribuzione e si immette un valore per il nuovo parametro.

Eseguire i comandi dell'interfaccia della riga di comando di Azure seguenti nel terminale. Questo frammento è lo stesso codice usato in precedenza, ma il nome della distribuzione è cambiato. Specificare un nome univoco per il parametro storageName. Non dimenticare che il nome deve essere univoco in Azure. È possibile usare il nome univoco creato nell'ultima unità. In tal caso, Azure aggiorna la risorsa invece di crearne una nuova.

templateFile="azuredeploy.json"
today=$(date +"%d-%b-%Y")
DeploymentName="addnameparameter-"$today

az deployment group create \
  --name $DeploymentName \
  --template-file $templateFile \
  --parameters storageName={your-unique-name}

Eseguire i comandi di Azure PowerShell seguenti nel terminale. Questo frammento è lo stesso codice usato in precedenza, ma il nome della distribuzione è cambiato. Specificare un nome univoco per il parametro storageName. Non dimenticare che il nome deve essere univoco in Azure. È possibile usare il nome univoco creato nell'ultima unità. In tal caso, Azure aggiorna la risorsa invece di crearne una nuova.

$templateFile="azuredeploy.json"
$today=Get-Date -Format "MM-dd-yyyy"
$deploymentName="addnameparameter-"+"$today"
New-AzResourceGroupDeployment `
  -Name $deploymentName `
  -TemplateFile $templateFile `
  -storageName {your-unique-name}

Controllare la distribuzione

  1. Al termine della distribuzione, tornare al portale di Azure nel browser. Passare al gruppo di risorse e osservare che ora sono presenti 3 distribuzioni completate. Selezionare il collegamento.

    Si noti che tutte e tre le distribuzioni sono presenti nell'elenco.

  2. Esplorare la distribuzione addnameparameter come è stato fatto in precedenza.

Aggiungere un altro parametro per limitare i valori consentiti

In questo esempio si usano i parametri per limitare i valori consentiti per un parametro.

  1. Posizionare il cursore dopo la parentesi graffa di chiusura per il parametro storageName. Aggiungere una virgola e premere INVIO.

  2. Immettere nuovamente par e selezionare new-parameter.

  3. Modificare il nuovo parametro generico nel codice seguente:

    "storageSKU": {
       "type": "string",
       "defaultValue": "Standard_LRS",
       "allowedValues": [
         "Standard_LRS",
         "Standard_GRS",
         "Standard_RAGRS",
         "Standard_ZRS",
         "Premium_LRS",
         "Premium_ZRS",
         "Standard_GZRS",
         "Standard_RAGZRS"
       ]
     }
    

    In questo caso vengono elencati i valori consentiti da questo parametro. Se il modello viene eseguito con un valore non consentito, la distribuzione ha esito negativo.

  4. Aggiungere un commento a questo parametro.

    Screenshot del file azuredeploy.json che visualizza il commento

    I modelli di Azure Resource Manager supportano i commenti // e /* */.

  5. Aggiornare resources in modo da usare il parametro storageSKU. Se si sfrutta IntelliSense in Visual Studio Code, questo passaggio viene semplificato.

    "sku": {
         "name": "[parameters('storageSKU')]"
       }
    

    L'intero file è simile a questo esempio di codice:

    {
      "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "storageName": {
          "type": "string",
          "minLength": 3,
          "maxLength": 24,
          "metadata": {
            "description": "The name of the Azure storage resource"
          }
        },
        "storageSKU": {
          "type": "string",
          "defaultValue": "Standard_LRS",
          "allowedValues": [
            "Standard_LRS",
            "Standard_GRS",
            "Standard_RAGRS",
            "Standard_ZRS",
            "Premium_LRS",
            "Premium_ZRS",
            "Standard_GZRS",
            "Standard_RAGZRS"
          ]
        }
      },
      "functions": [],
      "variables": {},
      "resources": [
        {
          "type": "Microsoft.Storage/storageAccounts",
          "apiVersion": "2023-05-01",
          "name": "[parameters('storageName')]",
          "tags": {
            "displayName": "[parameters('storageName')]"
          },
          "location": "[resourceGroup().location]",
          "kind": "StorageV2",
          "sku": {
            "name": "[parameters('storageSKU')]"
          }
        }
      ],
      "outputs": {}
    }
    
  6. Salvare il file.

Distribuire il modello di Resource Manager

In questo esempio viene eseguita la distribuzione usando un parametro storageSKU presente nell'elenco dei parametri consentiti. Successivamente, si cerca di distribuire il modello usando un parametro storageSKU non incluso nell'elenco dei parametri consentiti. La seconda distribuzione ha esito negativo come previsto.

  1. Distribuire il modello eseguendo i comandi seguenti. Specificare un nome univoco per il parametro storageName. Non dimenticare che il nome deve essere univoco in Azure. È possibile usare il nome univoco creato nell'ultima sezione. In tal caso, Azure aggiorna la risorsa invece di crearne una nuova.

    templateFile="azuredeploy.json"
    today=$(date +"%d-%b-%Y")
    DeploymentName="addSkuParameter-"$today
    
    az deployment group create \
      --name $DeploymentName \
      --template-file $templateFile \
      --parameters storageSKU=Standard_GRS storageName={your-unique-name}
    

    Lasciare che la distribuzione venga completata. La distribuzione ha esito positivo come previsto. L'elenco di valori consentiti impedisce agli utenti del modello di passare valori dei parametri che non possono essere utilizzati per la risorsa. Si vedrà ora cosa accade quando si specifica uno SKU non valido.

  2. Eseguire i comandi seguenti per distribuire il modello con un parametro non consentito. In questo esempio il parametro storageSKU è stato modificato in Basic. Specificare un nome univoco per il parametro storageName. Non dimenticare che il nome deve essere univoco in Azure. È possibile usare il nome univoco creato nell'ultima sezione. In tal caso, Azure aggiorna la risorsa invece di crearne una nuova.

    templateFile="azuredeploy.json"
    today=$(date +"%d-%b-%Y")
    DeploymentName="addSkuParameter-"$today
    
    az deployment group create \
      --name $DeploymentName \
      --template-file $templateFile \
      --parameters storageSKU=Basic storageName={your-unique-name}
    

    La distribuzione ha esito negativo. Si noti l'errore.

    Screenshot della finestra del terminale che mostra l'errore di convalida della distribuzione.

  1. Distribuire il modello eseguendo i comandi seguenti. Specificare un nome univoco per il parametro storageName. Non dimenticare che il nome deve essere univoco in Azure. È possibile usare il nome univoco creato nell'ultima sezione. In tal caso, Azure aggiorna la risorsa invece di crearne una nuova.

    $today=Get-Date -Format "MM-dd-yyyy"
    $deploymentName="addSkuParameter-"+"$today"
    New-AzResourceGroupDeployment `
      -Name $deploymentName `
      -TemplateFile $templateFile `
      -storageName {your-unique-name} `
      -storageSKU Standard_GRS
    

    Lasciare che la distribuzione venga completata. La distribuzione ha esito positivo come previsto. L'elenco di valori consentiti impedisce agli utenti del modello di passare valori dei parametri che non possono essere utilizzati per la risorsa. Si vedrà ora cosa accade quando si specifica uno SKU non valido.

  2. Eseguire i comandi seguenti per distribuire il modello con un parametro non consentito. In questo esempio il parametro storageSKU è stato modificato in Basic. Specificare un nome univoco per il parametro storageName. Non dimenticare che il nome deve essere univoco in Azure. È possibile usare il nome univoco creato nell'ultima sezione. In tal caso, Azure aggiorna la risorsa invece di crearne una nuova.

    $today=Get-Date -Format "MM-dd-yyyy"
    $deploymentName="addSkuParameter-"+"$today"
    New-AzResourceGroupDeployment `
      -Name $deploymentName `
      -TemplateFile $templateFile `
      -storageName {your-unique-name} `
      -storageSKU Basic
    

    La distribuzione ha esito negativo. Si noti l'errore.

    Screenshot della finestra del terminale che mostra l'errore di convalida della distribuzione.

Aggiungere l'output al modello di Resource Manager

In questo esempio viene aggiunta la sezione outputs del modello di Azure Resource Manager in modo che vengano restituiti gli endpoint per la risorsa dell'account di archiviazione.

  1. Nel file azuredeploy.json in Visual Studio Code posizionare il cursore all'interno delle parentesi graffe nell'attributo outputs "outputs":{},.

  2. Premere INVIO e quindi digitare out. Si ottiene un elenco dei frammenti correlati. Selezionare new-output. Aggiunge un output generico al modello simile all'esempio seguente:

    "outputs": {
      "output1": {
        "type": "string",
        "value": "value"
      }
    
  3. Modificare "output1" in "storageEndpoint", quindi modificare il valore di type in "object". Modificare il valore di value in "[reference(parameters('storageName')).primaryEndpoints]". Questa espressione è quella descritta nell'unità precedente che ottiene i dati dell'endpoint. Poiché è stato specificato object come tipo,l'oggetto verrà restituito in formato JSON.

    "outputs": {
      "storageEndpoint": {
        "type": "object",
        "value": "[reference(parameters('storageName')).primaryEndpoints]"
      }
    
  4. Salvare il file.

Distribuire il modello di Resource Manager con un output

In questo esempio si distribuisce il modello e si visualizza l'output degli endpoint come JSON. È necessario specificare un nome univoco per il parametro storageName. Non dimenticare che il nome deve essere univoco in Azure. È possibile usare il nome univoco creato nell'ultima sezione. In tal caso, Azure aggiorna la risorsa invece di crearne una nuova.

  1. Distribuire il modello eseguendo i comandi seguenti. Assicurarsi di sostituire {your-unique-name} con una stringa univoca.

    templateFile="azuredeploy.json"
    today=$(date +"%d-%b-%Y")
    DeploymentName="addoutputs-"$today
    
    az deployment group create \
      --name $DeploymentName \
      --template-file $templateFile \
      --parameters storageSKU=Standard_LRS storageName={your-unique-name}
    

    Si noti l'output.

    Screenshot della finestra del terminale che mostra l'output degli endpoint primari come JSON.

  1. Distribuire il modello eseguendo i comandi seguenti. Assicurarsi di sostituire {your-unique-name} con una stringa univoca.

    $today=Get-Date -Format "MM-dd-yyyy"
    $deploymentName="addOutputs-"+"$today"
    New-AzResourceGroupDeployment `
      -Name $deploymentName `
      -TemplateFile $templateFile `
      -storageName {your-unique-name} `
      -storageSKU Standard_LRS
    

    Si noti l'output.

    Screenshot della finestra del terminale che mostra l'output degli endpoint primari come JSON.

Controllare la distribuzione dell'output

Nel portale di Azure passare alla distribuzione addOutputs. È possibile trovare l'output anche qui.

Screenshot del portale di Azure che mostra la selezione dell'output nel menu a sinistra.