Ejercicio: Adición de parámetros y salidas a la plantilla de Azure Resource Manager
En este ejercicio, agregará un parámetro para definir el nombre de la cuenta de almacenamiento de Azure durante la implementación. Después, agregará un parámetro para definir qué SKU de cuenta de almacenamiento se permiten y definir cuál se va a usar para esta implementación. También agregará utilidad a la plantilla de Azure Resource Manager (plantilla de ARM) mediante la adición de una salida que se puede usar más adelante en el proceso de implementación.
Creación de parámetros para la plantilla de ARM
Aquí, puede hacer que la plantilla de ARM sea más flexible si agrega parámetros que se pueden establecer en tiempo de ejecución. Cree un parámetro para el valor storageName
.
En el archivo azuredeploy.json de Visual Studio Code, coloque el cursor entre las llaves del atributo parameters. Su aspecto es similar a este:
"parameters":{},
Seleccione Entrar y luego par. Verá una lista de fragmentos de código relacionados. Elija new-parameter, que agrega un parámetro genérico a la plantilla. Parece este ejemplo:
"parameters": { "parameter1": { "type": "string", "metadata": { "description": "description" } } },
Cambie el parámetro de parameter1 a storageName y deje el tipo como una cadena. Agregue un valor minLength de 3 y un valor maxLength de 24. Agregue un valor de descripción de Nombre del recurso de almacenamiento de Azure.
El bloque de parámetros debería tener ahora un aspecto similar al de este ejemplo:
"parameters": { "storageName": { "type": "string", "minLength": 3, "maxLength": 24, "metadata": { "description": "The name of the Azure storage resource" } } },
Use el nuevo parámetro del bloque
resources
en los valoresname
ydisplayName
. El archivo completo tiene el aspecto de este código:{ "$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": {} }
Guarde el archivo.
Implementación de la plantilla de ARM con parámetros
Aquí, cambiará el nombre de la implementación para que refleje mejor lo que hace y rellenará un valor para el nuevo parámetro.
Ejecute los siguientes comandos de la CLI de Azure en el terminal. Este fragmento de código es el mismo código que ha usado antes, pero se ha cambiado el nombre de la implementación. Rellene un nombre único para el parámetro storageName
. Recuerde que este nombre debe ser único en todo Azure. Puede usar el nombre único que ha creado en la última unidad. En ese caso, Azure actualiza el recurso en lugar de crear uno.
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}
Ejecute el siguiente comando de Azure PowerShell en el terminal. Este fragmento de código es el mismo código que ha usado antes, pero se ha cambiado el nombre de la implementación. Rellene un nombre único para el parámetro storageName
. Recuerde que este nombre debe ser único en todo Azure. Puede usar el nombre único que ha creado en la última unidad. En ese caso, Azure actualiza el recurso en lugar de crear uno.
$templateFile="azuredeploy.json"
$today=Get-Date -Format "MM-dd-yyyy"
$deploymentName="addnameparameter-"+"$today"
New-AzResourceGroupDeployment `
-Name $deploymentName `
-TemplateFile $templateFile `
-storageName {your-unique-name}
Comprobación de la implementación
Cuando finalice la implementación, vuelva al Azure Portal en el explorador. Vaya al grupo de recursos y compruebe que ahora hay 3 implementaciones correctas. Seleccione este vínculo.
Observe que las tres implementaciones están en la lista.
Explore la implementación addnameparameter como ha hecho antes.
Agregue otro parámetro que limite los valores permitidos
Aquí se usan parámetros para limitar los valores permitidos para un parámetro.
Coloque el cursor después de la llave de cierre del parámetro
storageName
. Agregue una coma y seleccione Entrar.De nuevo, escriba par y seleccione new-parameter.
Cambie el nuevo parámetro genérico por lo siguiente:
"storageSKU": { "type": "string", "defaultValue": "Standard_LRS", "allowedValues": [ "Standard_LRS", "Standard_GRS", "Standard_RAGRS", "Standard_ZRS", "Premium_LRS", "Premium_ZRS", "Standard_GZRS", "Standard_RAGZRS" ] }
Aquí se muestran los valores que este parámetro permitirá. Si la plantilla se ejecuta con un valor no permitido, se producirá un error en la implementación.
Agregue un comentario a este parámetro.
Las plantillas de ARM admiten comentarios
//
y/* */
.Actualice resources para usar el parámetro
storageSKU
. Si aprovecha las ventajas de IntelliSense en Visual Studio Code, puede facilitar esta tarea."sku": { "name": "[parameters('storageSKU')]" }
El archivo completo tiene el aspecto de este código:
{ "$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": {} }
Guarde el archivo.
Implementación de la plantilla de ARM
Aquí, se implementa correctamente mediante el uso de un parámetro storageSKU
que se encuentra en la lista de permitidos. A continuación, intente implementar la plantilla mediante un parámetro storageSKU
que no esté en la lista de permitidos. Se produce un error en la segunda implementación según lo previsto.
Ejecute los siguientes comandos para implementa la plantilla. Rellene un nombre único para el parámetro
storageName
. Recuerde que este nombre debe ser único en todo Azure. Puede usar el nombre único que ha creado en la última sección. En ese caso, Azure actualiza el recurso en lugar de crear uno.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}
Deje que finalice esta implementación. Esta implementación se realiza correctamente de la manera esperada. La lista de valores permitidos impide que los usuarios de la plantilla pasen valores de parámetro que no funcionan para el recurso. Ahora se verá lo que sucede cuando se proporciona una SKU no válida.
Ejecute los comandos siguientes para implementar la plantilla con un parámetro que no está permitido. Aquí ha cambiado el parámetro
storageSKU
por Basic. Rellene un nombre único para el parámetrostorageName
. Recuerde que este nombre debe ser único en todo Azure. Puede usar el nombre único que ha creado en la última sección. En ese caso, Azure actualiza el recurso en lugar de crear uno.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}
Se produce un error en esta implementación. Observe el error.
Ejecute los siguientes comandos para implementa la plantilla. Rellene un nombre único para el parámetro
storageName
. Recuerde que este nombre debe ser único en todo Azure. Puede usar el nombre único que ha creado en la última sección. En ese caso, Azure actualiza el recurso en lugar de crear uno.$today=Get-Date -Format "MM-dd-yyyy" $deploymentName="addSkuParameter-"+"$today" New-AzResourceGroupDeployment ` -Name $deploymentName ` -TemplateFile $templateFile ` -storageName {your-unique-name} ` -storageSKU Standard_GRS
Deje que finalice esta implementación. Esta implementación se realiza correctamente de la manera esperada. La lista de valores permitidos impide que los usuarios de la plantilla pasen valores de parámetro que no funcionan para el recurso. Ahora se verá lo que sucede cuando se proporciona una SKU no válida.
Ejecute los comandos siguientes para implementar la plantilla con un parámetro que no está permitido. Aquí ha cambiado el parámetro
storageSKU
por Basic. Rellene un nombre único para el parámetrostorageName
. Recuerde que este nombre debe ser único en todo Azure. Puede usar el nombre único que ha creado en la última sección. En ese caso, Azure actualiza el recurso en lugar de crear uno.$today=Get-Date -Format "MM-dd-yyyy" $deploymentName="addSkuParameter-"+"$today" New-AzResourceGroupDeployment ` -Name $deploymentName ` -TemplateFile $templateFile ` -storageName {your-unique-name} ` -storageSKU Basic
Se produce un error en esta implementación. Observe el error.
Adición de salida a la plantilla de ARM
Aquí agregará a la sección outputs
de la plantilla de ARM para generar los puntos de conexión para el recurso de cuenta de almacenamiento.
En el archivo azuredeploy.json de Visual Studio Code, coloque el cursor entre las llaves del atributo outputs
"outputs":{},
.Presione Entrar y luego out. Obtendrá una lista de fragmentos de código relacionados. Seleccione new-output. Agrega una salida genérica a la plantilla que tiene este aspecto:
"outputs": { "output1": { "type": "string", "value": "value" }
Cambie "output1" a "storageEndpoint", y después cambie el valor de
type
a "object". Cambie el valor devalue
a "[reference(parameters('storageName')).primaryEndpoints]". Esta expresión es la que se describe en la unidad anterior que obtiene los datos del punto de conexión. Dado que especificamos object como tipo, se devuelve el objeto en formato JSON."outputs": { "storageEndpoint": { "type": "object", "value": "[reference(parameters('storageName')).primaryEndpoints]" }
Guarde el archivo.
Implementación de la plantilla de ARM con una salida
Aquí, implementará la plantilla y verá la salida de los puntos de conexión como JSON. Tendrá que rellenar un nombre único para el parámetro storageName
. Recuerde que este nombre debe ser único en todo Azure. Puede usar el nombre único que ha creado en la última sección. En ese caso, Azure actualiza el recurso en lugar de crear uno.
Ejecute los siguientes comandos para implementa la plantilla. Asegúrese de reemplazar {your-unique-name} (el nombre único) por una cadena única.
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}
Observe la salida.
Ejecute los siguientes comandos para implementa la plantilla. Asegúrese de reemplazar {your-unique-name} (el nombre único) por una cadena única.
$today=Get-Date -Format "MM-dd-yyyy" $deploymentName="addOutputs-"+"$today" New-AzResourceGroupDeployment ` -Name $deploymentName ` -TemplateFile $templateFile ` -storageName {your-unique-name} ` -storageSKU Standard_LRS
Observe la salida.
Comprobación de la implementación de salida
En Azure Portal, vaya a la implementación addOutputs. Ahí también puede encontrar la salida.