Azure Resource Manager şablonu belirtimleri

Şablon belirtimi, bir Azure Resource Manager şablonunu (ARM şablonu) daha sonra dağıtım için Azure'da depolamak için kullanılan bir kaynak türüdür. Bu kaynak türü, ARM şablonlarını kuruluşunuzdaki diğer kullanıcılarla paylaşmanızı sağlar. Diğer tüm Azure kaynaklarda olduğu gibi, şablon belirtimini paylaşmak için Azure rol tabanlı erişim denetimini (Azure RBAC) kullanabilirsiniz.

Microsoft.Resources/templateSpecs, şablon belirtimleri için kaynak türüdür. Bir ana şablondan ve herhangi bir sayıda bağlantılı şablondan oluşur. Azure, şablon belirtimlerini kaynak gruplarında güvenli bir şekilde depolar. Şablon Özellikleri sürüm oluşturma desteği sağlar.

Şablon belirtimini dağıtmak için PowerShell, Azure CLI, Azure portalı, REST ve diğer desteklenen SDK'lar ve istemciler gibi standart Azure araçlarını kullanırsınız. Şablon için kullandığınız komutların aynısını kullanırsınız.

Not

Şablon belirtimlerini Azure PowerShell ile kullanmak için 5.0.0 veya sonraki bir sürümü yüklemeniz gerekir. Azure CLI ile kullanmak için 2.14.2 veya sonraki bir sürümü kullanın.

Dağıtımınızı tasarlarken her zaman kaynakların yaşam döngüsünü göz önünde bulundurun ve benzer yaşam döngüsünü paylaşan kaynakları tek bir şablon belirtiminde gruplandırın. Örneğin, dağıtımlarınız Azure Cosmos DB'nin birden çok örneğini içerir ve her örnek kendi veritabanlarını ve kapsayıcılarını içerir. Veritabanları ve kapsayıcılar çok fazla değişmediğinden, Cosmos DB örneğini ve temel veritabanlarını ve kapsayıcılarını içerecek bir şablon belirtimi oluşturmak istiyorsunuz. Daha sonra şablonlarınızda koşullu deyimleri ve kopyalama döngülerini kullanarak bu kaynakların birden çok örneğini oluşturabilirsiniz.

Eğitim kaynakları

Şablon özellikleri hakkında daha fazla bilgi edinmek ve uygulamalı yönergeler için bkz . Şablon belirtimlerini kullanarak yeniden kullanılabilir altyapı kodu kitaplıklarını yayımlama.

İpucu

ARM şablonlarıyla aynı özellikleri sunduğundan ve söz diziminin kullanımı daha kolay olduğundan Bicep'i öneririz. Daha fazla bilgi edinmek için bkz . Bicep'te Azure Resource Manager şablonu belirtimleri.

Şablon belirtimlerini neden kullanmalısınız?

Şablon belirtimleri aşağıdaki avantajları sağlar:

  • Şablon belirtiminiz için standart ARM şablonları kullanırsınız.
  • Erişimi SAS belirteçleri yerine Azure RBAC aracılığıyla yönetirsiniz.
  • Kullanıcılar şablona yazma erişimi olmadan şablon belirtimini dağıtabilir.
  • Şablon belirtimini PowerShell betiği veya DevOps işlem hattı gibi mevcut dağıtım işlemiyle tümleştirebilirsiniz.

Şablon özellikleri kurallı şablonlar oluşturmanıza ve bunları kuruluşunuzdaki ekiplerle paylaşmanıza olanak tanır. Şablon belirtimleri, dağıtım için Azure Resource Manager'da kullanılabildiğinden, ancak doğru izinlere sahip olmayan kullanıcılar tarafından erişilemediğinden güvenlidir. Kullanıcıların yalnızca şablonu dağıtmak için şablon belirtimine okuma erişimine ihtiyacı vardır, böylece şablonu başkalarının değiştirmesine izin vermeden paylaşabilirsiniz.

Şablonlarınız şu anda bir GitHub deposunda veya depolama hesabındaysa, şablonları paylaşmaya ve kullanmaya çalışırken çeşitli zorluklarla karşılaşırsınız. Şablonu dağıtmak için şablonu herkese açık hale getirmeniz veya SAS belirteçleriyle erişimi yönetmeniz gerekir. Bu sınırlamayı aşabilmek için kullanıcılar yerel kopyalar oluşturabilir ve bu kopyaların sonunda özgün şablonunuzdan farklı olması gerekir. Şablon belirtimleri şablonların paylaşımını basitleştirir.

Şablon belirtimine eklediğiniz şablonlar, kuruluşunuzun gereksinimlerini ve yönergelerini izlemek için kuruluşunuzdaki yöneticiler tarafından doğrulanmalıdır.

Gerekli izinler

