Adición de flexibilidad a la plantilla de Azure Resource Manager mediante parámetros y salidas

Completado

En la unidad anterior, creó una plantilla de Azure Resource Manager (ARM) y le agregó una cuenta de Azure Storage. Es posible que detecte que hay un problema en la plantilla. El nombre de la cuenta de almacenamiento está codificado de forma rígida. Esta plantilla solo se puede usar para implementar la misma cuenta de almacenamiento cada vez. Para implementar una cuenta de almacenamiento con otro nombre, tiene que crear una plantilla, lo que no es una forma práctica de automatizar las implementaciones. La SKU de la cuenta de almacenamiento también está codificada de forma rígida, lo que significa que no se puede modificar el tipo de cuenta de almacenamiento para otros entornos. Recuerde que en este escenario, cada implementación puede tener un tipo diferente de cuenta de almacenamiento. Puede hacer que la plantilla sea más reutilizable si agrega un parámetro para la SKU de la cuenta de almacenamiento.

En esta unidad, encontrará información sobre las secciones parameters y outputs de la plantilla.

Parámetros de la plantilla de ARM

Los parámetros de la plantilla de ARM le permiten personalizar la implementación, ya que proporcionan valores específicos para un entorno concreto. Por ejemplo, puede pasar valores diferentes en función de si realiza la implementación en un entorno para desarrollo, prueba, producción u otros. Por ejemplo, en la plantilla anterior se usa la SKU de cuenta de almacenamiento Standard_LRS. Puede volver a usar esta plantilla para otras implementaciones que crean una cuenta de almacenamiento si convierte en un parámetro el nombre de la SKU de la cuenta de almacenamiento. Después, pase el nombre de la SKU que quiere para esta implementación concreta cuando se implemente la plantilla. Puede llevar a cabo este paso en la línea de comandos o mediante un archivo de parámetros.

En la sección parameters de la plantilla, especifique los valores que se pueden especificar al implementar los recursos. Está limitado a 256 parámetros por plantilla. Las definiciones de parámetros pueden utilizar la mayoría de las funciones de plantilla.

Las propiedades disponibles para un parámetro son las siguientes:

"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>"
    }
  }
}

Los tipos permitidos de parámetros son los siguientes:

  • string
  • secureString
  • integers
  • boolean
  • object
  • secureObject
  • array

Recomendaciones para el uso de parámetros

Use los parámetros para las configuraciones que varían según el entorno, como, por ejemplo, la SKU, el tamaño o la capacidad. Use los parámetros también para los nombres de recursos que desee especificar para facilitar la identificación o para cumplir las convenciones de nomenclatura internas. Proporcione una descripción para cada parámetro y use valores predeterminados siempre que sea posible.

Por motivos de seguridad, en las plantillas nunca codifique de forma rígida los nombres de usuario o las contraseñas, ni les proporcione valores predeterminados. Use siempre parámetros para los nombres de usuario y las contraseñas (o los secretos). Use secureString para todas las contraseñas y los secretos. Si pasa datos confidenciales en un objeto JSON, use el tipo secureObject. Los parámetros de plantilla con los tipos secureString o secureObject no se pueden leer ni recolectar después de la implementación del recurso.

Uso de parámetros en una plantilla de ARM

En la sección parameters de la plantilla de ARM, especifique los parámetros que se pueden especificar al implementar los recursos. Está limitado a 256 parámetros en una plantilla.

Este es un ejemplo de un archivo de plantilla con un parámetro para la SKU de la cuenta de almacenamiento definida en la sección parameters de la plantilla. Puede proporcionar un valor predeterminado para el parámetro que se usará si no se especifica ningún valor durante la ejecución.

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

Después, use el parámetro en la definición del recurso. La sintaxis es [parameters('name of the parameter')]. Entonces, al implementar se usa la función parameters. En el módulo siguiente, obtendrá más información sobre las funciones.

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

Al implementar la plantilla, puede proporcionar un valor para el parámetro. Observe la última línea del comando siguiente:

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

Salidas de plantilla de ARM

En la sección de salidas de la plantilla de ARM, puede especificar los valores que se devuelven después de una implementación correcta. Estos son los elementos que componen la sección de salidas.

"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 Descripción
nombre de salida Debe ser un identificador válido de JavaScript.
condition (opcional) Un valor booleano que indica si se devuelve este valor de salida. Si es true, el valor se incluye en la salida de la implementación. Si es false, el valor de salida se omite para esta implementación. Si no se especifica, el valor predeterminado es true.
type el tipo del valor de salida.
value (Opcional) Una expresión de lenguaje de plantilla que se evalúa y se devuelve como valor de salida.
copy (opcional) Se usa para devolver más de un valor para una salida.

Uso de salidas en una plantilla de ARM

Este es un ejemplo para generar los puntos de conexión de la cuenta de almacenamiento:

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

Observe el elemento reference de la expresión. Esta función obtiene el estado de tiempo de ejecución de la cuenta de almacenamiento.

Implementación de una plantilla de ARM de nuevo

Recuerde que las plantillas de ARM son idempotentes, lo cual significa que puede volver a implementar la plantilla en el mismo entorno y, si no cambia nada en ella, tampoco se cambia nada en el entorno. Si se produce un cambio en la plantilla (por ejemplo, si cambia el valor de un parámetro), solo se implementará ese cambio. La plantilla puede contener todos los recursos que necesita para la solución de Azure y puede volver a ejecutar una plantilla de forma segura. Los recursos solo se crean si aún no existen y solo se actualizan si se produce un cambio.