Menyebarkan templat ARM yang ditautkan dan ditumpuk

Selesai

Seiring dengan bertambahnya kompleksitas penyebaran, Anda mungkin ingin beralih ke pendekatan modular untuk menyebarkan sumber daya dengan menggunakan templat Azure Resource Manager (ARM) yang ditautkan atau ditumpuk. Templat yang ditautkan dan ditumpuk adalah cara untuk memecah penyebaran Anda ke dalam banyak templat terkait, lalu menyebarkannya bersama-sama melalui templat utama.

Templat tertaut

Templat tertaut mengacu pada tindakan menghubungkan file templat terpisah, yang direferensikan oleh link dari templat utama. Templat tertaut memungkinkan Anda membuat penyebaran yang dapat digunakan kembali, dapat diubah, dan modular yang terdiri dari banyak templat ARM individual.

Saat Anda mereferensikan templat yang ditautkan, Anda harus menyediakan nilai URI yang dapat diakses melalui HTTP atau HTTPS. Tidak seperti unit terakhir kami, di mana kami dapat menggunakan file lokal sebagai templat.

Untuk menggunakan templat yang ditautkan, Anda harus terlebih dahulu menggelar templat pada titik akhir yang dapat diakses publik seperti GitHub atau Azure Blob Storage. Gunakan akun penyimpanan Azure yang diamankan oleh token tanda tangan akses bersama (SAS) untuk menjaga templat Anda tetap aman dari akses publik.

Untuk menambahkan templat tertaut ke templat ARM Anda, tambahkan Microsoft.Resources/deploymentssumber daya dan templateLink properti yang dikonfigurasikan dengan lokasi templat.

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

Jika diperlukan, Anda juga dapat meneruskan nilai parameter ke dalam templat yang ditautkan dan mendapatkan output dari templat yang ditautkan pada waktu penyebaran. Parameter dapat diteruskan baik melalui file parameter atau melalui parameter sebaris.

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

Untuk solusi kecil hingga menengah, satu templat lebih mudah dipahami dan dikelola. Anda dapat melihat semua sumber daya dan nilai dalam satu file. Untuk skenario tingkat lanjut, templat yang ditautkan memungkinkan Anda untuk menguraikan solusi menjadi komponen yang ditargetkan. Anda dapat dengan mudah menggunakan kembali templat ini untuk skenario lain.

Templat bertumpuk

Templat bertumpuk mengacu pada tindakan menyematkan sintaks templat ke dalam templat utama. Templat bertumpuk memungkinkan skenario penyebaran tingkat lanjut seperti penyebaran ke beberapa cakupan Azure Resource Manager atau beberapa grup sumber daya dari satu file templat. Tidak seperti templat yang ditautkan, di mana setiap templat disimpan dalam file templatnya sendiri, templat bertumpuk memungkinkan Anda untuk menyimpan banyak templat individual dalam satu file. Ada beberapa alasan mengapa Anda mungkin ingin menggunakan struktur templat ini, seperti saat Anda menyebarkan sumber daya ke beberapa grup sumber daya atau cakupan penyebaran.

{
  "$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": {
  }
}

Saat Anda menggunakan templat bertumpuk, Anda dapat menentukan apakah ekspresi templat dievaluasi dalam cakupan templat induk atau templat bertumpuk. Cakupan menentukan bagaimana parameter, variabel, dan fungsi seperti resourceGroup dan subscription diselesaikan.