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

Bu makalede, bir kaynak grubu için dağıtım kapsamı açıklanmıştır. Dağıtım için Azure Resource Manager şablonu (ARM şablonu) kullanırsınız. Makalede ayrıca dağıtım işlemi sırasında kapsamı kaynak grubunun ötesine nasıl genişletecekleri de gösterir.

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 şunları 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 kullanın. Aşağıdaki örnek, kaynak grubu oluşturmak için bir şablon dağıtır:

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 ilişkin 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 yapmak için kaynakları şu kaynaklara dağıtın:

  • işlemden hedef kaynak grubu
  • aynı abonelikte veya diğer aboneliklerde yer alan diğer kaynak grupları
  • kiracıda herhangi bir abonelik
  • kaynak grubunun kiracısı

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

Şablonu dağıtan kullanıcının belirtilen kapsama erişimi olması gerekir.

Bu bölümde, farklı kapsamların nasıl belirt İşlenli olduğu gösterir. Bu farklı kapsamları tek bir şablonda birleştirebilirsiniz.

Hedef kaynak grubunun 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ı abonelikte kaynak grubunun kapsamı

Kaynakları aynı abonelikte farklı bir kaynak grubuna dağıtmak için iç içe geçmiş bir dağıtım ekleyin ve özelliğini resourceGroup ekleyin. Abonelik kimliğini veya kaynak grubunu belirtmezseniz, üst şablondan 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 geçmiş dağıtım adlı bir kaynak grubunu demoResourceGroup 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 bir şablon için bkz. Birden çok kaynak grubu dağıtma.

Farklı abonelikte kaynak grubu kapsamı

Kaynakları farklı bir abonelikte bulunan bir kaynak grubuna dağıtmak için iç içe geçmiş bir dağıtım ekleyin ve ve subscriptionId özelliklerini resourceGroup ekleyin. Aşağıdaki örnekte, iç içe geçmiş dağıtım adlı bir kaynak grubunu demoResourceGroup 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 bir şablon için bkz. Birden çok kaynak grubu dağıtma.

Kapsamdan aboneliğe

Kaynakları aboneliğe dağıtmak için iç içe geçmiş bir dağıtım ekleyin ve özelliğini subscriptionId ekleyin. Abonelik, hedef kaynak grubunun aboneliği veya kiracıda başka bir abonelik olabilir. Ayrıca, iç location içe dağıtımın özelliğini ayarlayın.

{
  "$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 bir şablon için bkz. Kaynak grubu oluşturma.

Kiracı kapsamı

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

İç içe dağıtım kullanmak için ve scope location ayarlayın.

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

Ya da kapsamı yönetim grupları gibi / bazı kaynak türleri için olarak da ayarlayın.

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

Hedef kaynak grubunda kaynakları dağıtmak için bu kaynakları resources şablonun 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-04-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 grubu dağıtma

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

Not

Tek bir dağıtımda 800 kaynak grubu dağıtabilirsiniz. Bu sınırlama genellikle üst şablon için belirtilen bir kaynak grubuna ve iç içe geçmiş veya bağlı dağıtımlarda en fazla 799 kaynak grubuna dağıtabilirsiniz. Ancak, üst şablonunuz yalnızca iç içe veya bağlı şablonlar içeriyorsa ve kendisi herhangi bir kaynak dağıtmıyorsa, iç içe veya bağlı dağıtımlara en fazla 800 kaynak grubu dahil edersiniz.

Aşağıdaki örnek iki depolama hesabı dağıtır. İlk depolama hesabı, dağıtım işlemi sırasında belirtilen kaynak grubuna dağıtılır. İkinci depolama hesabı, ve parametrelerinde belirtilen kaynak grubuna secondResourceGroup secondSubscriptionID 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 resourceGroup bir kaynak grubunun adına ayarlanırsanız dağıtım başarısız olur.

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

Aynı abonelikte iki kaynak grubu için iki depolama hesabı dağıtmak için 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 abonelik için iki depolama hesabı dağıtmak için 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şturma

Kaynak grubu dağıtımından aboneliğin düzeyine geçiş yapmak ve bir kaynak grubu oluşturmaktır. 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