Şablon belirtimi için tanımlanan iki Azure yerleşik rolü vardır:

Ayrıca, bicep dosyasını dağıtmak için izinlere de ihtiyacınız vardır. Bkz . Dağıtma - CLI veya Dağıtım - PowerShell.

Şablon belirtimi oluşturma

Aşağıdaki örnekte Azure'da depolama hesabı oluşturmaya yönelik basit bir şablon gösterilmektedir.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storageAccountType": {
      "type": "string",
      "defaultValue": "Standard_LRS",
      "allowedValues": [
        "Standard_LRS",
        "Standard_GRS",
        "Standard_ZRS",
        "Premium_LRS"
      ]
    }
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2019-06-01",
      "name": "[concat('store', uniquestring(resourceGroup().id))]",
      "location": "[resourceGroup().location]",
      "kind": "StorageV2",
      "sku": {
        "name": "[parameters('storageAccountType')]"
      }
    }
  ]
}

Şablon belirtimini oluşturduğunuzda PowerShell veya CLI komutları ana şablon dosyasına geçirilir. Ana şablon bağlantılı şablonlara başvuruda bulunursa, komutlar bunları bulur ve paketleyerek şablon belirtimini oluşturur. Daha fazla bilgi edinmek için bkz . Bağlı şablonlarla şablon belirtimi oluşturma.

Kullanarak bir şablon belirtimi oluşturun:

New-AzTemplateSpec -Name storageSpec -Version 1.0a -ResourceGroupName templateSpecsRg -Location westus2 -TemplateFile ./mainTemplate.json

ARM şablonlarını kullanarak şablon belirtimleri de oluşturabilirsiniz. Aşağıdaki şablon, depolama hesabı dağıtmak için bir şablon belirtimi oluşturur:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "templateSpecName": {
      "type": "string",
      "defaultValue": "CreateStorageAccount"
    },
    "templateSpecVersionName": {
      "type": "string",
      "defaultValue": "0.1"
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    }
  },
  "resources": [
    {
      "type": "Microsoft.Resources/templateSpecs",
      "apiVersion": "2021-05-01",
      "name": "[parameters('templateSpecName')]",
      "location": "[parameters('location')]",
      "properties": {
        "description": "A basic templateSpec - creates a storage account.",
        "displayName": "Storage account (Standard_LRS)"
      }
    },
    {
      "type": "Microsoft.Resources/templateSpecs/versions",
      "apiVersion": "2021-05-01",
      "name": "[format('{0}/{1}', parameters('templateSpecName'), parameters('templateSpecVersionName'))]",
      "location": "[parameters('location')]",
      "dependsOn": [
        "[resourceId('Microsoft.Resources/templateSpecs', parameters('templateSpecName'))]"
      ],
      "properties": {
        "mainTemplate": {
          "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
          "contentVersion": "1.0.0.0",
          "parameters": {
            "storageAccountType": {
              "type": "string",
              "defaultValue": "Standard_LRS",
              "allowedValues": [
                "Standard_LRS",
                "Standard_GRS",
                "Standard_ZRS",
                "Premium_LRS"
              ]
            }
          },
          "resources": [
            {
              "type": "Microsoft.Storage/storageAccounts",
              "apiVersion": "2019-06-01",
              "name": "[concat('store', uniquestring(resourceGroup().id))]",
              "location": "[resourceGroup().location]",
              "kind": "StorageV2",
              "sku": {
                "name": "[parameters('storageAccountType')]"
              }
            }
          ]
        }
      }
    }
  ]
}

Şablon belirtiminin boyutu yaklaşık 2 MB ile sınırlıdır. Şablon belirtim boyutu sınırı aşarsa TemplateSpecTooLarge hata kodunu alırsınız. Hata iletisinde şöyle yazıyor:

The size of the template spec content exceeds the maximum limit. For large template specs with many artifacts, the recommended course of action is to split it into multiple template specs and reference them modularly via TemplateLinks.

Aboneliğinizdeki tüm şablon belirtimlerini şu şekilde görüntüleyebilirsiniz:

Get-AzTemplateSpec

Bir şablon belirtiminin, sürümleri de dahil olmak üzere ayrıntılarını şu şekilde görüntüleyebilirsiniz:

Get-AzTemplateSpec -ResourceGroupName templateSpecsRG -Name storageSpec

Şablon belirtimlerini dağıtma

Şablon belirtimini oluşturduktan sonra, şablon belirtimi okuyucu rolüne sahip kullanıcılar bunu dağıtabilir. Buna ek olarak, ARM şablonunu dağıtmak için izinlere de ihtiyacınız vardır. Bkz . Dağıtma - CLI veya Dağıtım - PowerShell.

