Compartilhar via


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

As funções definidas pelo usuário ajudam a simplificar e reutilizar expressões complexas em seus modelos do ARM. Encapsulando a lógica em funções personalizadas, você pode melhorar a legibilidade, a manutenção e a escalabilidade do modelo, especialmente quando a mesma lógica aparece em vários lugares. 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 as 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, confira Limitações.
  • Na seção do resources modelo, o name elemento usa a função e passa o storageNamePrefix valor para 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. Ao usar a função de parâmetros em uma função definida pelo usuário, você 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