Partilhar via


Definições de tipo em modelos ARM

Este artigo descreve como criar e usar definições em seu modelo do Azure Resource Manager (modelo ARM). Ao definir seus próprios tipos, você pode reutilizá-los. As definições de tipo só podem ser usadas com languageVersion 2.0.

Sugestão

Recomendamos o Bicep porque ele oferece os mesmos recursos que os modelos ARM e a sintaxe é mais fácil de usar. Para saber mais, consulte Tipos de dados definidos pelo usuário no Bicep.

Declaração mínima

No mínimo, cada definição de tipo precisa de um nome e de um type ou de .$ref

"definitions": {
  "demoStringType": {
    "type": "string"
  },
  "demoIntType": {
    "type": "int"
  },
  "demoBoolType": {
    "type": "bool"
  },
  "demoObjectType": {
    "type": "object"
  },
  "demoArrayType": {
    "type": "array"
  }
}

Valores permitidos

Você pode definir valores permitidos para uma definição de tipo. Você fornece os valores permitidos em uma matriz. A implantação falhará durante a validação se um valor for passado para a definição de tipo que não seja um dos valores permitidos.

"definitions": {
  "demoEnumType": {
    "type": "string",
    "allowedValues": [
      "one",
      "two"
    ]
  }
}

Restrições de comprimento

Você pode especificar comprimentos mínimos e máximos para definições de tipo de cadeia de caracteres e matrizes. Você pode definir uma ou ambas as restrições. Para cadeias de caracteres, o comprimento indica o número de caracteres. Para matrizes, o comprimento indica o número de itens na matriz.

O exemplo a seguir declara duas definições de tipo. Uma definição de tipo é para um nome de conta de armazenamento que deve ter de 3 a 24 caracteres. A outra definição de tipo é uma matriz que deve ter de 1 a 5 itens.

"definitions": {
  "storageAccountNameType": {
    "type": "string",
    "minLength": 3,
    "maxLength": 24
  },
  "appNameType": {
    "type": "array",
    "minLength": 1,
    "maxLength": 5
  }
}

Restrições de números inteiros

Você pode definir valores mínimos e máximos para definições de tipo inteiro. Você pode definir uma ou ambas as restrições.

"definitions": {
  "monthType": {
    "type": "int",
    "minValue": 1,
    "maxValue": 12
  }
}

Restrições de objeto

Propriedades

O valor de é um mapa de nome de propriedade =properties definição de > tipo.

O exemplo a seguir aceitaria {"foo": "string", "bar": 1}, mas rejeitaria {"foo": "string", "bar": -1}, {"foo": "", "bar": 1}ou qualquer objeto sem uma foo ou bar propriedade.

"definitions": {
  "objectDefinition": {
    "type": "object",
    "properties": {
      "foo": {
        "type": "string",
        "minLength": 3
      },
      "bar": {
        "type": "int",
        "minValue": 0
      }
    }
  }
},
"parameters": {
  "objectParameter": {
    "$ref": "#/definitions/objectDefinition",
  }
}

Todas as propriedades são obrigatórias, a menos que a definição do tipo da propriedade tenha a restrição "nullable": true. Para tornar ambas as propriedades no exemplo anterior opcionais, seria assim:

"definitions": {
  "objectDefinition": {
    "type": "object",
    "properties": {
      "foo": {
        "type": "string",
        "minLength": 3,
        "nullable": true
      },
      "bar": {
        "type": "int",
        "minValue": 0,
        "nullable": true
      }
    }
  }
}

propriedades adicionais

O valor de é uma definição de additionalProperties tipo ou um valor booleano. Se nenhuma additionalProperties restrição for definida, o valor padrão será true.

Se value for uma definição de tipo, o valor descreverá o esquema que é aplicado a todas as propriedades não mencionadas na properties restrição. O exemplo a seguir aceitaria {"fizz": "buzz", "foo": "bar"} , mas rejeitaria {"property": 1}.

"definitions": {
  "dictionaryDefinition": {
    "type": "object",
    "properties": {
      "foo": {
        "type": "string",
        "minLength": 3,
        "nullable": true
      },
      "bar": {
        "type": "int",
        "minValue": 0,
        "nullable": true
      }
    },
    "additionalProperties": {
      "type": "string"
    }
  }
}

Se o valor for false, nenhuma propriedade além das properties definidas na restrição pode ser fornecida. O exemplo a seguir aceitaria {"foo": "string", "bar": 1}, mas rejeitaria {"foo": "string", "bar": 1, "fizz": "buzz"}.

"definitions": {
  "dictionaryDefinition": {
    "type": "object",
    "properties": {
      "foo": {
        "type": "string",
        "minLength": 3
      },
      "bar": {
        "type": "int",
        "minValue": 0
      }
    },
    "additionalProperties": false
  }
}

Se o valor for true, qualquer propriedade não definida na properties restrição aceita qualquer valor. O exemplo a seguir aceitaria {"foo": "string", "bar": 1, "fizz": "buzz"}.

