ARM şablonlarının yapısını ve söz dizimini anlama

Bu makalede bir Azure Resource Manager şablonunun yapısı açıklanmaktadır (ARM şablonu). Bir şablonun farklı bölümlerini ve bu bölümlerde kullanılabilen özellikleri gösterir.

Bu makale, ARM şablonları hakkında bazı benzerlik sahibi olan kullanıcılar için tasarlanmıştır. Şablonun yapısı hakkında ayrıntılı bilgi sağlar. Şablon oluşturma sürecinde size kılavuzluk eden adım adım bir öğretici için bkz. öğretici: Ilk ARM şablonunuzu oluşturma ve dağıtma. Microsoft Learn üzerinde bir Kılavuzlu dizi modülle ARM şablonları hakkında bilgi edinmek için bkz. ARM şablonlarını kullanarak Azure 'da kaynakları dağıtma ve yönetme.

Şablon biçimi

En basit yapısında, bir şablon aşağıdaki öğelere sahiptir:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "",
  "apiProfile": "",
  "parameters": {  },
  "variables": {  },
  "functions": [  ],
  "resources": [  ],
  "outputs": {  }
}
Öğe adı Gerekli Açıklama
$schema Yes Şablon dilinin sürümünü açıklayan JavaScript Nesne Gösterimi (JSON) şema dosyasının konumu. Kullandığınız sürüm numarası, dağıtımın kapsamına ve JSON düzenleyicinize bağlıdır.

Azure Resource Manager araçları uzantısı ile Visual Studio Codekullanıyorsanız, kaynak grubu dağıtımları için en son sürümü kullanın:
https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#

diğer düzenleyiciler (Visual Studio dahil) bu şemayı işleyemeyebilir. Bu düzenleyiciler için şunu kullanın:
https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#

Abonelik dağıtımları için şunu kullanın:
https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#

Yönetim grubu dağıtımları için şunu kullanın:
https://schema.management.azure.com/schemas/2019-08-01/managementGroupDeploymentTemplate.json#

Kiracı dağıtımları için şunu kullanın:
https://schema.management.azure.com/schemas/2019-08-01/tenantDeploymentTemplate.json#
contentVersion Yes Şablonun sürümü (1.0.0.0 gibi). Bu öğe için herhangi bir değer sağlayabilirsiniz. Şablonunuzda önemli değişiklikleri belgelemek için bu değeri kullanın. Şablonu kullanarak kaynakları dağıttığınızda, bu değer doğru şablonun kullanıldığından emin olmak için kullanılabilir.
apiProfile No Kaynak türleri için API sürümleri koleksiyonu görevi gören bir API sürümü. Şablondaki her kaynak için API sürümlerini belirtmek zorunda kalmamak için bu değeri kullanın. Bir API profili sürümü belirttiğinizde ve kaynak türü için bir API sürümü belirtmezseniz Kaynak Yöneticisi, profilde tanımlanan bu kaynak türü için API sürümünü kullanır.

API profili özelliği, bir şablonu Azure Stack ve küresel Azure gibi farklı ortamlara dağıtmada özellikle faydalıdır. Şablonunuzun her iki ortamda da desteklenen sürümleri otomatik olarak kullandığından emin olmak için API profili sürümünü kullanın. Geçerli API profili sürümlerinin ve profilde tanımlanan kaynak API sürümlerinin bir listesi için bkz. API profili.

Daha fazla bilgi için bkz. API profillerini kullanarak sürümleri izleme.
parametrelere No Kaynak dağıtımını özelleştirmek için dağıtım yürütüldüğünde belirtilen değerler.
değişkenlerinin No Şablon dil ifadelerini basitleştirmek için şablonda JSON parçaları olarak kullanılan değerler.
lerdir No Şablon içinde kullanılabilen Kullanıcı tanımlı işlevler.
kaynakların Yes Bir kaynak grubunda veya abonelikte dağıtılan veya güncellenen kaynak türleri.
çıkışı No Dağıtımdan sonra döndürülen değerler.

Her öğenin ayarlayabileceğiniz özellikleri vardır. Bu makalede, şablonun bölümleri daha ayrıntılı olarak açıklanmaktadır.

