Bagikan melalui


Ketik definisi dalam templat ARM

Artikel ini menjelaskan cara membuat dan menggunakan definisi di templat Azure Resource Manager (templat ARM) Anda. Dengan menentukan jenis Anda sendiri, Anda dapat menggunakan kembali jenis ini. Definisi jenis hanya dapat digunakan dengan languageVersion 2.0.

Petunjuk / Saran

Kami merekomendasikan Bicep karena menawarkan kemampuan yang sama dengan templat ARM dan sintaksnya lebih mudah digunakan. Untuk mempelajari selengkapnya, lihat Jenis data yang ditentukan pengguna di Bicep.

Deklarasi minimal

Minimal, setiap definisi jenis memerlukan nama dan type atau $ref.

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

Nilai yang diizinkan

Anda dapat menentukan nilai yang diizinkan untuk definisi jenis. Anda memberikan nilai yang diizinkan dalam array. Penyebaran gagal selama validasi jika nilai diteruskan untuk definisi jenis yang bukan salah satu nilai yang diizinkan.

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

Batasan panjang

Anda dapat menentukan panjang minimum dan maksimum untuk definisi jenis string dan array. Anda dapat mengatur salah satu atau kedua batasan. Untuk string, panjangnya menunjukkan jumlah karakter. Untuk array, panjangnya menunjukkan jumlah item dalam array.

Contoh berikut mendeklarasikan dua definisi jenis. Salah satu definisi jenis adalah untuk nama akun penyimpanan yang harus memiliki 3-24 karakter. Jenis definisi lainnya adalah array yang harus memiliki antara 1 sampai 5 item.

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

Batasan bilangan bulat

Anda dapat mengatur nilai minimum dan maksimum untuk definisi jenis bilangan bulat. Anda dapat mengatur salah satu atau kedua batasan.

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

Batasan objek

Karakteristik

Nilai properties adalah peta nama properti => definisi jenis.

Contoh berikut akan menerima {"foo": "string", "bar": 1}, tetapi menolak {"foo": "string", "bar": -1}, {"foo": "", "bar": 1}, atau objek apa pun tanpa foo properti atau bar .

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

Semua properti diperlukan kecuali jika definisi jenis dari properti tersebut memiliki pembatasan "nullable": true. Untuk membuat kedua properti dalam contoh sebelumnya opsional, properti akan terlihat seperti:

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

properti tambahan

additionalProperties adalah definisi tipe atau nilai boolean. Jika tidak ada additionalProperties batasan yang ditentukan, nilai defaultnya adalah true.

Jika nilai adalah definisi jenis, nilai menjelaskan skema yang diterapkan ke semua properti yang tidak disebutkan dalam properties batasan. Contoh berikut akan menerima {"fizz": "buzz", "foo": "bar"} tetapi menolak {"property": 1}.

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

Jika nilainya adalah false, tidak ada properti di luar yang ditentukan dalam properties batasan yang dapat disediakan. Contoh berikut akan menerima {"foo": "string", "bar": 1}, tetapi menolak {"foo": "string", "bar": 1, "fizz": "buzz"}.

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

Jika nilainya adalah true, properti apa pun yang tidak ditentukan dalam properties batasan menerima nilai apa pun. Contoh berikut akan menerima {"foo": "string", "bar": 1, "fizz": "buzz"}.

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

diskriminator

Nilai discriminator menentukan skema apa yang akan diterapkan berdasarkan properti diskriminator. Contoh berikut akan menerima atau {"type": "ints", "foo": 1, "bar": 2}{"type": "strings", "fizz": "buzz", "pop": "goes", "the": "weasel"}, tetapi menolak {"type": "ints", "fizz": "buzz"}.

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

Batasan array

awalanItem

Nilai dari prefixItems adalah array berisi definisi tipe. Setiap definisi jenis dalam nilai adalah skema yang akan digunakan untuk memvalidasi elemen array pada indeks yang sama. Contoh berikut akan menerima [1, true] tetapi menolak [1, "string"] atau [1]:

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

Barang-barang

Nilai dari items adalah definisi jenis atau boolean. Jika tidak ada items batasan yang ditentukan, nilai defaultnya adalah true.

Jika nilai adalah definisi jenis, nilai menjelaskan skema yang diterapkan ke semua elemen array yang indeksnya lebih besar dari indeks terbesar batasan prefixItems . Contoh berikut akan menerima [1, true, 1] atau [1, true, 1, 1] tetapi menolak [1, true, "foo"]:

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

Anda dapat menggunakan items tanpa menggunakan prefixItems. Contoh berikut akan menerima [1, 2] atau [1] tetapi menolak ["foo"]:

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

Jika nilainya adalah false, array yang divalidasi harus memiliki panjang prefixItems yang sama persis dengan batasan. Contoh berikut akan menerima [1, true], tetapi menolak [1, true, 1], dan [1, true, false, "foo", "bar"].

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

Jika nilainya benar, elemen array yang indeksnya lebih besar dari indeks terbesar batasan prefixItems menerima nilai apa pun. Contoh berikut akan menerima [1, true], [1, true, 1] dan [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
}

batasan nullable

Batasan nullable menunjukkan bahwa nilai dapat berupa null atau dihilangkan. Lihat Properti untuk contoh.

Deskripsi

Anda dapat menambahkan deskripsi ke definisi jenis untuk membantu pengguna templat Anda memahami nilai yang akan diberikan.

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

Gunakan definisi

Untuk mereferensikan definisi jenis, gunakan sintaks berikut:

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

Contoh berikut menunjukkan cara mereferensikan definisi jenis dari parameter dan output:

{
  "$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')]"
    }
  }
}

Langkah selanjutnya