Creare e distribuire il primo modello di Azure Resource ManagerCreate and deploy your first Azure Resource Manager template

Questo argomento illustra la procedura per creare il primo modello di Azure Resource Manager.This topic walks you through the steps of creating your first Azure Resource Manager template. I modelli di Resource Manager sono file JSON che definiscono le risorse che è necessario distribuire per la soluzione.Resource Manager templates are JSON files that define the resources you need to deploy for your solution. Per comprendere i concetti associati alla distribuzione e alla gestione delle soluzioni di Azure, vedere Panoramica di Azure Resource Manager.To understand the concepts associated with deploying and managing your Azure solutions, see Azure Resource Manager overview. Se si vuole ottenere un modello per risorse esistenti, vedere Esportare un modello di Azure Resource Manager da risorse esistenti.If you have existing resources and want to get a template for those resources, see Export an Azure Resource Manager template from existing resources.

Per creare e modificare i modelli, è necessario un editor JSON.To create and revise templates, you need a JSON editor. Visual Studio Code è un editor di codice, leggero, open source e multipiattaforma.Visual Studio Code is a lightweight, open-source, cross-platform code editor. È consigliabile usare Visual Studio Code per la creazione di modelli di Resource Manager.We strongly recommend using Visual Studio Code for creating Resource Manager templates. Questo articolo presuppone che si usi Visual Studio Code.This article assumes you are using VS Code. Se tuttavia si ha un altro editor JSON (ad esempio Visual Studio), è possibile usare tale editor.If you have another JSON editor (like Visual Studio), you can use that editor.

PrerequisitiPrerequisites

Creare il modelloCreate template

Iniziare dalla creazione di un modello semplice che consente di distribuire un account di archiviazione nella sottoscrizione.Let's start with a simple template that deploys a storage account to your subscription.

  1. Selezionare File > Nuovo file.Select File > New File.

    Nuovo file

  2. Copiare e incollare nel file la sintassi JSON seguente:Copy and paste the following JSON syntax into your file:

    {
      "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
      },
      "variables": {
      },
      "resources": [
        {
          "name": "[concat('storage', uniqueString(resourceGroup().id))]",
          "type": "Microsoft.Storage/storageAccounts",
          "apiVersion": "2016-01-01",
          "sku": {
            "name": "Standard_LRS"
          },
          "kind": "Storage",
          "location": "South Central US",
          "tags": {},
          "properties": {}
        }
      ],
      "outputs": {  }
    }
    

    I nomi degli account di archiviazione sono soggetti a diverse restrizioni che ne complicano l'impostazione.Storage account names have several restrictions that make them difficult to set. Il nome deve essere di lunghezza compresa tra 3 e 24 caratteri, contenere solo numeri e lettere minuscole ed essere univoco.The name must be between 3 and 24 characters in length, use only numbers and lower-case letters, and be unique. Il modello precedente usa la funzione uniqueString per generare un valore hash.The preceding template uses the uniqueString function to generate a hash value. Per dare più significato a questo valore hash, aggiunge il prefisso storage.To give this hash value more meaning, it adds the prefix storage.

  3. Salvare il file con il nome azuredeploy.json in una cartella locale.Save this file as azuredeploy.json to a local folder.

    Salvare il modello

Distribuire il modelloDeploy template

A questo punto è possibile distribuire il modello.You are ready to deploy this template. Usare PowerShell o l'interfaccia della riga di comando di Azure per creare un gruppo di risorse.You use either PowerShell or Azure CLI to create a resource group. Distribuire quindi un account di archiviazione nel nuovo gruppo di risorse.Then, you deploy a storage account to that resource group.

  • Per PowerShell, usare i comandi seguenti dalla cartella che contiene il modello:For PowerShell, use the following commands from the folder containing the template:

    Login-AzureRmAccount
    
    New-AzureRmResourceGroup -Name examplegroup -Location "South Central US"
    New-AzureRmResourceGroupDeployment -ResourceGroupName examplegroup -TemplateFile azuredeploy.json
    
  • Per un'installazione locale dell'interfaccia della riga di comando di Azure, usare i comandi seguenti dalla cartella che contiene il modello:For a local installation of Azure CLI, use the following commands from the folder containing the template:

    az login
    
    az group create --name examplegroup --location "South Central US"
    az group deployment create --resource-group examplegroup --template-file azuredeploy.json
    

Al termine della distribuzione, il gruppo di risorse conterrà l'account di archiviazione.When deployment finishes, your storage account exists in the resource group.

