Creare e distribuire il primo modello di Azure Resource Manager

Questo argomento illustra la procedura per creare il primo modello di Azure Resource Manager. I modelli di Resource Manager sono file JSON che definiscono le risorse che è necessario distribuire per la soluzione. Per comprendere i concetti associati alla distribuzione e alla gestione delle soluzioni di Azure, vedere Panoramica di Azure Resource Manager. Se si vuole ottenere un modello per risorse esistenti, vedere Esportare un modello di Azure Resource Manager da risorse esistenti.

Per creare e modificare i modelli, è necessario un editor JSON. Visual Studio Code è un editor di codice, leggero, open source e multipiattaforma. È consigliabile usare Visual Studio Code per la creazione di modelli di Resource Manager. Questo articolo presuppone che si usi Visual Studio Code. Se tuttavia si ha un altro editor JSON (ad esempio Visual Studio), è possibile usare tale editor.

Prerequisiti

Creare il modello

Iniziare dalla creazione di un modello semplice che consente di distribuire un account di archiviazione nella sottoscrizione.

  1. Selezionare File > Nuovo file.

    Nuovo file

  2. Copiare e incollare nel file la sintassi JSON seguente:

    {
      "$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. Il nome deve essere di lunghezza compresa tra 3 e 24 caratteri, contenere solo numeri e lettere minuscole ed essere univoco. Il modello precedente usa la funzione uniqueString per generare un valore hash. Per dare più significato a questo valore hash, aggiunge il prefisso storage.

  3. Salvare il file con il nome azuredeploy.json in una cartella locale.

    Salvare il modello

Distribuire il modello

A questo punto è possibile distribuire il modello. Usare PowerShell o l'interfaccia della riga di comando di Azure per creare un gruppo di risorse. Distribuire quindi un account di archiviazione nel nuovo gruppo di risorse.

  • Per PowerShell, usare i comandi seguenti dalla cartella che contiene il modello:

    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:

    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.

Distribuire il modello da Cloud Shell

È possibile usare Cloud Shell per distribuire il modello. Tuttavia, è prima necessario caricare il modello nella condivisione file per Cloud Shell. Per informazioni sulla configurazione di Cloud Shell per il primo utilizzo, vedere Panoramica di Azure Cloud Shell.

  1. Accedere al Portale di Azure.

  2. Selezionare il gruppo di risorse di Cloud Shell. Il modello del nome è cloud-shell-storage-<region>.

    Selezionare il gruppo di risorse

  3. Selezionare l'account di archiviazione per Cloud Shell.

    Selezionare l'account di archiviazione

  4. Selezionare File.

    Selezione dei file

  5. Selezionare la condivisione file per Cloud Shell. Il modello del nome è cs-<user>-<domain>-com-<uniqueGuid>.

    Selezionare la condivisione file

  6. Selezionare Aggiungi directory.

    Aggiungi directory

  7. Assegnare il nome templates e scegliere OK.

    Assegnare il nome alla directory

  8. Selezionare la nuova directory.

    Selezionare la directory

  9. Selezionare Carica.

    Selezionare Carica

  10. Trovare e caricare il modello.

    Caricare il file

  11. Aprire il prompt.

    Aprire Cloud Shell

Per l'interfaccia della riga di comando di Azure, eseguire i comandi seguenti:

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. Per PowerShell, usare i comandi seguenti:

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.

Personalizzare il modello

Il modello funziona correttamente, ma non è flessibile. Distribuisce sempre un'archiviazione con ridondanza locale nell'area degli Stati Uniti centro-meridionali. Il nome è sempre storage seguito da un valore hash. Per consentire l'uso del modello per diversi scenari, aggiungere parametri al modello.

L'esempio seguente mostra la sezione parametri con due parametri. Il primo parametro storageSKU consente di specificare il tipo di ridondanza. Limita i valori che è possibile passare ai valori validi per un account di archiviazione. Specifica anche un valore predefinito. Il secondo parametro storageNamePrefix viene impostato per consentire un massimo di 11 caratteri. Specifica un valore predefinito.

"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. Combina il valore del prefisso dei parametri e un valore hash della funzione uniqueString. Usa la funzione toLower per convertire tutti i caratteri in minuscolo.

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

Per usare i nuovi valori per l'account di archiviazione, modificare la definizione della risorsa:

"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. Il nome dello SKU è impostato sul valore del parametro. La posizione impostata è la stessa del gruppo di risorse.

Salvare il file.

Il modello si presenta ora come segue:

{
  "$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 modello

Ridistribuire il modello con valori diversi.

Per PowerShell, usare:

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

Per l'interfaccia della riga di comando di Azure usare:

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. Sovrascrivere il file esistente. Usare quindi il comando seguente:

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

Usare il completamento automatico

Fino ad ora, l'interazione con il modello ha previsto solo l'attività di copia/incolla del codice JSON riportato in questo articolo. Durante lo sviluppo di modelli personalizzati, si vuole tuttavia trovare e specificare le proprietà e i valori disponibili per il tipo di risorsa. Visual Studio Code legge lo schema per il tipo di risorsa e suggerisce proprietà e valori. Per visualizzare la funzionalità di completamento automatico, passare all'elemento properties del modello e aggiungere una nuova riga. Digitare le virgolette e notare che Visual Studio Code suggerisce immediatamente i nomi disponibili all'interno dell'elemento properties.

Visualizzare le proprietà disponibili

Selezionare encryption. Digitare i due punti (:). Visual Studio Code suggerirà l'aggiunta di un nuovo oggetto.

Aggiungere l'oggetto

Premere TAB o INVIO per aggiungere l'oggetto.

Digitare di nuovo le virgolette. Visual Studio Code suggerirà ora le proprietà disponibili per la crittografia.

Visualizzare le proprietà di crittografia

Selezionare services e continuare ad aggiungere valori basati sulle estensioni di Visual Studio Code fino a ottenere:

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

È stata abilitata la crittografia BLOB per l'account di archiviazione. Visual Studio Code ha identificato tuttavia un problema. Si noti che l'elemento encryption visualizza un avviso.

Avviso per l'elemento encryption

Per visualizzare l'avviso, passare il mouse sopra la linea verde.

Proprietà mancante

L'elemento encryption richiede una proprietà keySource. Aggiungere una virgola dopo l'oggetto services, quindi aggiungere la proprietà keySource. Visual Studio Code suggerisce "Microsoft.Storage" come valore valido. Al termine, l'elemento properties sarà:

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

Il modello finale sarà:

{
  "$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 crittografata

Distribuire il modello e specificare un nuovo nome di account di archiviazione.

Per PowerShell, usare:

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

Per l'interfaccia della riga di comando di Azure usare:

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

Per Cloud Shell, caricare il modello modificato nella condivisione file. Sovrascrivere il file esistente. Usare quindi il comando seguente:

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

Pulire le risorse

Quando non saranno più necessarie, eliminare le risorse distribuite eliminando il gruppo di risorse.

Per PowerShell, usare:

Remove-AzureRmResourceGroup -Name examplegroup

Per l'interfaccia della riga di comando di Azure usare:

az group delete --name examplegroup

Passaggi successivi