Parametreler

parametersŞablonun bölümünde, kaynakları dağıttığınızda hangi değerleri gir, istediğinizi belirtirsiniz. Bir şablonda 256 parametreyle sınırlı olursunuz. Birden çok özellik içeren nesneleri kullanarak parametre sayısını azaltabilirsiniz.

Bir parametre için kullanılabilir özellikler şunlardır:

"parameters": {
  "<parameter-name>" : {
    "type" : "<type-of-parameter-value>",
    "defaultValue": "<default-value-of-parameter>",
    "allowedValues": [ "<array-of-allowed-values>" ],
    "minValue": <minimum-value-for-int>,
    "maxValue": <maximum-value-for-int>,
    "minLength": <minimum-length-for-string-or-array>,
    "maxLength": <maximum-length-for-string-or-array-parameters>,
    "metadata": {
      "description": "<description-of-the parameter>"
    }
  }
}
Öğe adı Gerekli Açıklama
parametre-adı Yes Parametrenin adı. Geçerli bir JavaScript tanımlayıcısı olmalıdır.
tür Yes Parametre değerinin türü. İzin verilen türler ve değerler dize, SecureString, int, bool, nesne, secureobject ve dizidir. ARM şablonlarındaki veri türlerinebakın.
Değerinin No Parametresi için değer sağlanmazsa, parametre için varsayılan değer.
allowedValues No Doğru değerin sağlandığından emin olmak için parametresi için izin verilen değerler dizisi.
minValue No İnt tür parametrelerinin minimum değeri, bu değer dahil değildir.
Değerini No İnt tür parametrelerinin en büyük değeri, bu değer dahil değildir.
minLength No Dize, güvenli dize ve dizi türü parametrelerinin minimum uzunluğu, bu değer dahil değildir.
'In No Dize, güvenli dize ve dizi türü parametrelerinin uzunluk üst sınırı, bu değer dahil değildir.
açıklama No Portalda kullanıcılara görüntülenen parametrenin açıklaması. Daha fazla bilgi için bkz. şablonlarda açıklamalar.

Parametrelerin nasıl kullanılacağına ilişkin örnekler için bkz. ARM şablonlarındaki parametreler.

Değişkenler

variablesBölümünde, şablonunuzun tamamında kullanılabilecek değerler oluşturursunuz. Değişken tanımlamanız gerekmez, ancak genellikle karmaşık ifadeleri azaltarak şablonunuzu basitleştirir. Her değişkenin biçimi, veri türlerindenbiriyle eşleşir.

Aşağıdaki örnekte değişken tanımlamaya uygun seçenekler ve seçenekler açık bir şekilde ve açık bir şekilde ve daha sonra açık bir şekilde açık bir şekilde ve daha fazla değişkenle birlikte kullanılabilir:

"variables": {
  "<variable-name>": "<variable-value>",
  "<variable-name>": {
    <variable-complex-type-value>
  },
  "<variable-object-name>": {
    "copy": [
      {
        "name": "<name-of-array-property>",
        "count": <number-of-iterations>,
        "input": <object-or-value-to-repeat>
      }
    ]
  },
  "copy": [
    {
      "name": "<variable-array-name>",
      "count": <number-of-iterations>,
      "input": <object-or-value-to-repeat>
    }
  ]
}

bir değişken için çeşitli copy değerler oluşturmak için kullanma hakkında bilgi için bkz. Değişken yinelemesi.

Değişkenleri kullanma örnekleri için bkz. ARM şablonunda değişkenler.

İşlevler

Şablon içinde kendi işlevlerinizi oluşturabilirsiniz. Bu işlevler şablonda kullanılabilir. Genellikle, şablonunuz genelinde tekrarlamak istemeyebilirsiniz karmaşık ifadeler tanımlarsınız. Şablonlarda desteklenen ifadelerden ve işlevlerden kullanıcı tanımlı işlevler oluşturursanız.