Distribuire il modello da Cloud ShellDeploy template from Cloud Shell

È possibile usare Cloud Shell per distribuire il modello.You can use Cloud Shell to deploy your template. Tuttavia, è prima necessario caricare il modello nella condivisione file per Cloud Shell.However, you must first load your template into the file share for your Cloud Shell. Per informazioni sulla configurazione di Cloud Shell per il primo utilizzo, vedere Panoramica di Azure Cloud Shell.If you have not used Cloud Shell, see Overview of Azure Cloud Shell for information about setting it up.

  1. Accedere al Portale di Azure.Log in to the Azure portal.

  2. Selezionare il gruppo di risorse di Cloud Shell.Select your Cloud Shell resource group. Il modello del nome è cloud-shell-storage-<region>.The name pattern is cloud-shell-storage-<region>.

    Selezionare il gruppo di risorse

  3. Selezionare l'account di archiviazione per Cloud Shell.Select the storage account for your Cloud Shell.

    Selezionare l'account di archiviazione

  4. Selezionare File.Select Files.

    Selezione dei file

  5. Selezionare la condivisione file per Cloud Shell.Select the file share for Cloud Shell. Il modello del nome è cs-<user>-<domain>-com-<uniqueGuid>.The name pattern is cs-<user>-<domain>-com-<uniqueGuid>.

    Selezionare la condivisione file

  6. Selezionare Aggiungi directory.Select Add directory.

    Aggiungi directory

  7. Assegnare il nome templates e scegliere OK.Name it templates, and select Okay.

    Assegnare il nome alla directory

  8. Selezionare la nuova directory.Select your new directory.

    Selezionare la directory

  9. Selezionare Carica.Select Upload.

    Selezionare Carica

  10. Trovare e caricare il modello.Find and upload your template.

    Caricare il file

  11. Aprire il prompt.Open the prompt.

    Aprire Cloud Shell

Per l'interfaccia della riga di comando di Azure, eseguire i comandi seguenti:For Azure CLI, use the following commands:

az group create --name examplegroup --location "South Central US"
az group deployment create --resource-group examplegroup --template-file clouddrive/templates/azuredeploy.json

Attualmente, PowerShell è disponibile in Cloud Shell come anteprima.Currently, PowerShell is available in the Cloud Shell as a preview. Per PowerShell, usare i comandi seguenti:For PowerShell, use the following commands:

New-AzureRmResourceGroup -Name examplegroup -Location "South Central US"
New-AzureRmResourceGroupDeployment -ResourceGroupName examplegroup -TemplateFile $home\CloudDrive\templates\azuredeploy.json

Al termine della distribuzione, il gruppo di risorse conterrà l'account di archiviazione.When deployment finishes, your storage account exists in the resource group.

Personalizzare il modelloCustomize the template

Il modello funziona correttamente, ma non è flessibile.The template works fine, but it is not flexible. Distribuisce sempre un'archiviazione con ridondanza locale nell'area degli Stati Uniti centro-meridionali.It always deploys a locally redundant storage to South Central US. Il nome è sempre storage seguito da un valore hash.The name is always storage followed by a hash value. Per consentire l'uso del modello per diversi scenari, aggiungere parametri al modello.To enable using the template for different scenarios, add parameters to the template.

L'esempio seguente mostra la sezione parametri con due parametri.The following example shows the parameters section with two parameters. Il primo parametro storageSKU consente di specificare il tipo di ridondanza.The first parameter storageSKU enables you to specify the type of redundancy. Limita i valori che è possibile passare ai valori validi per un account di archiviazione.It limits the values you can pass in to values that are valid for a storage account. Specifica anche un valore predefinito.It also specifies a default value. Il secondo parametro storageNamePrefix viene impostato per consentire un massimo di 11 caratteri.The second parameter storageNamePrefix is set to allow a maximum of 11 characters. Specifica un valore predefinito.It specifies a default value.

"parameters": {
  "storageSKU": {
    "type": "string",
    "allowedValues": [
      "Standard_LRS",
      "Standard_ZRS",
      "Standard_GRS",
      "Standard_RAGRS",
      "Premium_LRS"
    ],
    "defaultValue": "Standard_LRS",
    "metadata": {
      "description": "The type of replication to use for the storage account."
    }
  },
  "storageNamePrefix": {
    "type": "string",
    "maxLength": 11,
    "defaultValue": "storage",
    "metadata": {
      "description": "The value to use for starting the storage account name. Use only lowercase letters and numbers."
    }
  }
},

