Aggiungere flessibilità al modello di Azure Resource Manager usando parametri e output

Completato

Nell'ultima unità si è creato un modello di Azure Resource Manager (ARM) a cui è stato aggiunto un account di archiviazione di Azure. È possibile che si sia notato un problema con il modello. Il nome dell'account di archiviazione è hardcoded. Questo modello può quindi essere usato solo per distribuire ogni volta lo stesso account di archiviazione. Per distribuire un account di archiviazione con un nome diverso, è necessario creare un nuovo modello, ma questo non è un modo pratico per automatizzare le distribuzioni. Anche lo SKU dell'account di archiviazione è hardcoded, il che significa che non è possibile variare il tipo di account di archiviazione per ambienti diversi. Tenere presente che in questo scenario ogni distribuzione può avere un diverso tipo di account di archiviazione. È possibile rendere più riutilizzabile il modello aggiungendo un parametro per lo SKU dell'account di archiviazione.

In questa unità vengono illustrate le sezioni parametri e output del modello.

Parametri del modello di Azure Resource Manager

I parametri del modello di Azure Resource Manager consentono di personalizzare la distribuzione fornendo valori personalizzati per un ambiente specifico. Ad esempio, si passano valori diversi a seconda che si stia eseguendo la distribuzione in un ambiente per sviluppo, test, produzione o altro. Ad esempio, il modello precedente usa lo SKU dell'account di archiviazione Standard_LRS. È possibile riutilizzare questo modello per altre distribuzioni che creano un account di archiviazione trasformando in parametro il nome dello SKU dell'account di archiviazione. Si passa quindi il nome dello SKU desiderato per questa particolare distribuzione quando viene distribuito il modello. Questa procedura può essere eseguita dalla riga di comando o tramite un file dei parametri.

Nella sezione parameters del modello specificare i valori che è possibile immettere durante la distribuzione delle risorse. È previsto un limite di 256 parametri in un modello. Le definizioni di parametro possono usare la maggior parte delle funzioni del modello.

Le proprietà disponibili per un parametro sono:

"parameters": {
  "<parameter-name>": {
    "type": "<type-of-parameter-value>",
    "defaultValue": "<default-value-of-parameter>",
    "allowedValues": [
      "<array-of-allowed-values>"
    ],
    "minValue": <minimum-value-for-int>,
    "maxValue": <maximum-value-for-int>,
    "minLength": <minimum-length-for-string-or-array>,
    "maxLength": <maximum-length-for-string-or-array-parameters>,
    "metadata": {
      "description": "<description-of-the-parameter>"
    }
  }
}

I tipi di parametri consentiti sono:

  • stringa
  • secureString
  • integer
  • boolean
  • oggetto
  • secureObject
  • array

Raccomandazioni per l'uso dei parametri

Usare i parametri per impostazioni che variano in base all'ambiente, ad esempio SKU, dimensioni o capacità. Usare i parametri anche per i nomi di risorse che si desidera specificare per facilitarne l'identificazione o per rispettare le convenzioni di denominazione interne. Specificare una descrizione per ogni parametro e usare i valori predefiniti quando possibile.

Per motivi di sicurezza, non rendere mai hardcoded né fornire valori predefiniti per nomi utente e/o password nei modelli. Usare sempre i parametri per nomi utente e password (o segreti). Usare secureString per tutte le password e i segreti. Se si passano dati sensibili in un oggetto JSON, usare il tipo secureObject. I parametri di modello con i tipi secureString o secureObject non possono essere letti o raccolti dopo la distribuzione della risorsa.

Usare i parametri in un modello di Azure Resource Manager

Nella sezione parametri del modello di Azure Resource Manager specificare i parametri che si possono immettere durante la distribuzione delle risorse. È previsto un limite di 256 parametri in un modello.

Di seguito è riportato un esempio di file modello con un parametro per lo SKU dell'account di archiviazione definito nella sezione parameters del modello. È possibile specificare un valore predefinito per il parametro da usare se non viene specificato alcun valore in fase di esecuzione.

"parameters": {
  "storageAccountType": {
    "type": "string",
    "defaultValue": "Standard_LRS",
    "allowedValues": [
      "Standard_LRS",
      "Standard_GRS",
      "Standard_ZRS",
      "Premium_LRS"
    ],
    "metadata": {
      "description": "Storage Account type"
    }
  }
}

Usare quindi il parametro nella definizione della risorsa. La sintassi è [parameters('name of the parameter')]. Si userà la funzione parameters. Altre informazioni sulle funzioni saranno disponibili nel modulo successivo.

"resources": [
  {
    "type": "Microsoft.Storage/storageAccounts",
    "apiVersion": "2019-04-01",
    "name": "learntemplatestorage123",
    "location": "[resourceGroup().location]",
    "sku": {
      "name": "[parameters('storageAccountType')]"
    },
    "kind": "StorageV2",
    "properties": {
      "supportsHttpsTrafficOnly": true
    }
  }
]

Quando si distribuisce il modello, è possibile fornire un valore per il parametro. Si noti l'ultima riga del comando seguente:

templateFile="azuredeploy.json"
az deployment group create \
  --name testdeployment1 \
  --template-file $templateFile \
  --parameters storageAccountType=Standard_LRS

Output del modello di Azure Resource Manager

Nella sezione output del modello di Azure Resource Manager è possibile specificare i valori che verranno restituiti dopo il completamento di una distribuzione. Ecco gli elementi che costituiscono la sezione outputs.

"outputs": {
  "<output-name>": {
    "condition": "<boolean-value-whether-to-output-value>",
    "type": "<type-of-output-value>",
    "value": "<output-value-expression>",
    "copy": {
      "count": <number-of-iterations>,
      "input": <values-for-the-variable>
    }
  }
}
Elemento Descrizione
output-name deve essere un identificatore JavaScript valido.
condition (facoltativo) valore booleano che indica se questo valore di output viene restituito. Se è true, il valore viene incluso nell'output per la distribuzione. Se è false, il valore di output viene ignorato per questa distribuzione. Quando non è specificato, il valore predefinito è true.
type tipo del valore di output.
value (facoltativo) espressione del linguaggio del modello valutata e restituita come valore di output.
copy (facoltativo) usato per restituire più valori per un output.

Usare gli output in un modello di Azure Resource Manager

Di seguito è riportato un esempio per restituire gli endpoint dell'account di archiviazione:

"outputs": {
  "storageEndpoint": {
    "type": "object",
    "value": "[reference('learntemplatestorage123').primaryEndpoints]"
  }
}

Si noti la parte reference dell'espressione. Questa funzione ottiene lo stato di runtime dell'account di archiviazione.

Distribuire nuovamente un modello di Azure Resource Manager

Tenere presente che i modelli di Azure Resource Manager sono idempotenti, vale a dire che è possibile distribuire nuovamente il modello nello stesso ambiente e, nel caso in cui non siano state apportate modifiche al modello, l'ambiente non verrà modificato. Se è stata introdotta una modifica nel modello, ad esempio si è cambiato il valore di un parametro, verrà distribuita solo quella modifica. Il modello può contenere tutte le risorse necessarie per la soluzione di Azure ed è possibile eseguire nuovamente un modello in tutta sicurezza. Le risorse verranno create solo se non esistono già e verranno aggiornate solo se è stata apportata una modifica.