Kullanıcı işlevi tanımlarken bazı kısıtlamalar vardır:

  • İşlev değişkenlere erişe değildir.
  • İşlev yalnızca işlevde tanımlanan parametreleri kullanabilir. Kullanıcı tanımlı bir işlevde parameters işlevini kullanırken, bu işlevin parametreleriyle sınırlandırılmış oluruz.
  • İşlev, diğer kullanıcı tanımlı işlevleri çağıramaz.
  • işlevi başvuru işlevini kullanamayr.
  • İşlevin parametreleri varsayılan değerlere sahip değildir.
"functions": [
  {
    "namespace": "<namespace-for-functions>",
    "members": {
      "<function-name>": {
        "parameters": [
          {
            "name": "<parameter-name>",
            "type": "<type-of-parameter-value>"
          }
        ],
        "output": {
          "type": "<type-of-output-value>",
          "value": "<function-return-value>"
        }
      }
    }
  }
],
Öğe adı Gerekli Açıklama
ad alanı Yes Özel işlevlerin ad alanı. Şablon işlevleriyle adlandırma çakışmalarını önlemek için kullanın.
işlev-adı Yes Özel işlevin adı. İşlevi çağırarak işlev adını ad alanıyla birleştirin. Örneğin, contoso ad alanı içinde adlı uniqueName bir işlevi çağırarak "[contoso.uniqueName()]" kullanın.
parametre-adı No Özel işlev içinde kullanılacak parametrenin adı.
parametre-değeri No Parametre değerinin türü. İzin verilen türler ve değerler dize, securestring, int, bool, object, secureObject ve dizisidir.
output-type Yes Çıkış değerinin türü. Çıkış değerleri, işlev giriş parametreleriyle aynı türleri destekler.
output-value Yes Değerlendirilen ve işlevden döndürülen şablon dili ifadesi.

Özel işlevleri kullanma örnekleri için bkz. ARM şablonunda kullanıcı tanımlı işlevler.

Kaynaklar

bölümünde, resources dağıtılan veya güncelleştirilen kaynakları tanımlarsiniz.

Kaynakları aşağıdaki yapıyla tanımlarsiniz:

