Partilhar via


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

As funções definidas pelo usuário ajudam a simplificar e reutilizar expressões complexas em seus modelos ARM. Ao encapsular a lógica em funções personalizadas, pode melhorar a legibilidade, a manutenção e a escalabilidade do modelo — especialmente quando a mesma lógica aparece em vários locais. Essas funções são distintas das funções de modelo internas que estão sempre disponíveis. Para definir funções definidas pelo usuário no Bicep, consulte Funções definidas pelo usuário no Bicep.

Definir a função

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))]"
        }
      }
    }
  }
],

Use 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": "[format('{0}{1}', toLower(parameters('namePrefix')), uniqueString(resourceGroup().id))]"
        }
      }
    }
  }
],
 "resources": [
   {
     "type": "Microsoft.Storage/storageAccounts",
     "apiVersion": "2025-06-01",
     "name": "[contoso.uniqueName(parameters('storageNamePrefix'))]",
     "location": "South Central US",
     "sku": {
       "name": "Standard_LRS"
     },
     "kind": "StorageV2",
     "properties": {
       "supportsHttpsTrafficOnly": true
     }
   }
 ]
}

Durante a implantação, o storageNamePrefix parâmetro é 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, consulte Limitações.
  • Na seção do modelo resources, o elemento name utiliza a função e passa o valor storageNamePrefix para o namePrefix da função.

Limitações

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

  • A função não pode acessar variáveis.
  • A função só pode usar parâmetros que são definidos na função. Quando você usa a função de parâmetros dentro de uma função definida pelo usuário, você está restrito aos parâmetros para essa 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óximos passos