Aggiungere flessibilità al modello di Azure Resource Manager usando le funzioni del modello

Completato

In questo scenario si vuole distribuire il modello di Azure Resource Manager (ARM) in diversi ambienti nel modo più semplice possibile. Uno degli aspetti più complessi è la creazione di un nome univoco per l'account di archiviazione di Azure.

Per risolvere il problema, si decide di creare un'espressione usando le funzioni del modello di Resource Manager.

Che cosa sono le funzioni del modello di Resource Manager?

Le funzioni del modello di Resource Manager aggiungono flessibilità al modello ottenendo dinamicamente i valori durante la distribuzione.

Per comprendere le funzioni, è prima di tutto necessario comprendere le espressioni. Le espressioni sono valori che vengono valutati quando viene distribuito il modello. Iniziano e terminano con parentesi [] e possono restituire una stringa, un valore Integer, un valore booleano, una matrice o un oggetto.

Nel modulo precedente di questo percorso di apprendimento sono già state usate le espressioni nel modello di Resource Manager. Ad esempio, si è usato il codice seguente:

"parameters": {
  "location": {
    "type": "string",
    "defaultValue": "[resourceGroup().location]"
  }
},

L'espressione è il valore dell'attributo defaultValue:. Si noti che questa espressione include la funzione del modello di Resource ManagerresourceGroup(). Questa funzione restituisce informazioni sul gruppo di risorse in cui viene distribuito il modello. .location recupera una proprietà dall'oggetto restituito dalla funzione. Le funzioni consentono di costruire in modo dinamico i valori necessari.

Come si usano le funzioni del modello di Resource Manager?

Quando si usano le funzioni, è necessario seguire alcune regole:

  • Quando si passa un valore stringa in una funzione, usare le virgolette singole. Ecco un esempio: concat('storage',uniqueString(resourceGroup().id)). La funzione è concat e la stringa passata alla funzione è 'storage'.

  • Per usare valori letterali nelle funzioni del modello, sono necessari caratteri di escape. Il carattere di escape è diverso a seconda del tipo di escape.

  • Per impostare una proprietà su Null, è possibile usare null o [json('null')]. La funzione JSON restituisce un oggetto vuoto quando si specifica Null come parametro.

    "stringValue": null,
    "objectValue": "[json('null')]"
    

Resource Manager offre diverse funzioni del modello di Resource Manager. Le funzioni vengono elencate in gruppi basati sul tipo:

  • Funzioni di matrice da usare con le matrici. Ad esempio, first e last.
  • Funzioni di confronto per eseguire confronti nei modelli. Ad esempio, equals e greater.
  • Funzioni di data da usare con le date. Ad esempio, utcNow e dateTimeAdd.
  • Funzioni dei valori di distribuzione per ottenere i valori di sezioni del modello e i valori correlati alla distribuzione. Ad esempio, environment e parameters.
  • Funzioni logiche da usare con le condizioni logiche. Ad esempio, if e not.
  • Funzioni numeriche da usare con gli interi. Ad esempio, max e mod.
  • Funzioni di oggetto da usare con gli oggetti. Ad esempio, contains e length.
  • Funzioni di risorsa per ottenere i valori delle risorse. Ad esempio, resourceGroup e subscription.
  • Funzioni di stringa da usare con le stringhe. Ad esempio, length e startsWith.

Come è possibile usare più funzioni in un'unica espressione?

Per creare espressioni personalizzate, è possibile usare più funzioni del modello. In questo scenario è necessario creare un'espressione che genera un nome univoco per ogni gruppo di risorse combinando un input di prefisso con un hash dell'ID del gruppo di risorse. Questa espressione restituisce nomi di account di archiviazione come dev2hu6fktr577wh e staging5his8hgr67tt5. È possibile usare quattro funzioni per costruire questo valore stringa. Ad esempio:

"[toLower(concat('Storage',uniqueString(resourceGroup().id)))]"

Si esamini l'espressione.

A partire da concat, questa funzione accetta un numero qualsiasi di argomenti e può accettare stringhe o matrici per i parametri. In questo caso si usa una stringa letterale "Storage" che viene concatenata con il risultato di un'altra funzione, uniqueString. La funzione uniqueString crea una stringa hash deterministica basata sui parametri. In questa espressione si crea un hash dell'ID del gruppo di risorse corrente usando un'altra funzione, resourceGroup.

Ecco l'output di quanto illustrato finora:

Picture of a string created by concatenating the word Storage with a 13-character hash that contains both uppercase and lowercase letters.

Per rispettare le convenzioni di denominazione, è necessario che questa stringa sia in lettere minuscole. In questo caso si aggiunge la funzione toLower come funzione esterna.

Eccome come sarà la stringa risultante:

Picture of a string created by concatenating the word Storage with a 13-character hash, and then converting all letters to lowercase.