"resources": [
  {
      "condition": "<true-to-deploy-this-resource>",
      "type": "<resource-provider-namespace/resource-type-name>",
      "apiVersion": "<api-version-of-resource>",
      "name": "<name-of-the-resource>",
      "comments": "<your-reference-notes>",
      "location": "<location-of-resource>",
      "dependsOn": [
          "<array-of-related-resource-names>"
      ],
      "tags": {
          "<tag-name1>": "<tag-value1>",
          "<tag-name2>": "<tag-value2>"
      },
      "identity": {
        "type": "<system-assigned-or-user-assigned-identity>",
        "userAssignedIdentities": {
          "<resource-id-of-identity>": {}
        }
      },
      "sku": {
          "name": "<sku-name>",
          "tier": "<sku-tier>",
          "size": "<sku-size>",
          "family": "<sku-family>",
          "capacity": <sku-capacity>
      },
      "kind": "<type-of-resource>",
      "scope": "<target-scope-for-extension-resources>",
      "copy": {
          "name": "<name-of-copy-loop>",
          "count": <number-of-iterations>,
          "mode": "<serial-or-parallel>",
          "batchSize": <number-to-deploy-serially>
      },
      "plan": {
          "name": "<plan-name>",
          "promotionCode": "<plan-promotion-code>",
          "publisher": "<plan-publisher>",
          "product": "<plan-product>",
          "version": "<plan-version>"
      },
      "properties": {
          "<settings-for-the-resource>",
          "copy": [
              {
                  "name": ,
                  "count": ,
                  "input": {}
              }
          ]
      },
      "resources": [
          "<array-of-child-resources>"
      ]
  }
]
Öğe adı Gerekli Açıklama
Durum No Bu dağıtım sırasında kaynağın sağ olup olmadığını gösteren Boole değeri. olduğunda, true kaynak dağıtım sırasında oluşturulur. olduğunda, false kaynak bu dağıtım için atlanır. Bkz. koşulu.
tür Yes Kaynağın türü. Bu değer, kaynak sağlayıcısının ad alanı ve kaynak türünün (örneğin, ) Microsoft.Storage/storageAccounts birleşimidir. Kullanılabilir değerleri belirlemek için bkz. şablon başvurusu. Alt kaynak için türün biçimi, üst kaynağın içinde mi yoksa üst kaynağın dışında mı tanımlandığına bağlıdır. Bkz. Alt kaynaklar için ad ve tür ayarlama.
apiVersion Yes Kaynağı REST API için kullanabileceğiniz uygulamanın sürümü. Yeni bir şablon oluştururken, bu değeri dağıtıyorsanız kaynağın en son sürümüne ayarlayın. Şablon gerekli olduğu sürece aynı API sürümünü kullanmaya devam edin. Aynı API sürümünü kullanmaya devam ettiyerek, yeni API sürümünün şablon nasıl çalıştığını değiştirme riskini en aza indirmiş oluruz. API sürümünü yalnızca sonraki bir sürümde tanıtılmıştır yeni bir özellik kullanmak istediğiniz zaman güncelleştirmeyi göz önünde bulundurabilirsiniz. Kullanılabilir değerleri belirlemek için bkz. şablon başvurusu.
name Yes Kaynağın adı. Ad, RFC3986'da tanımlanan URI bileşeni kısıtlamalarına uymalı. Kaynak adını dış tarafların kullanımına silen Azure hizmetleri, adı doğrular ve bunun başka bir kimliğin sahtesi denemesi olmadığını doğrular. Bir alt kaynak için adın biçimi, adın üst kaynak içinde iç içe geçmiş veya üst kaynağın dışında tanımlandığına bağlıdır. Bkz. Alt kaynaklar için ad ve tür ayarlama.
yorumlar No Şablonunuz içinde kaynakları belgeleyene notlarınız. Daha fazla bilgi için bkz. Şablonlarda açıklamalar.
location Değişir Sağlanan kaynağın desteklenen coğrafi konumları. Kullanılabilir konumlardan herhangi birini seçebilirsiniz, ancak genellikle kullanıcılarınıza yakın bir konum seçmek mantıklıdır. Genellikle birbirleriyle etkileşime geçen kaynakları aynı bölgeye de yer kurmak mantıklıdır. Çoğu kaynak türü bir konum gerektirir, ancak bazı türler (rol ataması gibi) konum gerektirmez. Bkz. Kaynak konumunu ayarlama.
dependsOn No Bu kaynak dağıtıldıktan önce dağıtılması gereken kaynaklar. Resource Manager kaynaklar arasındaki bağımlılıkları değerlendirir ve doğru sırayla dağıtır. Kaynaklar birbirine bağımlı olmayan kaynaklar paralel olarak dağıtılır. Değer, kaynak adlarının veya kaynak benzersiz tanımlayıcılarının virgülle ayrılmış bir listesi olabilir. Yalnızca bu şablonda dağıtılan kaynakları listele. Bu şablonda tanımlanmamış kaynakların zaten mevcut olması gerekir. Dağıtımınızı yavaşlatandan ve döngüsel bağımlılıklar oluşturandan gereksiz bağımlılıklar eklemekten kaçının. Bağımlılıkları ayarlama hakkında rehberlik için bkz. ARM şablonlarında kaynak dağıtma sıralarını tanımlama.
etiketler No Kaynakla ilişkili etiketler. Aboneliğiniz genelinde kaynakları mantıksal olarak düzenlemek için etiketler uygulama.
identity No Bazı kaynaklar Azure kaynakları için yönetilen kimlikleri destekler. Bu kaynaklar, kaynak bildiriminin kök düzeyinde bir kimlik nesnesine sahip olur. Kimliğin kullanıcı tarafından mı yoksa sistem tarafından mı atandığı olarak ayarlayın. Kullanıcı tarafından atanan kimlikler için kimlikler için kaynak kimliklerinin listesini sağlar. Anahtarı kaynak kimliğine, değeri de boş bir nesneye ayarlayın. Daha fazla bilgi için bkz. Şablonları kullanarak Azure VM'leri üzerinde Azure kaynakları için yönetilen kimlikleri yapılandırma.
Sku No Bazı kaynaklar, dağıtım için SKU'nun tanımladığınız değerlere izin verir. Örneğin, bir depolama hesabı için yedeklilik türünü belirtebilirsiniz.
Tür No Bazı kaynaklar, dağıtın kaynağın türünü tanımlayan bir değere izin verir. Örneğin, oluşturulan veritabanı türünü Cosmos belirterek.
scope No Kapsam özelliği yalnızca uzantı kaynak türleri için kullanılabilir. Dağıtım kapsamından farklı bir kapsam belirtirken bunu kullanın. Bkz. ARM şablonlarında uzantı kaynakları için kapsam ayarlama.
kopyalama No Birden fazla örnek gerekirse, oluşturulan kaynak sayısı. Varsayılan mod paraleldir. Tüm kaynakların veya kaynakların aynı anda dağıtılamalarını istemiyorken seri modu belirtin. Daha fazla bilgi için, bkz. Create several instances of resources in Azure Resource Manager.
plan No Bazı kaynaklar, dağıtım planını tanımlayan değerlere izin verir. Örneğin, bir sanal makine için market görüntüsünü belirtebilirsiniz.
properties No Kaynağa özgü yapılandırma ayarları. Özelliklere yönelik değerler, kaynağı oluşturmak için REST API işlemi (PUT yöntemi) için istek gövdesinde sağlan değerlerle aynıdır. Bir özelliğin birkaç örneğini oluşturmak için bir kopyalama dizisi de belirtabilirsiniz. Kullanılabilir değerleri belirlemek için bkz. şablon başvurusu.
kaynaklar No Tanımlanan kaynağa bağlı olan alt kaynaklar. Yalnızca üst kaynağın şeması tarafından izin verilen kaynak türlerini sağlar. Üst kaynağa bağımlılık örtülü değil. Bu bağımlılığı açıkça tanımlamanız gerekir. Bkz. Alt kaynaklar için ad ve tür ayarlama.

