Penyebaran grup sumber daya dengan templat ARM

Artikel ini menjelaskan cara cakupan penyebaran Anda ke grup sumber daya. Anda menggunakan templat Azure Resource Manager (templat ARM) untuk penyebaran. Artikel ini juga menunjukkan cara memperluas cakupan di luar grup sumber daya dalam operasi penyebaran.

Tip

Kami merekomendasikan Bicep karena menawarkan kemampuan yang sama dengan templat ARM dan sintaksnya lebih mudah digunakan. Untuk mempelajari lebih lanjut, lihat penyebaran grup sumber daya.

Sumber daya yang didukung

Sebagian besar sumber daya dapat disebarkan ke grup sumber daya. Untuk daftar sumber daya yang tersedia, lihat Referensi templat ARM.

Skema

Untuk templat, gunakan skema berikut ini:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  ...
}

Untuk file parameter, gunakan:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
  ...
}

Perintah penyebaran

Untuk menyebarkan ke grup sumber daya, gunakan perintah penyebaran grup sumber daya.

Untuk Azure CLI, gunakan az deployment group create. Contoh berikut menyebarkan templat untuk membuat grup sumber daya. Grup sumber daya yang Anda tentukan dalam parameter --resource-group adalah grup sumber daya target.

az deployment group create \
  --name demoRGDeployment \
  --resource-group ExampleGroup \
  --template-uri "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.storage/storage-account-create/azuredeploy.json" \
  --parameters storageAccountType=Standard_GRS

Untuk informasi selengkapnya tentang perintah penyebaran dan opsi untuk menyebarkan templat ARM, lihat:

Cakupan penyebaran

Saat menyebarkan ke grup sumber daya, Anda bisa menggunakan sumber daya untuk:

  • grup sumber daya target dari operasi
  • grup sumber daya dalam langganan atau langganan lainnya
  • langganan apa pun di penyewa
  • penyewa untuk grup sumber daya

Sumber daya ekstensi dapat dicakup ke target yang berbeda dari target penyebaran.

Pengguna yang menyebarkan templat harus memiliki akses ke cakupan yang ditentukan.

Bagian ini memperlihatkan cara menentukan cakupan yang berbeda. Anda dapat menggabungkan cakupan yang berbeda ini dalam templat tunggal.

Cakupan untuk menargetkan grup sumber daya

Untuk menyebarkan sumber daya ke langganan target, tambahkan sumber daya tersebut ke bagian sumber daya templat.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "resources": [
    resource-group-resources
  ],
  "outputs": {}
}

Untuk templat contoh, lihat Menerapkan ke grup sumber daya target.

Cakupan ke grup sumber daya dalam langganan yang sama

Untuk menyebarkan sumber daya ke grup sumber daya dalam langganan, tambahkan penyebaran berlapis dan sertakan properti resourceGroup. Jika Anda tidak menentukan ID langganan atau grup sumber daya, grup langganan dan sumber daya dari templat induk akan digunakan. Semua grup sumber daya harus ada sebelum menjalankan penyebaran.

Dalam contoh berikut, penyebaran berlapis menargetkan grup sumber daya bernama demoResourceGroup.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "resources": [
    {
      "type": "Microsoft.Resources/deployments",
      "apiVersion": "2021-04-01",
      "name": "nestedDeployment",
      "resourceGroup": "demoResourceGroup",
      "properties": {
        "mode": "Incremental",
        "template": {
          resource-group-resources
        }
      }
    }
  ],
  "outputs": {}
}

Untuk templat contoh, lihat Menerapkan ke beberapa grup sumber daya.

Cakupan ke grup sumber daya dalam langganan yang berbeda

Untuk menyebarkan sumber daya ke grup sumber daya dalam langganan yang berbeda, tambahkan penyebaran berlapis dan sertakan properti subscriptionId dan resourceGroup. Dalam contoh berikut, penyebaran berlapis menargetkan grup sumber daya bernama demoResourceGroup.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "resources": [
    {
      "type": "Microsoft.Resources/deployments",
      "apiVersion": "2021-04-01",
      "name": "nestedDeployment",
      "subscriptionId": "00000000-0000-0000-0000-000000000000",
      "resourceGroup": "demoResourceGroup",
      "properties": {
        "mode": "Incremental",
        "template": {
          resource-group-resources
        }
      }
    }
  ],
  "outputs": {}
}

Untuk templat contoh, lihat Menerapkan ke beberapa grup sumber daya.

Cakupan ke langganan

