Funções definidas pelo usuário no modelo do ARM

Dentro de seu modelo, você pode criar suas próprias funções. Essas funções estão disponíveis para uso em seu modelo. As funções definidas pelo usuário são separadas das funções de modelo padrão que estão automaticamente disponíveis no seu modelo. Crie suas próprias funções quando tiver expressões complicadas utilizadas repetidamente em seu modelo.

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

Definir a função

As suas funções exigem um valor de namespace para evitar conflitos de nomenclatura com funções de modelo. O exemplo a seguir mostra uma função que retorna um nome exclusivo:

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

Usar a função

O exemplo a seguir mostra um modelo que inclui uma função definida pelo usuário para obter um nome exclusivo para uma conta de armazenamento. O modelo tem um parâmetro chamado storageNamePrefix que é passado 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 implantação, o parâmetro storageNamePrefix é passado para a função:

  • O modelo define um parâmetro chamado storageNamePrefix.
  • A função usa namePrefix porque você só pode usar parâmetros definidos na função. Para obter mais informações, confira Limitações.
  • Na seção do modelo resources, o elemento name usa a função e passa o valor storageNamePrefix para a função namePrefix.

Limitações

Ao definir uma função de usuário, há algumas restrições:

  • A função não pode acessar variáveis.
  • A função só pode usar os parâmetros que são definidos na função. Quando você usa a função parameters dentro de uma função definida pelo usuário, fica restrito aos parâmetros dessa função.
  • A função não pode chamar outras funções definidas pelo usuário.
  • A função não pode usar a função de referência ou qualquer uma das funções de lista.
  • Os parâmetros para a função não podem ter valores padrão.

Próximas etapas