Çıkışlar

bölümünde, outputs dağıtımdan döndürülen değerleri belirtirsiniz. Genellikle, dağıtılan kaynaklardan değerler dönersiniz.

Aşağıdaki örnek, çıkış tanımının yapısını gösterir:

"outputs": {
  "<output-name>": {
    "condition": "<boolean-value-whether-to-output-value>",
    "type": "<type-of-output-value>",
    "value": "<output-value-expression>",
    "copy": {
      "count": <number-of-iterations>,
      "input": <values-for-the-variable>
    }
  }
}
Öğe adı Gerekli Açıklama
output-name Yes Çıkış değerinin adı. Geçerli bir JavaScript tanımlayıcısı olmalıdır.
Durum No Bu çıkış değerinin döndürül olup olmadığını gösteren Boole değeri. olduğunda, true değeri dağıtımın çıkışına dahil edilir. olduğunda, false bu dağıtım için çıkış değeri atlanır. Belirtilmedikse varsayılan değer true olur.
tür Yes Çıkış değerinin türü. Çıkış değerleri, şablon giriş parametreleriyle aynı türleri destekler. Çıkış türü için securestring belirtirsiniz, değer dağıtım geçmişinde görüntülenmez ve başka bir şablondan alınamıyor. Birden fazla şablonda gizli bir değer kullanmak için gizli Key Vault depolar ve parametre dosyasında gizli dosyaya başvurur. Daha fazla bilgi için bkz. Dağıtım Azure Key Vault güvenli parametre değeri geçmek için uygulama kullanma.
değer No Değerlendirilen ve çıkış değeri olarak döndürülen şablon dili ifadesi. Değerini belirtin veya kopyalayın.
kopyalama No Bir çıkış için birden fazla değer dönmek için kullanılır. Değeri belirtin veya kopyalayın. Daha fazla bilgi için bkz. ARM şablonlarında çıkış yinelemesi.

Çıkışları kullanma örnekleri için bkz. ARM şablonunda çıkışlar.

Açıklamalar ve meta veriler

Şablonunuz için açıklama ve meta veri eklemeye yönelik birkaç seçenek vardır.

Yorumlar

Satır içi açıklamalar için veya // /* ... */ kullanabilirsiniz.

Not

Azure CLI kullanarak açıklamalarla şablon dağıtırken 2.3.0 veya sonraki bir sürümü kullanın ve anahtarını --handle-extended-json-format belirtin.

