Funções definidas pelo utilizador no modelo do ARM

No seu modelo, pode criar as suas próprias funções. Estas funções estão disponíveis para utilização no seu modelo. As funções definidas pelo utilizador são separadas das funções de modelo padrão que estão automaticamente disponíveis no seu modelo. Crie as suas próprias funções quando tiver expressões complicadas que são utilizadas repetidamente no seu modelo.

Este artigo descreve como adicionar funções definidas pelo utilizador no modelo de Resource Manager do Azure (modelo do ARM).

Definir a função

As suas funções requerem um valor de espaço de nomes para evitar conflitos de nomenclatura com funções de modelo. O exemplo seguinte mostra uma função que devolve um nome exclusivo:

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

Utilizar a função

O exemplo seguinte mostra um modelo que inclui uma função definida pelo utilizador para obter um nome exclusivo para uma conta de armazenamento. O modelo tem um parâmetro com o nome storageNamePrefix que é transmitido como um parâmetro para a função.

{
 "$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 a implementação, o storageNamePrefix parâmetro é transmitido para a função:

  • O modelo define um parâmetro com o nome storageNamePrefix.
  • A função é utilizada namePrefix porque só pode utilizar parâmetros definidos na função. Para obter mais informações, veja Limitações.
  • Na secção do resources modelo, o name elemento utiliza a função e transmite o storageNamePrefix valor para .namePrefix

Limitações

Ao definir uma função de utilizador, existem algumas restrições:

  • A função não consegue aceder a variáveis.
  • A função só pode utilizar parâmetros definidos na função. Quando utiliza a função parâmetros numa função definida pelo utilizador, está restrito aos parâmetros dessa função.
  • A função não pode chamar outras funções definidas pelo utilizador.
  • A função não pode utilizar a função de referência ou qualquer uma das funções de lista .
  • Os parâmetros da função não podem ter valores predefinidos.

Passos seguintes