Esercizio - Aggiungere parametri e output al modello di Azure Resource Manager
In questo esercizio viene aggiunto un parametro per definire il nome dell'account di archiviazione di Azure durante la distribuzione. Viene quindi aggiunto un parametro per definire lo SKU dell'account di archiviazione autorizzato e quale usare per la distribuzione. È anche possibile aumentare l'utilità del modello di Azure Resource Manager (modello di ARM) aggiungendo un output utilizzabile in un secondo momento nel processo di distribuzione.
Creare parametri per il modello di Resource Manager
In questo esempio il modello di Resource Manager viene reso più flessibile aggiungendo parametri che possono essere impostati in fase di esecuzione. Creare un parametro per il valore storageName
.
Nel file azuredeploy.json in Visual Studio Code posizionare il cursore all'interno delle parentesi graffe nell'attributo parameters. Ha questo aspetto:
"parameters":{},
Premere INVIO e quindi immettere par. Viene visualizzato un elenco dei frammenti di codice correlati. Scegliere new-parameter, che aggiunge un parametro generico al modello. L'esempio è simile al seguente:
"parameters": { "parameter1": { "type": "string", "metadata": { "description": "description" } } },
Modificare il parametro da parameter1 a storageName e mantenere il tipo come string. Aggiungere un valore minLength pari a 3 e un valore maxLength di 24. Aggiungere un valore Nome della risorsa di archiviazione di Azure per la descrizione.
Il blocco di parametri dovrebbe ora essere simile all'esempio seguente:
"parameters": { "storageName": { "type": "string", "minLength": 3, "maxLength": 24, "metadata": { "description": "The name of the Azure storage resource" } } },
Usare il nuovo parametro nel blocco
resources
nei valoriname
edisplayName
. L'intero file è simile a questo esempio di codice:{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "storageName": { "type": "string", "minLength": 3, "maxLength": 24, "metadata": { "description": "The name of the Azure storage resource" } } }, "functions": [], "variables": {}, "resources": [ { "type": "Microsoft.Storage/storageAccounts", "apiVersion": "2023-05-01", "name": "[parameters('storageName')]", "tags": { "displayName": "[parameters('storageName')]" }, "location": "[resourceGroup().location]", "kind": "StorageV2", "sku": { "name": "Standard_LRS" } } ], "outputs": {} }
Salvare il file.
Distribuire il modello di Resource Manager con parametri
In questo esempio si modifica il nome della distribuzione in modo da rispecchiare meglio l'obiettivo della distribuzione e si immette un valore per il nuovo parametro.
Eseguire i comandi dell'interfaccia della riga di comando di Azure seguenti nel terminale. Questo frammento è lo stesso codice usato in precedenza, ma il nome della distribuzione è cambiato. Specificare un nome univoco per il parametro storageName
. Non dimenticare che il nome deve essere univoco in Azure. È possibile usare il nome univoco creato nell'ultima unità. In tal caso, Azure aggiorna la risorsa invece di crearne una nuova.
templateFile="azuredeploy.json"
today=$(date +"%d-%b-%Y")
DeploymentName="addnameparameter-"$today
az deployment group create \
--name $DeploymentName \
--template-file $templateFile \
--parameters storageName={your-unique-name}
Eseguire i comandi di Azure PowerShell seguenti nel terminale. Questo frammento è lo stesso codice usato in precedenza, ma il nome della distribuzione è cambiato. Specificare un nome univoco per il parametro storageName
. Non dimenticare che il nome deve essere univoco in Azure. È possibile usare il nome univoco creato nell'ultima unità. In tal caso, Azure aggiorna la risorsa invece di crearne una nuova.
$templateFile="azuredeploy.json"
$today=Get-Date -Format "MM-dd-yyyy"
$deploymentName="addnameparameter-"+"$today"
New-AzResourceGroupDeployment `
-Name $deploymentName `
-TemplateFile $templateFile `
-storageName {your-unique-name}
Controllare la distribuzione
Al termine della distribuzione, tornare al portale di Azure nel browser. Passare al gruppo di risorse e osservare che ora sono presenti 3 distribuzioni completate. Selezionare il collegamento.
Si noti che tutte e tre le distribuzioni sono presenti nell'elenco.
Esplorare la distribuzione addnameparameter come è stato fatto in precedenza.
Aggiungere un altro parametro per limitare i valori consentiti
In questo esempio si usano i parametri per limitare i valori consentiti per un parametro.
Posizionare il cursore dopo la parentesi graffa di chiusura per il parametro
storageName
. Aggiungere una virgola e premere INVIO.Immettere nuovamente par e selezionare new-parameter.
Modificare il nuovo parametro generico nel codice seguente:
"storageSKU": { "type": "string", "defaultValue": "Standard_LRS", "allowedValues": [ "Standard_LRS", "Standard_GRS", "Standard_RAGRS", "Standard_ZRS", "Premium_LRS", "Premium_ZRS", "Standard_GZRS", "Standard_RAGZRS" ] }
In questo caso vengono elencati i valori consentiti da questo parametro. Se il modello viene eseguito con un valore non consentito, la distribuzione ha esito negativo.
Aggiungere un commento a questo parametro.
I modelli di Azure Resource Manager supportano i commenti
//
e/* */
.Aggiornare resources in modo da usare il parametro
storageSKU
. Se si sfrutta IntelliSense in Visual Studio Code, questo passaggio viene semplificato."sku": { "name": "[parameters('storageSKU')]" }
L'intero file è simile a questo esempio di codice:
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "storageName": { "type": "string", "minLength": 3, "maxLength": 24, "metadata": { "description": "The name of the Azure storage resource" } }, "storageSKU": { "type": "string", "defaultValue": "Standard_LRS", "allowedValues": [ "Standard_LRS", "Standard_GRS", "Standard_RAGRS", "Standard_ZRS", "Premium_LRS", "Premium_ZRS", "Standard_GZRS", "Standard_RAGZRS" ] } }, "functions": [], "variables": {}, "resources": [ { "type": "Microsoft.Storage/storageAccounts", "apiVersion": "2023-05-01", "name": "[parameters('storageName')]", "tags": { "displayName": "[parameters('storageName')]" }, "location": "[resourceGroup().location]", "kind": "StorageV2", "sku": { "name": "[parameters('storageSKU')]" } } ], "outputs": {} }
Salvare il file.
Distribuire il modello di Resource Manager
In questo esempio viene eseguita la distribuzione usando un parametro storageSKU
presente nell'elenco dei parametri consentiti. Successivamente, si cerca di distribuire il modello usando un parametro storageSKU
non incluso nell'elenco dei parametri consentiti. La seconda distribuzione ha esito negativo come previsto.
Distribuire il modello eseguendo i comandi seguenti. Specificare un nome univoco per il parametro
storageName
. Non dimenticare che il nome deve essere univoco in Azure. È possibile usare il nome univoco creato nell'ultima sezione. In tal caso, Azure aggiorna la risorsa invece di crearne una nuova.templateFile="azuredeploy.json" today=$(date +"%d-%b-%Y") DeploymentName="addSkuParameter-"$today az deployment group create \ --name $DeploymentName \ --template-file $templateFile \ --parameters storageSKU=Standard_GRS storageName={your-unique-name}
Lasciare che la distribuzione venga completata. La distribuzione ha esito positivo come previsto. L'elenco di valori consentiti impedisce agli utenti del modello di passare valori dei parametri che non possono essere utilizzati per la risorsa. Si vedrà ora cosa accade quando si specifica uno SKU non valido.
Eseguire i comandi seguenti per distribuire il modello con un parametro non consentito. In questo esempio il parametro
storageSKU
è stato modificato in Basic. Specificare un nome univoco per il parametrostorageName
. Non dimenticare che il nome deve essere univoco in Azure. È possibile usare il nome univoco creato nell'ultima sezione. In tal caso, Azure aggiorna la risorsa invece di crearne una nuova.templateFile="azuredeploy.json" today=$(date +"%d-%b-%Y") DeploymentName="addSkuParameter-"$today az deployment group create \ --name $DeploymentName \ --template-file $templateFile \ --parameters storageSKU=Basic storageName={your-unique-name}
La distribuzione ha esito negativo. Si noti l'errore.
Distribuire il modello eseguendo i comandi seguenti. Specificare un nome univoco per il parametro
storageName
. Non dimenticare che il nome deve essere univoco in Azure. È possibile usare il nome univoco creato nell'ultima sezione. In tal caso, Azure aggiorna la risorsa invece di crearne una nuova.$today=Get-Date -Format "MM-dd-yyyy" $deploymentName="addSkuParameter-"+"$today" New-AzResourceGroupDeployment ` -Name $deploymentName ` -TemplateFile $templateFile ` -storageName {your-unique-name} ` -storageSKU Standard_GRS
Lasciare che la distribuzione venga completata. La distribuzione ha esito positivo come previsto. L'elenco di valori consentiti impedisce agli utenti del modello di passare valori dei parametri che non possono essere utilizzati per la risorsa. Si vedrà ora cosa accade quando si specifica uno SKU non valido.
Eseguire i comandi seguenti per distribuire il modello con un parametro non consentito. In questo esempio il parametro
storageSKU
è stato modificato in Basic. Specificare un nome univoco per il parametrostorageName
. Non dimenticare che il nome deve essere univoco in Azure. È possibile usare il nome univoco creato nell'ultima sezione. In tal caso, Azure aggiorna la risorsa invece di crearne una nuova.$today=Get-Date -Format "MM-dd-yyyy" $deploymentName="addSkuParameter-"+"$today" New-AzResourceGroupDeployment ` -Name $deploymentName ` -TemplateFile $templateFile ` -storageName {your-unique-name} ` -storageSKU Basic
La distribuzione ha esito negativo. Si noti l'errore.
Aggiungere l'output al modello di Resource Manager
In questo esempio viene aggiunta la sezione outputs
del modello di Azure Resource Manager in modo che vengano restituiti gli endpoint per la risorsa dell'account di archiviazione.
Nel file azuredeploy.json in Visual Studio Code posizionare il cursore all'interno delle parentesi graffe nell'attributo outputs
"outputs":{},
.Premere INVIO e quindi digitare out. Si ottiene un elenco dei frammenti correlati. Selezionare new-output. Aggiunge un output generico al modello simile all'esempio seguente:
"outputs": { "output1": { "type": "string", "value": "value" }
Modificare "output1" in "storageEndpoint", quindi modificare il valore di
type
in "object". Modificare il valore divalue
in "[reference(parameters('storageName')).primaryEndpoints]". Questa espressione è quella descritta nell'unità precedente che ottiene i dati dell'endpoint. Poiché è stato specificato object come tipo,l'oggetto verrà restituito in formato JSON."outputs": { "storageEndpoint": { "type": "object", "value": "[reference(parameters('storageName')).primaryEndpoints]" }
Salvare il file.
Distribuire il modello di Resource Manager con un output
In questo esempio si distribuisce il modello e si visualizza l'output degli endpoint come JSON. È necessario specificare un nome univoco per il parametro storageName
. Non dimenticare che il nome deve essere univoco in Azure. È possibile usare il nome univoco creato nell'ultima sezione. In tal caso, Azure aggiorna la risorsa invece di crearne una nuova.
Distribuire il modello eseguendo i comandi seguenti. Assicurarsi di sostituire {your-unique-name} con una stringa univoca.
templateFile="azuredeploy.json" today=$(date +"%d-%b-%Y") DeploymentName="addoutputs-"$today az deployment group create \ --name $DeploymentName \ --template-file $templateFile \ --parameters storageSKU=Standard_LRS storageName={your-unique-name}
Si noti l'output.
Distribuire il modello eseguendo i comandi seguenti. Assicurarsi di sostituire {your-unique-name} con una stringa univoca.
$today=Get-Date -Format "MM-dd-yyyy" $deploymentName="addOutputs-"+"$today" New-AzResourceGroupDeployment ` -Name $deploymentName ` -TemplateFile $templateFile ` -storageName {your-unique-name} ` -storageSKU Standard_LRS
Si noti l'output.
Controllare la distribuzione dell'output
Nel portale di Azure passare alla distribuzione addOutputs. È possibile trovare l'output anche qui.