Şablon belirtimleri portal, PowerShell, Azure CLI aracılığıyla veya daha büyük bir şablon dağıtımında bağlantılı şablon olarak dağıtılabilir. Bir kuruluştaki kullanıcılar Azure'daki herhangi bir kapsama (kaynak grubu, abonelik, yönetim grubu veya kiracı) bir şablon belirtimi dağıtabilir.

Şablon için bir yol veya URI geçirmek yerine, kaynak kimliğini sağlayarak bir şablon belirtimi dağıtırsınız. Kaynak kimliği aşağıdaki biçime sahiptir:

/subscriptions/{subscription-id}/resourceGroups/{resource-group}/providers/Microsoft.Resources/templateSpecs/{template-spec-name}/versions/{template-spec-version}

Kaynak kimliğinin şablon belirtimi için bir sürüm adı içerdiğine dikkat edin.

Örneğin, aşağıdaki komutla bir şablon belirtimi dağıtırsınız.

$id = "/subscriptions/11111111-1111-1111-1111-111111111111/resourceGroups/templateSpecsRG/providers/Microsoft.Resources/templateSpecs/storageSpec/versions/1.0a"

New-AzResourceGroupDeployment `
  -TemplateSpecId $id `
  -ResourceGroupName demoRG

Uygulamada, genellikle dağıtmak istediğiniz şablon belirtiminin kimliğini almak için veya az ts show komutunu çalıştırırsınızGet-AzTemplateSpec.

$id = (Get-AzTemplateSpec -Name storageSpec -ResourceGroupName templateSpecsRg -Version 1.0a).Versions.Id

New-AzResourceGroupDeployment `
  -ResourceGroupName demoRG `
  -TemplateSpecId $id

Şablon belirtimini dağıtmak için url'yi aşağıdaki biçimde de açabilirsiniz:

https://portal.azure.com/#create/Microsoft.Template/templateSpecVersionId/%2fsubscriptions%2f{subscription-id}%2fresourceGroups%2f{resource-group-name}%2fproviders%2fMicrosoft.Resources%2ftemplateSpecs%2f{template-spec-name}%2fversions%2f{template-spec-version}

Parametreler

Parametreleri şablon belirtimine geçirmek, parametreleri bir ARM şablonuna geçirmek gibidir. Parametre değerlerini satır içi veya parametre dosyasına ekleyin.

Bir parametreyi satır içinde geçirmek için şunu kullanın:

New-AzResourceGroupDeployment `
  -TemplateSpecId $id `
  -ResourceGroupName demoRG `
  -StorageAccountType Standard_GRS

Yerel parametre dosyası oluşturmak için şunu kullanın:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "StorageAccountType": {
      "value": "Standard_GRS"
    }
  }
}

Ve bu parametre dosyasını şu şekilde geçirin:

New-AzResourceGroupDeployment `
  -TemplateSpecId $id `
  -ResourceGroupName demoRG `
  -TemplateParameterFile ./mainTemplate.parameters.json

Sürüm oluşturma

Şablon belirtimi oluşturduğunuzda, bunun için bir sürüm adı sağlarsınız. Şablon kodunu yinelerken, var olan bir sürümü güncelleştirebilir (düzeltmeler için) veya yeni bir sürüm yayımlayabilirsiniz. Sürüm bir metin dizesidir. Anlamsal sürüm oluşturma dahil olmak üzere herhangi bir sürüm oluşturma sistemini izlemeyi seçebilirsiniz. Şablon belirtiminin kullanıcıları, dağıtırken kullanmak istedikleri sürüm adını sağlayabilir. Aralıksız sayıda sürüme sahip olabilirsiniz.

Etiketleri kullanma

Etiketler , kaynaklarınızı mantıksal olarak düzenlemenize yardımcı olur. Azure PowerShell ve Azure CLI kullanarak şablon özelliklerine etiketler ekleyebilirsiniz:

New-AzTemplateSpec `
  -Name storageSpec `
  -Version 1.0a `
  -ResourceGroupName templateSpecsRg `
  -Location westus2 `
  -TemplateFile ./mainTemplate.json `
  -Tag @{Dept="Finance";Environment="Production"}
Set-AzTemplateSpec `
  -Name storageSpec `
  -Version 1.0a `
  -ResourceGroupName templateSpecsRg `
  -Location westus2 `
  -TemplateFile ./mainTemplate.json `
  -Tag @{Dept="Finance";Environment="Production"}

Belirtilen sürüm parametresiyle, ancak etiket/etiketler parametresi olmadan bir şablon belirtimi oluştururken veya değiştirirken:

  • Şablon belirtimi varsa ve etiketlere sahipse ancak sürüm yoksa, yeni sürüm mevcut şablon belirtimleriyle aynı etiketleri devralır.