Nella sezione variabili aggiungere una variabile denominata storageName.In the variables section, add a variable named storageName. Combina il valore del prefisso dei parametri e un valore hash della funzione uniqueString.It combines the prefix value from the parameters and a hash value from the uniqueString function. Usa la funzione toLower per convertire tutti i caratteri in minuscolo.It uses the toLower function to convert all characters to lowercase.

"variables": {
  "storageName": "[concat(toLower(parameters('storageNamePrefix')), uniqueString(resourceGroup().id))]"
},

Per usare i nuovi valori per l'account di archiviazione, modificare la definizione della risorsa:To use these new values for your storage account, change the resource definition:

"resources": [
  {
    "name": "[variables('storageName')]",
    "type": "Microsoft.Storage/storageAccounts",
    "apiVersion": "2016-01-01",
    "sku": {
      "name": "[parameters('storageSKU')]"
    },
    "kind": "Storage",
    "location": "[resourceGroup().location]",
    "tags": {},
    "properties": {}
  }
],

Si noti che il nome dell'account di archiviazione è ora impostato sulla variabile aggiunta.Notice that the name of the storage account is now set to the variable that you added. Il nome dello SKU è impostato sul valore del parametro.The SKU name is set to the value of the parameter. La posizione impostata è la stessa del gruppo di risorse.The location is set the same location as the resource group.

Salvare il file.Save your file.

Il modello si presenta ora come segue:Your template now looks like:

{
  "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storageSKU": {
      "type": "string",
      "allowedValues": [
        "Standard_LRS",
        "Standard_ZRS",
        "Standard_GRS",
        "Standard_RAGRS",
        "Premium_LRS"
      ],
      "defaultValue": "Standard_LRS",
      "metadata": {
        "description": "The type of replication to use for the storage account."
      }
    },   
    "storageNamePrefix": {
      "type": "string",
      "maxLength": 11,
      "defaultValue": "storage",
      "metadata": {
        "description": "The value to use for starting the storage account name. Use only lowercase letters and numbers."
      }
    }
  },
  "variables": {
    "storageName": "[concat(toLower(parameters('storageNamePrefix')), uniqueString(resourceGroup().id))]"
  },
  "resources": [
    {
      "name": "[variables('storageName')]",
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2016-01-01",
      "sku": {
        "name": "[parameters('storageSKU')]"
      },
      "kind": "Storage",
      "location": "[resourceGroup().location]",
      "tags": {},
      "properties": {}
    }
  ],
  "outputs": {  }
}

Ridistribuire il modelloRedeploy template

Ridistribuire il modello con valori diversi.Redeploy the template with different values.

Per PowerShell, usare:For PowerShell, use:

New-AzureRmResourceGroupDeployment -ResourceGroupName examplegroup -TemplateFile azuredeploy.json -storageNamePrefix newstore -storageSKU Standard_RAGRS

Per l'interfaccia della riga di comando di Azure usare:For Azure CLI, use:

az group deployment create --resource-group examplegroup --template-file azuredeploy.json --parameters storageSKU=Standard_RAGRS storageNamePrefix=newstore

Per Cloud Shell, caricare il modello modificato nella condivisione file.For the Cloud Shell, upload your changed template to the file share. Sovrascrivere il file esistente.Overwrite the existing file. Usare quindi il comando seguente:Then, use the following command:

az group deployment create --resource-group examplegroup --template-file clouddrive/templates/azuredeploy.json --parameters storageSKU=Standard_RAGRS storageNamePrefix=newstore

Usare il completamento automaticoUse autocomplete

Fino ad ora, l'interazione con il modello ha previsto solo l'attività di copia/incolla del codice JSON riportato in questo articolo.So far, your work on the template has consisted of only copying and pasting JSON from this article. Durante lo sviluppo di modelli personalizzati, si vuole tuttavia trovare e specificare le proprietà e i valori disponibili per il tipo di risorsa.However, when developing your own templates, you want to find and specify properties and values that are available for the resource type. Visual Studio Code legge lo schema per il tipo di risorsa e suggerisce proprietà e valori.VS Code reads the schema for the resource type, and suggests properties and values. Per visualizzare la funzionalità di completamento automatico, passare all'elemento properties del modello e aggiungere una nuova riga.To see the autocomplete feature, go the properties element of your template and add a new line. Digitare le virgolette e notare che Visual Studio Code suggerisce immediatamente i nomi disponibili all'interno dell'elemento properties.Type a quotation mark, and notice that VS Code immediately suggests names that available within the properties element.

Visualizzare le proprietà disponibili