"definitions": {
  "dictionaryDefinition": {
    "type": "object",
    "properties": {
      "foo": {
        "type": "string",
        "minLength": 3
      },
      "bar": {
        "type": "int",
        "minValue": 0
      }
    },
    "additionalProperties": true
  }
}

discriminador

O valor discriminator define qual esquema aplicar com base em uma propriedade discriminadora. O exemplo a seguir aceitaria ou {"type": "ints", "foo": 1, "bar": 2}{"type": "strings", "fizz": "buzz", "pop": "goes", "the": "weasel"}, mas rejeitaria {"type": "ints", "fizz": "buzz"}.

"definitions": {
  "taggedUnionDefinition": {
    "type": "object",
    "discriminator": {
      "propertyName": "type",
      "mapping": {
        "ints": {
          "type": "object",
          "additionalProperties": {"type": "int"}
        },
        "strings": {
          "type": "object",
          "additionalProperties": {"type": "string"}
          }
      }
    }
  }
}

Restrições de matriz

prefixItems

O valor de prefixItems é uma matriz de definições de tipo. Cada definição de tipo no valor é o esquema a ser usado para validar o elemento de uma matriz no mesmo índice. O exemplo a seguir aceitaria [1, true] , mas rejeitaria [1, "string"] ou [1]:

"definitions": {
  "tupleDefinition": {
    "type": "array",
    "prefixItems": [
      { "type": "int" },
      { "type": "bool" }
    ]
  }
},
"parameters": {
  "tupleParameter": {
    "$ref": "#/definitions/tupleDefinition"
  }
}

itens

O valor de é uma definição de items tipo ou um booleano. Se nenhuma items restrição for definida, o valor padrão será true.

Se value for uma definição de tipo, o valor descreverá o esquema que é aplicado a todos os elementos da matriz cujo índice é maior do que o maior índice da prefixItems restrição. O exemplo a seguir aceitaria [1, true, 1] ou [1, true, 1, 1] rejeitaria [1, true, "foo"]:

"definitions": {
  "tupleDefinition": {
    "type": "array",
    "prefixItems": [
      { "type": "int" },
      { "type": "bool" }
    ],
    "items": { "type": "int" }
  }
},
"parameters": {
  "tupleParameter": {
    "$ref": "#/definitions/tupleDefinition"
  }
}

Você pode usar items sem usar prefixItemso . O exemplo a seguir aceitaria [1, 2] ou [1] rejeitaria ["foo"]:

"definitions": {
  "intArrayDefinition": {
    "type": "array",
    "items": { "type": "int" }
  }
},
"parameters": {
  "intArrayParameter": {
    "$ref": "#/definitions/intArrayDefinition"
  }
}

Se o valor for false, a matriz validada deve ter exatamente o mesmo comprimento que a prefixItems restrição. O exemplo a seguir aceitaria [1, true], mas rejeitaria [1, true, 1], e [1, true, false, "foo", "bar"].

"definitions": {
  "tupleDefinition": {
    "type": "array",
    "prefixItems": [
      {"type": "int"},
      {"type": "bool"}
    ]
  },
  "items": false
}

Se o valor for true, os elementos da matriz cujo índice é maior do que o maior índice da prefixItems restrição aceitam qualquer valor. Os exemplos a seguir aceitariam [1, true], [1, true, 1] e [1, true, false, "foo", "bar"].

"definitions": {
  "tupleDefinition": {
    "type": "array",
    "prefixItems": [
      {"type": "int"},
      {"type": "bool"}
    ]
  }
}
"definitions": {
  "tupleDefinition": {
    "type": "array",
    "prefixItems": [
      {"type": "int"},
      {"type": "bool"}
    ]
  },
  "items": true
}

Restrição anulável

A restrição anulável indica que o valor pode ser null ou omitido. Consulte Propriedades para obter um exemplo.

Descrição

Você pode adicionar uma descrição a uma definição de tipo para ajudar os usuários do seu modelo a entender o valor a ser fornecido.

"definitions": {
  "virtualMachineSize": {
    "type": "string",
    "metadata": {
      "description": "Must be at least Standard_A3 to support 2 NICs."
    },
    "defaultValue": "Standard_DS1_v2"
  }
}

Definição de uso

Para fazer referência a uma definição de tipo, use a seguinte sintaxe:

"$ref": "#/definitions/<definition-name>"

O exemplo a seguir mostra como fazer referência a uma definição de tipo a partir de parâmetros e saídas:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "languageVersion": "2.0",

  "definitions": {
    "naturalNumber": {
      "type": "int",
      "minValue": 1
    }
  },
  "parameters": {
    "numberParam": {
      "$ref": "#/definitions/naturalNumber",
      "defaultValue": 0
    }
  },
  "resources": {},
  "outputs": {
    "output1": {
      "$ref": "#/definitions/naturalNumber",
      "value": "[parameters('numberParam')]"
    }
  }
}

Próximos passos