Hem etiket/etiketler parametresi hem de belirtilen sürüm parametresiyle bir şablon belirtimi oluştururken veya değiştirirken:

  • Hem şablon belirtimi hem de sürümü yoksa etiketler hem yeni şablon belirtimine hem de yeni sürüme eklenir.
  • Şablon belirtimi mevcutsa ancak sürüm yoksa, etiketler yalnızca yeni sürüme eklenir.
  • Hem şablon belirtimi hem de sürüm varsa, etiketler yalnızca sürüm için geçerlidir.

Etiket/etiketler parametresi belirtilmiş ancak sürüm parametresi belirtilmemiş bir şablonu değiştirirken, etiketler yalnızca şablon belirtimine eklenir.

Bağlantılı şablonlarla şablon belirtimi oluşturma

Şablonunuzun ana şablonu bağlı şablonlara başvuruda bulunursa PowerShell ve CLI komutları bağlantılı şablonları yerel sürücünüzden otomatik olarak bulabilir ve paketleyebilir. Depolama hesaplarını veya depoları şablon belirtimlerini barındırmak için el ile yapılandırmanız gerekmez; her şey şablon belirtim kaynağında kendi içinde yer alır.

Aşağıdaki örnek, iki bağlantılı şablon içeren bir ana şablondan oluşur. Örnek, şablonun yalnızca bir alıntısıdır. Diğer şablonlara bağlanmak için adlı relativePath bir özellik kullandığına dikkat edin. Dağıtım kaynağı için veya sonraki bir 2020-06-01 sürümünü kullanmanız apiVersion gerekir.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  ...
  "resources": [
    {
      "type": "Microsoft.Resources/deployments",
      "apiVersion": "2020-06-01",
      ...
      "properties": {
        "mode": "Incremental",
        "templateLink": {
          "relativePath": "artifacts/webapp.json"
        }
      }
    },
    {
      "type": "Microsoft.Resources/deployments",
      "apiVersion": "2020-06-01",
      ...
      "properties": {
        "mode": "Incremental",
        "templateLink": {
          "relativePath": "artifacts/database.json"
        }
      }
    }
  ],
  "outputs": {}
}

Önceki örnekte şablon belirtimini oluşturmak için PowerShell veya CLI komutu yürütülürken, komut üç dosya bulur: ana şablon, web uygulaması şablonu (webapp.json) ve veritabanı şablonu (database.json) ve bunları şablon belirtiminde paketler.

Daha fazla bilgi için bkz . Öğretici: Bağlantılı şablonlarla şablon belirtimi oluşturma.

Şablon belirtimlerini bağlı şablon olarak dağıtma

Bir şablon belirtimi oluşturduktan sonra, bir ARM şablonundan veya başka bir şablon belirtiminden kolayca yeniden kullanabilirsiniz. Şablonunuza kaynak kimliğini ekleyerek bir şablon belirtimine bağlanırsınız. Ana şablonu dağıttığınızda bağlı şablon belirtimi otomatik olarak dağıtılır. Bu davranış modüler şablon belirtimleri geliştirmenize ve gerektiğinde bunları yeniden kullanmanıza olanak tanır.

Örneğin, ağ kaynaklarını dağıtan bir şablon belirtimi ve depolama kaynaklarını dağıtan başka bir şablon belirtimi oluşturabilirsiniz. ARM şablonlarında, ağ veya depolama kaynaklarını yapılandırmanız gerektiğinde bu iki şablon belirtimine bağlanırsınız.

Aşağıdaki örnek önceki örneğe benzer, ancak yerel bir şablona bağlanmak için özelliği yerine bir şablon belirtimine relativePath bağlanmak için özelliğini kullanırsınızid. Dağıtım kaynağı için API sürümü için kullanın 2020-06-01 . Örnekte, şablon belirtimleri templateSpecsRG adlı bir kaynak grubunda yer alır.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  ...
  "resources": [
    {
      "type": "Microsoft.Resources/deployments",
      "apiVersion": "2020-06-01",
      "name": "networkingDeployment",
      ...
      "properties": {
        "mode": "Incremental",
        "templateLink": {
          "id": "[resourceId('templateSpecsRG', 'Microsoft.Resources/templateSpecs/versions', 'networkingSpec', '1.0a')]"
        }
      }
    },
    {
      "type": "Microsoft.Resources/deployments",
      "apiVersion": "2020-06-01",
      "name": "storageDeployment",
      ...
      "properties": {
        "mode": "Incremental",
        "templateLink": {
          "id": "[resourceId('templateSpecsRG', 'Microsoft.Resources/templateSpecs/versions', 'storageSpec', '1.0a')]"
        }
      }
    }
  ],
  "outputs": {}
}

Şablon belirtimlerini bağlama hakkında daha fazla bilgi için bkz . Öğretici: Şablon belirtimlerini bağlantılı şablon olarak dağıtma.

Sonraki adımlar