Bağlantılı ve iç içe yerleştirilmiş ARM şablonlarını dağıtma

Tamamlandı

Dağıtımınız daha karmaşık hale geldikçe Azure Resource Manager (ARM) bağlantılı veya iç içe yerleştirilmiş şablonlarını kullanarak kaynakları dağıtmaya yönelik daha modüler bir yaklaşıma geçiş yapmanız yararlı olabilir. Bağlantılı ve iç içe yerleştirilmiş şablonlar, dağıtımınızı birbiriyle alakalı çok sayıda şablona ayırmak ve bunları ana şablon aracılığıyla birlikte dağıtmak için kullanabileceğiniz yöntemlerdir.

Bağlantılı şablon

Bağlı şablonlar, ana şablondan bir bağlantıyla başvurulan ayrı şablon dosyalarını birbirine bağlamayı ifade eder. Bağlı şablonlar sayesinde çok sayıda bağımsız ARM şablonundan oluşan yeniden kullanılabilir, düzenlenebilir ve modüler dağıtımlar oluşturabilirsiniz.

Bağlı bir şablona başvururken, HTTP veya HTTPS üzerinden erişilebilen bir URI değeri sağlamanız gerekir. Şablon olarak yerel bir dosya kullanabildiğimiz son ünitemizden farklı olarak.

Bağlı şablonları kullanmak için, ilk önce şablonları GitHub veya Azure Blob Depolama gibi genel olarak erişilebilen bir uç noktada hazırlamanız gerekir. Şablonlarınızı genel erişimden korumak için güvenliği paylaşılan erişim imzası (SAS) belirteciyle sağlanan bir Azure Depolama hesabı kullanın.

ARM şablonunuza bağlı bir şablon eklemek için bir Microsoft.Resources/deployments kaynak ve şablonun templateLink konumuyla yapılandırılan özelliği ekleyin.

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "name": {
            "type": "string",
            "defaultValue": "linkeddemo001"
        }
    },
    "variables": {
        "linked-template": "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/mslearn-arm-Module-sample/storage.json",
        "linked-template-two": "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/mslearn-arm-Module-sample/identity.json"
    },
    "resources": [
        {
            "name": "storage",
            "type": "Microsoft.Resources/deployments",
            "apiVersion": "2019-10-01",
            "properties": {
                "mode": "Incremental",
                "templateLink": {
                    "uri": "[variables('linked-template')]",
                    "contentVersion": "1.0.0.0"
                },
                "parameters": {
                    "name": { "value": "[parameters('name')]" },
                    "location": { "value": "[resourceGroup().location]" }
                }
            }
        },
        {
            "name": "identity",
            "type": "Microsoft.Resources/deployments",
            "apiVersion": "2019-10-01",
            "dependsOn": [
                "[resourceId('Microsoft.Resources/deployments','storage')]"
            ],
            "properties": {
                "mode": "Incremental",
                "templateLink": {
                    "uri": "[variables('linked-template-two')]",
                    "contentVersion": "1.0.0.0"
                },
                "parameters": {
                    "name": { "value": "[parameters('name')]" },
                    "location": { "value": "[resourceGroup().location]" }
                }
            }
        }
    ],
    "outputs": {
        "storageURI": {
            "type": "string",
            "value": "[reference('storage').outputs.storageEndpoint.value]"
        }
    }
}

Gerekirse bağlantılı şablona parametre değerleri geçirebilir ve dağıtım zamanında bağlantılı şablonun çıkışını alabilirsiniz. Parametreleri bir parametre dosyası veya satır içi parametreler aracılığıyla geçirebilirsiniz.

{
  "name": "storage",
  "type": "Microsoft.Resources/deployments",
  "apiVersion": "2019-10-01",
  "properties": {
      "mode": "Incremental",
      "templateLink": {
          "uri": "[variables('linked-template')]",
          "contentVersion": "1.0.0.0"
      },
      "parameters": {
          "name": { "value": "[parameters('name')]" },
          "location": { "value": "[resourceGroup().location]" }
      }
  }
}

Küçük ve orta ölçekli çözümler için tek bir şablonun anlaşılması ve bakımının yapılması daha kolay olacaktır. Tüm kaynakları ve değerleri tek bir dosyada görebilirsiniz. Gelişmiş senaryolarda bağlantılı şablonlar çözümü hedeflenen bileşenlere ayırmanıza sağlar. Bu şablonları diğer senaryolar için kolayca yeniden kullanabilirsiniz.

İç içe yerleştirilmiş şablon

İç içe yerleştirilmiş şablon sanal makine şablonu, ana şablon içine şablon söz dizimi eklenmesini ifade eder. İç içe yerleştirilmiş şablonlar, tek bir şablon dosyasından birden çok Azure Resource Manager kapsamına veya birden çok kaynak grubuna dağıtım yapma gibi gelişmiş dağıtım senaryolarını mümkün kılar. İç içe yerleştirilmiş şablonlar, her şablonun kendi şablon dosyalarında depolandığı bağlantılı şablonlardan farklı olarak tek bir dosyada çok sayıda bağımsız şablon depolamanıza olanak tanır. Kaynakları birden çok kaynak grubuna veya dağıtım kapsamına dağıtırken bu şablon yapısını kullanmak istemenin çeşitli nedenleri vardır.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storageAccountName": {
      "type": "string"
    }
  },
  "resources": [
    {
      "type": "Microsoft.Resources/deployments",
      "apiVersion": "2019-10-01",
      "name": "nestedTemplate1",
      "properties": {
        "mode": "Incremental",
        "template": {
          "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
          "contentVersion": "1.0.0.0",
          "resources": [
            {
              "type": "Microsoft.Storage/storageAccounts",
              "apiVersion": "2019-04-01",
              "name": "[parameters('storageAccountName')]",
              "location": "West US",
              "sku": {
                "name": "Standard_LRS"
              },
              "kind": "StorageV2"
            }
          ]
        }
      }
    }
  ],
  "outputs": {
  }
}

İç içe yerleştirilmiş şablon kullanırken şablon ifadelerinin ana şablon kapsamında mı yoksa iç içe yerleştirilmiş şablon kapsamında mı değerlendirileceğini belirtebilirsiniz. Kapsam, resourceGroup ve subscription gibi parametrelerin, değişkenlerin ve işlevlerin nasıl çözümleneceğini belirler.