Share via


Esercitazione: Usare file di parametri per distribuire il modello di Resource Manager

Questa esercitazione illustra come usare i file di parametri per archiviare i valori passati durante la distribuzione. Nelle esercitazioni precedenti sono stati usati parametri inline con il comando di distribuzione. Questo approccio ha funzionato per il test del modello di Azure Resource Manager, ma quando si automatizzano le distribuzioni può risultare più agevole passare un set di valori per l'ambiente. I file di parametri semplificano la creazione di un pacchetto di valori di parametri per un ambiente specifico. In questa esercitazione si creeranno file di parametri per gli ambienti di sviluppo e di produzione. Per completare l'esercitazione sono necessari 12 minuti.

Prerequisiti

È consigliabile, ma non obbligatorio, completare l'esercitazione sui tag.

È necessario aver installato Visual Studio Code con l'estensione Strumenti di Resource Manager e Azure PowerShell o l'interfaccia della riga di comando di Azure (CLI). Per altre informazioni, vedere gli strumenti per i modelli.

Rivedere il modello

Il modello include numerosi parametri che è possibile specificare durante la distribuzione. Al termine della precedente esercitazione, il modello includeva il seguente codice JSON:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storagePrefix": {
      "type": "string",
      "minLength": 3,
      "maxLength": 11
    },
    "storageSKU": {
      "type": "string",
      "defaultValue": "Standard_LRS",
      "allowedValues": [
        "Standard_LRS",
        "Standard_GRS",
        "Standard_RAGRS",
        "Standard_ZRS",
        "Premium_LRS",
        "Premium_ZRS",
        "Standard_GZRS",
        "Standard_RAGZRS"
      ]
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    },
    "appServicePlanName": {
      "type": "string",
      "defaultValue": "exampleplan"
    },
    "webAppName": {
      "type": "string",
      "metadata": {
        "description": "Base name of the resource such as web app name and app service plan "
      },
      "minLength": 2
    },
    "linuxFxVersion": {
      "type": "string",
      "defaultValue": "php|7.0",
      "metadata": {
        "description": "The Runtime stack of current web app"
      }
    },
    "resourceTags": {
      "type": "object",
      "defaultValue": {
        "Environment": "Dev",
        "Project": "Tutorial"
      }
    }
  },
  "variables": {
    "uniqueStorageName": "[concat(parameters('storagePrefix'), uniqueString(resourceGroup().id))]",
    "webAppPortalName": "[concat(parameters('webAppName'), uniqueString(resourceGroup().id))]"
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-09-01",
      "name": "[variables('uniqueStorageName')]",
      "location": "[parameters('location')]",
      "tags": "[parameters('resourceTags')]",
      "sku": {
        "name": "[parameters('storageSKU')]"
      },
      "kind": "StorageV2",
      "properties": {
        "supportsHttpsTrafficOnly": true
      }
    },
    {
      "type": "Microsoft.Web/serverfarms",
      "apiVersion": "2021-03-01",
      "name": "[parameters('appServicePlanName')]",
      "location": "[parameters('location')]",
      "tags": "[parameters('resourceTags')]",
      "sku": {
        "name": "B1",
        "tier": "Basic",
        "size": "B1",
        "family": "B",
        "capacity": 1
      },
      "kind": "linux",
      "properties": {
        "perSiteScaling": false,
        "reserved": true,
        "targetWorkerCount": 0,
        "targetWorkerSizeId": 0
      }
    },
    {
      "type": "Microsoft.Web/sites",
      "apiVersion": "2021-03-01",
      "name": "[variables('webAppPortalName')]",
      "location": "[parameters('location')]",
      "dependsOn": [
        "[parameters('appServicePlanName')]"
      ],
      "tags": "[parameters('resourceTags')]",
      "kind": "app",
      "properties": {
        "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', parameters('appServicePlanName'))]",
        "siteConfig": {
          "linuxFxVersion": "[parameters('linuxFxVersion')]"
        }
      }
    }
  ],
  "outputs": {
    "storageEndpoint": {
      "type": "object",
      "value": "[reference(variables('uniqueStorageName')).primaryEndpoints]"
    }
  }
}

Questo modello funziona correttamente, ma ora si vogliono gestire facilmente i parametri passati per il modello.

Aggiungere file di parametri

I file di parametri sono file JSON con una struttura simile a quella del modello. Nel file è possibile specificare i valori dei parametri da passare durante la distribuzione.

Nel file di parametri specificare i valori per i parametri del modello. Il nome di ogni parametro nel file dei parametri deve corrispondere al nome di un parametro nel modello. Il nome non fa distinzione tra maiuscole/minuscole, ma per vedere facilmente i valori corrispondenti, è consigliabile usare la stessa combinazione del modello.

Non è necessario specificare un valore per ogni parametro. Se un parametro non specificato ha un valore predefinito, verrà usato durante la distribuzione. Se un parametro non ha un valore predefinito e non viene specificato nel file di parametri, viene chiesto di specificarlo durante la distribuzione.