{
  "type": "Microsoft.Compute/virtualMachines",
  "apiVersion": "2018-10-01",
  "name": "[variables('vmName')]", // to customize name, change it in variables
  "location": "[parameters('location')]", //defaults to resource group location
  "dependsOn": [ /* storage account and network interface must be deployed first */
    "[resourceId('Microsoft.Storage/storageAccounts/', variables('storageAccountName'))]",
    "[resourceId('Microsoft.Network/networkInterfaces/', variables('nicName'))]"
  ],

Bu Visual Studio Code, Azure Resource Manager Araçları uzantısı bir ARM şablonunu otomatik olarak algılar ve dil modunu değiştirebilir. Uygulama şablonunun Azure Resource Manager sağ alt köşesinde bir Şablon Visual Studio Code satır içi yorumları kullanabilirsiniz. Satır içi açıklamalar artık geçersiz olarak işaretlenir.

Visual Studio Code Azure Resource Manager modunu kullanma

Meta veri

Şablonda neredeyse metadata herhangi bir yere nesne eklemek için kullanabilirsiniz. Resource Manager nesnesini yoksayıyor, ancak JSON düzenleyiciniz özelliğin geçerli olmadığını konusunda sizi uyarıyor olabilir. nesnesinde, ihtiyacınız olan özellikleri tanımlayın.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "metadata": {
    "comments": "This template was developed for demonstration purposes.",
    "author": "Example Name"
  },

için, parameters metadata özelliğine sahip bir nesnesi description ekleyin.

"parameters": {
  "adminUsername": {
    "type": "string",
    "metadata": {
      "description": "User name for the Virtual Machine."
    }
  },

Şablonu portal üzerinden dağıtırken, açıklamaya sağ istediğiniz metin otomatik olarak bu parametrenin ipucu olarak kullanılır.

Parametre ipucu gösterme

için resources bir öğe veya nesne comments metadata ekleyin. Aşağıdaki örnekte hem bir öğesi comments hem de nesnesi metadata gösterir.

"resources": [
  {
    "type": "Microsoft.Storage/storageAccounts",
    "apiVersion": "2018-07-01",
    "name": "[concat('storage', uniqueString(resourceGroup().id))]",
    "comments": "Storage account used to store VM disks",
    "location": "[parameters('location')]",
    "metadata": {
      "comments": "These tags are needed for policy compliance."
    },
    "tags": {
      "Dept": "[parameters('deptName')]",
      "Environment": "[parameters('environment')]"
    },
    "sku": {
      "name": "Standard_LRS"
    },
    "kind": "Storage",
    "properties": {}
  }
]

için outputs çıkış metadata değerine bir nesnesi ekleyin.

"outputs": {
  "hostname": {
    "type": "string",
    "value": "[reference(variables('publicIPAddressName')).dnsSettings.fqdn]",
    "metadata": {
      "comments": "Return the fully qualified domain name"
    }
  },

Kullanıcı tanımlı işlevlere metadata nesne ekleriz.

Çok satırlı dizeler

Bir dizeyi birden çok satıra kesebilirsiniz. Örneğin, location AŞAĞıDAKI JSON örneğinde, özelliğine ve açıklamalardan birine bakın.

Not

şablonları çok satırlı dizeler ile dağıtmak için Azure PowerShell veya Azure clı kullanın. CLı için, sürüm 2.3.0 veya üstünü kullanın ve --handle-extended-json-format anahtarı belirtin.

şablonu Azure portal, bir DevOps işlem hattı veya REST API aracılığıyla dağıttığınızda çok satırlı dizeler desteklenmez.

{
  "type": "Microsoft.Compute/virtualMachines",
  "apiVersion": "2018-10-01",
  "name": "[variables('vmName')]", // to customize name, change it in variables
  "location": "[
    parameters('location')
    ]", //defaults to resource group location
  /*
    storage account and network interface
    must be deployed first
  */
  "dependsOn": [
    "[resourceId('Microsoft.Storage/storageAccounts/', variables('storageAccountName'))]",
    "[resourceId('Microsoft.Network/networkInterfaces/', variables('nicName'))]"
  ],

Sonraki adımlar