Untuk menyebarkan sumber daya langganan, tambahkan penyebaran berlapis dan sertakan properti subscriptionId. Langganan bisa menjadi langganan untuk grup sumber daya target, atau langganan lainnya di penyewa. Selain itu, atur properti location untuk penyebaran berlapis.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "resources": [
    {
      "type": "Microsoft.Resources/deployments",
      "apiVersion": "2021-04-01",
      "name": "nestedDeployment",
      "location": "centralus",
      "subscriptionId": "0000000-0000-0000-0000-000000000000",
      "properties": {
        "mode": "Incremental",
        "template": {
          subscription-resources
        }
      }
    }
  ],
  "outputs": {}
}

Untuk templat contoh, lihat Membuat grup sumber daya.

Cakupan ke penyewa

Untuk membuat sumber daya di penyewa, atur scope ke /. Pengguna yang menyebarkan templat harus memiliki akses yang diperlukan untuk disebarkan di penyewa.

Untuk menggunakan penyebaran berlapis, atur scope dan location.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "resources": [
    {
      "type": "Microsoft.Resources/deployments",
      "apiVersion": "2021-04-01",
      "name": "nestedDeployment",
      "location": "centralus",
      "scope": "/",
      "properties": {
        "mode": "Incremental",
        "template": {
          tenant-resources
        }
      }
    }
  ],
  "outputs": {}
}

Atau, Anda dapat mengatur cakupan ke / untuk beberapa jenis sumber daya, seperti grup manajemen.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "mgName": {
      "type": "string",
      "defaultValue": "[concat('mg-', uniqueString(newGuid()))]"
    }
  },
  "resources": [
    {
      "type": "Microsoft.Management/managementGroups",
      "apiVersion": "2021-04-01",
      "name": "[parameters('mgName')]",
      "scope": "/",
      "location": "eastus",
      "properties": {}
    }
  ],
  "outputs": {
    "output": {
      "type": "string",
      "value": "[parameters('mgName')]"
    }
  }
}

Untuk informasi selengkapnya, lihat Grup manajemen.

Menyebarkan untuk menargetkan grup sumber daya

Untuk menggunakan sumber daya dalam grup sumber daya target, tentukan sumber daya resources tersebut di bagian templat. Templat berikut membuat akun penyimpanan di grup sumber daya yang ditentukan dalam operasi penyebaran.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storagePrefix": {
      "type": "string",
      "minLength": 3,
      "maxLength": 11
    },
    "storageSKU": {
      "type": "string",
      "defaultValue": "Standard_LRS",
      "allowedValues": [
        "Standard_LRS",
        "Standard_GRS",
        "Standard_RAGRS",
        "Standard_ZRS",
        "Premium_LRS",
        "Premium_ZRS",
        "Standard_GZRS",
        "Standard_RAGZRS"
      ]
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    }
  },
  "variables": {
    "uniqueStorageName": "[concat(parameters('storagePrefix'), uniqueString(resourceGroup().id))]"
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-09-01",
      "name": "[variables('uniqueStorageName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "[parameters('storageSKU')]"
      },
      "kind": "StorageV2",
      "properties": {
        "supportsHttpsTrafficOnly": true
      }
    }
  ],
  "outputs": {
    "storageEndpoint": {
      "type": "object",
      "value": "[reference(variables('uniqueStorageName')).primaryEndpoints]"
    }
  }
}

Menyebarkan ke beberapa grup sumber daya

Anda dapat menyebarkan ke lebih dari satu grup sumber daya dalam satu templat ARM. Untuk menargetkan grup sumber daya yang berbeda dengan yang ada untuk templat induk, gunakan templat berlapis atau tertaut. Dalam tipe sumber daya penyebaran, tentukan nilai untuk ID langganan dan grup sumber daya yang ingin Anda sebarkan templat berlapisnya. Grup sumber daya dapat ada di langganan yang berbeda.

Catatan

Anda dapat menyebarkan ke 800 grup sumber daya dalam satu penyebaran. Biasanya, batasan ini berarti Anda dapat menyebarkan ke satu grup sumber daya yang ditentukan untuk templat induk, dan hingga 799 grup sumber daya dalam penyebaran yang berlapis atau ditautkan. Namun, jika templat induk Anda hanya berisi templat yang ditumpuk atau ditautkan dan tidak menyebarkan sumber daya apa pun, maka Anda dapat menyertakan hingga 800 grup sumber daya dalam penyebaran yang berlapis atau ditautkan.

