Funciones definidas por el usuario en plantillas de Resource Manager

Dentro de la plantilla, puede crear sus propias funciones. Estas funciones están disponibles para su uso en la plantilla. Las funciones definidas por el usuario son independientes de las funciones de plantilla estándares que están disponibles automáticamente dentro de la plantilla. Cree sus propias funciones cuando tenga expresiones complicadas que se usen repetidamente en la plantilla.

En este artículo se describe cómo agregar funciones definidas por el usuario a una plantilla de Azure Resource Manager (plantilla de Resource Manager).

Definición de la función

Las funciones requieren un valor de espacio de nombres para evitar conflictos de nomenclatura con las funciones de plantilla. En el ejemplo siguiente se muestra una función que devuelve un nombre único:

"functions": [
  {
    "namespace": "contoso",
    "members": {
      "uniqueName": {
        "parameters": [
          {
            "name": "namePrefix",
            "type": "string"
          }
        ],
        "output": {
          "type": "string",
          "value": "[concat(toLower(parameters('namePrefix')), uniqueString(resourceGroup().id))]"
        }
      }
    }
  }
],

Uso de la función

En el ejemplo siguiente se muestra una plantilla que incluye una función definida por el usuario para obtener un nombre único para una cuenta de almacenamiento. La plantilla tiene un parámetro denominado storageNamePrefix que se pasa como un parámetro a la función.

{
 "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
 "contentVersion": "1.0.0.0",
 "parameters": {
   "storageNamePrefix": {
     "type": "string",
     "maxLength": 11
   }
 },
 "functions": [
  {
    "namespace": "contoso",
    "members": {
      "uniqueName": {
        "parameters": [
          {
            "name": "namePrefix",
            "type": "string"
          }
        ],
        "output": {
          "type": "string",
          "value": "[concat(toLower(parameters('namePrefix')), uniqueString(resourceGroup().id))]"
        }
      }
    }
  }
],
 "resources": [
   {
     "type": "Microsoft.Storage/storageAccounts",
     "apiVersion": "2022-09-01",
     "name": "[contoso.uniqueName(parameters('storageNamePrefix'))]",
     "location": "South Central US",
     "sku": {
       "name": "Standard_LRS"
     },
     "kind": "StorageV2",
     "properties": {
       "supportsHttpsTrafficOnly": true
     }
   }
 ]
}

Durante la implementación, el parámetro storageNamePrefix se pasa a la función:

  • La plantilla define un parámetro denominado storageNamePrefix.
  • La función usa namePrefix porque puede usar solo los parámetros que se definen en la función. Para más información, consulte las limitaciones.
  • En la sección resources de la plantilla, el elemento name usa la función y pasa el valor storageNamePrefix a namePrefix de la función.

Limitaciones

Al definir una función de usuario, hay algunas restricciones:

  • La función no puede acceder a las variables.
  • La función solo puede usar los parámetros que se definen en la función. Cuando usa la función parameters dentro de una función definida por el usuario, los parámetros de esa función serán los que limiten sus acciones.
  • La función no puede llamar a otras funciones definidas por el usuario.
  • La función no puede usar la función reference ni ninguna de las funciones list.
  • Los parámetros de la función no pueden tener valores predeterminados.

Pasos siguientes