Selezionare encryption.Select encryption. Digitare i due punti (:). Visual Studio Code suggerirà l'aggiunta di un nuovo oggetto.Type a colon (:), and VS Code suggests adding a new object.

Aggiungere l'oggetto

Premere TAB o INVIO per aggiungere l'oggetto.Press tab or enter to add the object.

Digitare di nuovo le virgolette. Visual Studio Code suggerirà ora le proprietà disponibili per la crittografia.Again, type a quotation mark, and see that VS Code now suggests properties that are available for encryption.

Visualizzare le proprietà di crittografia

Selezionare services e continuare ad aggiungere valori basati sulle estensioni di Visual Studio Code fino a ottenere:Select services and continue adding values based on VS Code extensions until you have:

"properties": {
    "encryption":{
        "services":{
            "blob":{
              "enabled":true
            }
        }
    }
}

È stata abilitata la crittografia BLOB per l'account di archiviazione.You have enabled blob encryption for the storage account. Visual Studio Code ha identificato tuttavia un problema.However, VS Code has identified a problem. Si noti che l'elemento encryption visualizza un avviso.Notice that encryption has a warning.

Avviso per l'elemento encryption

Per visualizzare l'avviso, passare il mouse sopra la linea verde.To see the warning, hover over the green line.

Proprietà mancante

L'elemento encryption richiede una proprietà keySource.You see that the encryption element requires a keySource property. Aggiungere una virgola dopo l'oggetto services, quindi aggiungere la proprietà keySource.Add a comma after the services object, and add the keySource property. Visual Studio Code suggerisce "Microsoft.Storage" come valore valido.VS Code suggests "Microsoft.Storage" as a valid value. Al termine, l'elemento properties sarà:When finished, the properties element is:

"properties": {
    "encryption":{
        "services":{
            "blob":{
              "enabled":true
            }
        },
        "keySource":"Microsoft.Storage"
    }
}

Il modello finale sarà:The final template is:

{
  "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storageSKU": {
      "type": "string",
      "allowedValues": [
        "Standard_LRS",
        "Standard_ZRS",
        "Standard_GRS",
        "Standard_RAGRS",
        "Premium_LRS"
      ],
      "defaultValue": "Standard_LRS",
      "metadata": {
        "description": "The type of replication to use for the storage account."
      }
    },   
    "storageNamePrefix": {
      "type": "string",
      "maxLength": 11,
      "defaultValue": "storage",
      "metadata": {
        "description": "The value to use for starting the storage account name. Use only lowercase letters and numbers."
      }
    }
  },
  "variables": {
    "storageName": "[concat(toLower(parameters('storageNamePrefix')), uniqueString(resourceGroup().id))]"
  },
  "resources": [
    {
      "name": "[variables('storageName')]",
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2016-01-01",
      "sku": {
        "name": "[parameters('storageSKU')]"
      },
      "kind": "Storage",
      "location": "[resourceGroup().location]",
      "tags": {},
      "properties": {
        "encryption":{
          "services":{
            "blob":{
              "enabled":true
            }
          },
          "keySource":"Microsoft.Storage"
        }
      }
    }
  ],
  "outputs": {}
}

Distribuire l'archiviazione crittografataDeploy encrypted storage

Distribuire il modello e specificare un nuovo nome di account di archiviazione.Again, deploy the template and provide a new storage account name.

Per PowerShell, usare:For PowerShell, use:

New-AzureRmResourceGroupDeployment -ResourceGroupName examplegroup -TemplateFile azuredeploy.json -storageNamePrefix storesecure

Per l'interfaccia della riga di comando di Azure usare:For Azure CLI, use:

az group deployment create --resource-group examplegroup --template-file azuredeploy.json --parameters storageNamePrefix=storesecure

Per Cloud Shell, caricare il modello modificato nella condivisione file.For the Cloud Shell, upload your changed template to the file share. Sovrascrivere il file esistente.Overwrite the existing file. Usare quindi il comando seguente:Then, use the following command:

az group deployment create --resource-group examplegroup --template-file clouddrive/templates/azuredeploy.json --parameters storageNamePrefix=storesecure

Pulire le risorseClean up resources

Quando non saranno più necessarie, eliminare le risorse distribuite eliminando il gruppo di risorse.When no longer needed, clean up the resources you deployed by deleting the resource group.

Per PowerShell, usare:For PowerShell, use:

Remove-AzureRmResourceGroup -Name examplegroup

Per l'interfaccia della riga di comando di Azure usare:For Azure CLI, use:

az group delete --name examplegroup

Passaggi successiviNext steps