ARM şablonlarıyla kaynak grubu dağıtımları

Bu makalede, dağıtımınızın kapsamının bir kaynak grubuna nasıl uygulandığı açıklanmaktadır. Dağıtım için bir Azure Resource Manager şablonu (ARM şablonu) kullanırsınız. Makalede ayrıca dağıtım işleminde kapsamın kaynak grubunun ötesine nasıl genişletilmesi de gösterilmektedir.

İ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 . kaynak grubu dağıtımları.

Desteklenen kaynaklar

Kaynakların çoğu bir kaynak grubuna dağıtılabilir. Kullanılabilir kaynakların listesi için bkz . ARM şablonu başvurusu.

Şema

Şablonlar için aşağıdaki şemayı kullanın:

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

Parametre dosyaları için şunu kullanın:

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

Dağıtım komutları

Bir kaynak grubuna dağıtmak için kaynak grubu dağıtım komutlarını kullanın.

Azure CLI için az deployment group create komutunu kullanın. Aşağıdaki örnek, kaynak grubu oluşturmak için bir şablon dağıtır. parametresinde --resource-group belirttiğiniz kaynak grubu hedef kaynak grubudur.

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

ARM şablonlarını dağıtmaya yönelik dağıtım komutları ve seçenekleri hakkında daha ayrıntılı bilgi için bkz:

Dağıtım kapsamları

Bir kaynak grubuna dağıtım yaparken, kaynakları şu kaynaklara dağıtabilirsiniz:

  • işlemden hedef kaynak grubu
  • aynı abonelikteki veya diğer aboneliklerdeki diğer kaynak grupları
  • kiracıdaki herhangi bir abonelik
  • kaynak grubunun kiracısı

Yasaklanan tek kapsam geçişleri Kaynak Grubundan Yönetim Grubuna veya Abonelikten Yönetim Grubuna gerçekleşir.

Uzantı kaynağının kapsamı, dağıtım hedefinden farklı bir hedef olarak ayarlanabilir.

Şablonu dağıtan kullanıcının belirtilen kapsama erişimi olmalıdır.

Bu bölümde farklı kapsamların nasıl belirtileceğini gösterilmektedir. Bu farklı kapsamları tek bir şablonda birleştirebilirsiniz.

Hedef kaynak grubuna kapsam

Kaynakları hedef kaynağa dağıtmak için bu kaynakları şablonun kaynaklar bölümüne ekleyin.

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

Örnek bir şablon için bkz . Hedef kaynak grubuna dağıtma.

Aynı abonelikteki kaynak grubu kapsamı

Kaynakları aynı abonelikteki farklı bir kaynak grubuna dağıtmak için iç içe bir dağıtım ekleyin ve özelliğini ekleyin resourceGroup . Abonelik kimliğini veya kaynak grubunu belirtmezseniz, üst şablondaki abonelik ve kaynak grubu kullanılır. Dağıtımı çalıştırmadan önce tüm kaynak gruplarının mevcut olması gerekir.

Aşağıdaki örnekte, iç içe dağıtım adlı demoResourceGroupbir kaynak grubunu hedefler.

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

Örnek şablon için bkz . Birden çok kaynak grubuna dağıtma.

Farklı abonelikteki kaynak grubu kapsamı

Kaynakları farklı bir abonelikteki bir kaynak grubuna dağıtmak için iç içe dağıtım ekleyin ve ve resourceGroup özelliklerini ekleyinsubscriptionId. Aşağıdaki örnekte, iç içe dağıtım adlı demoResourceGroupbir kaynak grubunu hedefler.

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

Örnek şablon için bkz . Birden çok kaynak grubuna dağıtma.

Kapsam-abonelik

Kaynakları aboneliğe dağıtmak için iç içe dağıtım ekleyin ve özelliğini ekleyin subscriptionId . Abonelik, hedef kaynak grubunun aboneliği veya kiracıdaki başka bir abonelik olabilir. Ayrıca, iç içe dağıtım için özelliğini ayarlayın 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",
      "subscriptionId": "0000000-0000-0000-0000-000000000000",
      "properties": {
        "mode": "Incremental",
        "template": {
          subscription-resources
        }
      }
    }
  ],
  "outputs": {}
}

Örnek şablon için bkz . Kaynak grubu oluşturma.

Kapsamı kiracıya

Kiracıda kaynak oluşturmak için değerini olarak /ayarlayınscope. Şablonu dağıtan kullanıcının kiracıda dağıtmak için gerekli erişime sahip olması gerekir.

İç içe dağıtım kullanmak için ve locationayarlayınscope.

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

İsterseniz, yönetim grupları gibi bazı kaynak türleri için kapsamı / olarak da ayarlayabilirsiniz.

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

Daha fazla bilgi için bkz . Yönetim grubu.

Hedef kaynak grubuna dağıtma

Kaynakları hedef kaynak grubuna dağıtmak için bu kaynakları şablonun resources bölümünde tanımlayın. Aşağıdaki şablon, dağıtım işleminde belirtilen kaynak grubunda bir depolama hesabı oluşturur.

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

Birden çok kaynak grubuna dağıtma

Tek bir ARM şablonunda birden fazla kaynak grubuna dağıtabilirsiniz. Üst şablon için olandan farklı bir kaynak grubunu hedeflemek için iç içe veya bağlantılı şablon kullanın. Dağıtım kaynak türü içinde, iç içe şablonun dağıtılmasını istediğiniz abonelik kimliği ve kaynak grubu değerlerini belirtin. Kaynak grupları farklı aboneliklerde bulunabilir.

Not

Tek bir dağıtımda 800 kaynak grubuna dağıtabilirsiniz. Bu sınırlama genellikle üst şablon için belirtilen bir kaynak grubuna ve iç içe veya bağlı dağıtımlarda en fazla 799 kaynak grubuna dağıtım yapabileceğiniz anlamına gelir. Ancak, üst şablonunuz yalnızca iç içe veya bağlantılı şablonlar içeriyorsa ve kendisi herhangi bir kaynak dağıtmıyorsa, iç içe veya bağlantılı dağıtımlara en fazla 800 kaynak grubu ekleyebilirsiniz.

Aşağıdaki örnekte iki depolama hesabı dağıtılır. İlk depolama hesabı, dağıtım işleminde belirtilen kaynak grubuna dağıtılır. İkinci depolama hesabı ve secondSubscriptionID parametrelerinde belirtilen kaynak grubuna secondResourceGroup dağıtılır:

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

Mevcut olmayan bir kaynak grubunun adını ayarlarsanız resourceGroup dağıtım başarısız olur.

Önceki şablonu test etmek ve sonuçları görmek için PowerShell veya Azure CLI kullanın.

Aynı abonelikteki iki kaynak grubuna iki depolama hesabı dağıtmak için şunu kullanın:

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

İki aboneliğe iki depolama hesabı dağıtmak için şunu kullanın:

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

Kaynak grubu oluştur

Bir kaynak grubu dağıtımından abonelik düzeyine geçebilir ve bir kaynak grubu oluşturabilirsiniz. Aşağıdaki şablon, hedef kaynak grubuna bir depolama hesabı dağıtır ve belirtilen abonelikte yeni bir kaynak grubu oluşturur.

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

Sonraki adımlar