Contoh berikut menggunakan dua akun penyimpanan. Akun penyimpanan pertama disebarkan ke grup sumber daya yang ditentukan dalam operasi penyebaran. Akun penyimpanan kedua disebarkan ke grup sumber daya yang ditentukan dalam parameter secondResourceGroup dan secondSubscriptionID.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storagePrefix": {
      "type": "string",
      "maxLength": 11
    },
    "secondResourceGroup": {
      "type": "string"
    },
    "secondSubscriptionID": {
      "type": "string",
      "defaultValue": ""
    },
    "secondStorageLocation": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    }
  },
  "variables": {
    "firstStorageName": "[concat(parameters('storagePrefix'), uniqueString(resourceGroup().id))]",
    "secondStorageName": "[concat(parameters('storagePrefix'), uniqueString(parameters('secondSubscriptionID'), parameters('secondResourceGroup')))]"
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-04-01",
      "name": "[variables('firstStorageName')]",
      "location": "[resourceGroup().location]",
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "Storage",
      "properties": {
      }
    },
    {
      "type": "Microsoft.Resources/deployments",
      "apiVersion": "2021-04-01",
      "name": "nestedTemplate",
      "resourceGroup": "[parameters('secondResourceGroup')]",
      "subscriptionId": "[parameters('secondSubscriptionID')]",
      "properties": {
        "mode": "Incremental",
        "template": {
          "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
          "contentVersion": "1.0.0.0",
          "parameters": {},
          "variables": {},
          "resources": [
            {
              "type": "Microsoft.Storage/storageAccounts",
              "apiVersion": "2021-04-01",
              "name": "[variables('secondStorageName')]",
              "location": "[parameters('secondStorageLocation')]",
              "sku": {
                "name": "Standard_LRS"
              },
              "kind": "Storage",
              "properties": {
              }
            }
          ]
        },
        "parameters": {}
      }
    }
  ]
}

Jika Anda mengatur resourceGroup ke nama grup sumber daya yang tidak ada, penyebaran akan gagal.

Untuk menguji templat sebelumnya dan melihat hasilnya, gunakan PowerShell atau Azure CLI.

Untuk menyebarkan dua akun penyimpanan ke dua grup sumber daya dalam langganan yang sama, gunakan:

firstRG="primarygroup"
secondRG="secondarygroup"

az group create --name $firstRG --location southcentralus
az group create --name $secondRG --location eastus
az deployment group create \
  --name ExampleDeployment \
  --resource-group $firstRG \
  --template-uri https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/crosssubscription.json \
  --parameters storagePrefix=tfstorage secondResourceGroup=$secondRG secondStorageLocation=eastus

Untuk menyebarkan dua akun penyimpanan ke dua langganan, gunakan:

firstRG="primarygroup"
secondRG="secondarygroup"

firstSub="<first-subscription-id>"
secondSub="<second-subscription-id>"

az account set --subscription $secondSub
az group create --name $secondRG --location eastus

az account set --subscription $firstSub
az group create --name $firstRG --location southcentralus

az deployment group create \
  --name ExampleDeployment \
  --resource-group $firstRG \
  --template-uri https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/crosssubscription.json \
  --parameters storagePrefix=storage secondResourceGroup=$secondRG secondStorageLocation=eastus secondSubscriptionID=$secondSub

Buat grup sumber daya

Dari penyebaran grup sumber daya, Anda dapat beralih ke tingkat langganan dan membuat grup sumber daya. Templat berikut ini menyebarkan akun penyimpanan ke grup sumber daya target, dan membuat grup sumber daya baru dalam langganan yang ditentukan.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storagePrefix": {
      "type": "string",
      "maxLength": 11
    },
    "newResourceGroupName": {
      "type": "string"
    },
    "nestedSubscriptionID": {
      "type": "string"
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    }
  },
  "variables": {
    "storageName": "[concat(parameters('storagePrefix'), uniqueString(resourceGroup().id))]"
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-04-01",
      "name": "[variables('storageName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "Storage",
      "properties": {
      }
    },
    {
      "type": "Microsoft.Resources/deployments",
      "apiVersion": "2021-04-01",
      "name": "demoSubDeployment",
      "location": "westus",
      "subscriptionId": "[parameters('nestedSubscriptionID')]",
      "properties": {
        "mode": "Incremental",
        "template": {
          "$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
          "contentVersion": "1.0.0.0",
          "parameters": {},
          "variables": {},
          "resources": [
            {
              "type": "Microsoft.Resources/resourceGroups",
              "apiVersion": "2021-04-01",
              "name": "[parameters('newResourceGroupName')]",
              "location": "[parameters('location')]",
              "properties": {}
            }
          ],
          "outputs": {}
        }
      }
    }
  ]
}

Langkah berikutnya