Nel file di parametri non è possibile specificare un nome di parametro che non corrisponde a un nome di parametro nel modello. Quando si specificano parametri sconosciuti, si verifica un errore.

In Visual Studio Code, creare un nuovo file con il seguente contenuto. Salvare il file con il nome azuredeploy.parameters.dev.json.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storagePrefix": {
      "value": "devstore"
    },
    "storageSKU": {
      "value": "Standard_LRS"
    },
    "appServicePlanName": {
      "value": "devplan"
    },
    "webAppName": {
      "value": "devapp"
    },
    "resourceTags": {
      "value": {
        "Environment": "Dev",
        "Project": "Tutorial"
      }
    }
  }
}

Questo è il file di parametri per l'ambiente di sviluppo. Si noti che usa Standard_LRS come account di archiviazione, aggiunge il prefisso dev alle risorse e imposta il tag Environment su Dev.

Creare un nuovo file con il contenuto seguente. Salvare il file con il nome azuredeploy.parameters.prod.json.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storagePrefix": {
      "value": "contosodata"
    },
    "storageSKU": {
      "value": "Standard_GRS"
    },
    "appServicePlanName": {
      "value": "contosoplan"
    },
    "webAppName": {
      "value": "contosowebapp"
    },
    "resourceTags": {
      "value": {
        "Environment": "Production",
        "Project": "Tutorial"
      }
    }
  }
}

Questo è il file di parametri per l'ambiente di produzione. Si noti che usa Standard_GRS come account di archiviazione, aggiunge il prefisso contoso alle risorse e imposta il tag Environment su Production. In un ambiente di produzione reale, è consigliabile usare anche un servizio app con uno SKU diverso da quello gratuito, ma questa esercitazione userà lo SKU gratuito.

Distribuire un modello

Per distribuire il modello, usare l'interfaccia della riga di comando di Azure o Azure PowerShell.

Come test finale del modello, creare due nuovi gruppi di risorse, uno per l'ambiente di sviluppo e uno per l'ambiente di produzione.

Per le variabili di modelli e parametri, sostituire {path-to-the-template-file}, {path-to-azuredeploy.parameters.dev.json}, {path-to-azuredeploy.parameters.prod.json} e le parentesi graffe {} con i percorsi dei file di modelli e parametri.

Prima di tutto, eseguire la distribuzione nell'ambiente di sviluppo.

$templateFile = "{path-to-the-template-file}"
$parameterFile="{path-to-azuredeploy.parameters.dev.json}"
New-AzResourceGroup `
  -Name myResourceGroupDev `
  -Location "East US"
New-AzResourceGroupDeployment `
  -Name devenvironment `
  -ResourceGroupName myResourceGroupDev `
  -TemplateFile $templateFile `
  -TemplateParameterFile $parameterFile

A questo punto, eseguire la distribuzione nell'ambiente di produzione.

$parameterFile="{path-to-azuredeploy.parameters.prod.json}"
New-AzResourceGroup `
  -Name myResourceGroupProd `
  -Location "West US"
New-AzResourceGroupDeployment `
  -Name prodenvironment `
  -ResourceGroupName myResourceGroupProd `
  -TemplateFile $templateFile `
  -TemplateParameterFile $parameterFile

Nota

Se la distribuzione fallisce, utilizzare l'opzione verbose per ottenere informazioni sulle risorse create. Usare l'opzione debug per ottenere ulteriori informazioni sul debug.

Verificare la distribuzione

Per verificare la distribuzione, esplorare i gruppi di risorse nel portale di Azure.

  1. Accedere al portale di Azure.
  2. Nel menu di sinistra selezionare Gruppi di risorse.
  3. Vengono visualizzati i due nuovi gruppi di risorse distribuiti in questa esercitazione.
  4. Selezionare uno dei gruppi di risorse e visualizzare le risorse distribuite. Si noti che le risorse corrispondono ai valori specificati nel file di parametri per tale ambiente.

Pulire le risorse

  1. Nel portale di Azure selezionare Gruppi di risorse nel menu a sinistra.

  2. Selezionare il nome del gruppo di risorse con collegamento ipertestuale accanto alla casella di controllo. Se questa serie è stata completata, eliminare tre gruppi di risorse: myResourceGroup, myResourceGroupDev e myResourceGroupProd.

  3. Selezionare l'icona Elimina gruppo di risorse dal menu in alto.

    Attenzione

    L'eliminazione di un gruppo di risorse è irreversibile.

  4. Digitare il nome del gruppo di risorse nella finestra popup che è comparsa e selezionare Elimina.

Passaggi successivi

Congratulazioni. L'introduzione alla distribuzione di modelli in Azure è stata completata. Usare la sezione dei commenti per inviare eventuali commenti e suggerimenti.

La serie di esercitazioni successiva illustra in modo più dettagliato la distribuzione dei modelli.