使用 ARM 範本來部署資源群組
本文會說明如何將部署範圍設為資源群組。 您可以使用 Azure Resource Manager 範本 (ARM 範本) 來進行部署。 本文也會示範如何在部署作業中將範圍擴充到資源群組之外。
支援的資源
大多數資源都可以部署至資源群組。 如需可用資源的清單,請參閱 ARM 範本參考。
結構描述
針對範本,請使用下列結構描述:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
...
}
針對參數檔案,請使用:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
...
}
部署命令
若要部署至資源群組,請使用資源群組部署命令。
若為 Azure CLI,請使用 az deployment group create。 下列範例會部署範本來建立資源群組。 您在 --resource-group
參數中指定的資源群組是目標資源群組。
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 範本的部署命令和選項,如需詳細資訊,請參閱:
- 使用 ARM 範本和 Azure 入口網站部署資源
- 使用 ARM 範本與 Azure CLI 來部署資源
- 使用 ARM 範本與 Azure PowerShell 來部署資源
- 使用 ARM 範本和 Azure Resource Manager REST API 部署資源
- 使用部署按鈕從 GitHub 存放庫部署範本
- 部署來自 Cloud Shell 的 ARM 範本
部署範圍
部署至資源群組時,您可以將資源部署至:
- 作業中的目標資源群組
- 同一個訂用帳戶或其他訂用帳戶內的其他資源群組
- 租用戶中的任何訂用帳戶
- 資源群組的租用戶
唯一禁止的範圍轉換會從資源群組轉換為管理群組,或從訂用帳戶轉換至管理群組。
延伸模組的範圍可以設為與部署目標不同的目標。
部署範本的使用者必須能夠存取指定的範圍。
本節說明如何指定不同的範圍。 您可以將這些不同的範圍合併至單一範本中。
將範圍設為目標資源群組
若要將資源部署至目標資源,請將這些資源新增至範本的資源區段。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
resource-group-resources
],
"outputs": {}
}
如需範本的範例,請參閱部署至目標資源群組。
將範圍設為相同訂用帳戶中的資源群組
若要將資源部署至相同訂用帳戶中的不同資源群組,請新增巢狀部署並納入 resourceGroup
屬性。 如未指定訂用帳戶識別碼或資源群組,則會使用父代範本中的訂用帳戶及資源群組。 執行部署之前,所有資源群組都必須存在。
在下列範例中,巢狀部署會以名為 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": {}
}
如需範本的範例,請參閱部署至多個資源群組。
將範圍設為不同訂用帳戶中的資源群組
若要將資源部署至不同訂用帳戶中的資源群組,請新增巢狀部署並納入 subscriptionId
和 resourceGroup
屬性。 在下列範例中,巢狀部署會以名為 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": {}
}
如需範本的範例,請參閱部署至多個資源群組。
訂用帳戶的範圍
若要將資源部署至訂用帳戶,請新增巢狀部署並納入 subscriptionId
屬性。 此訂用帳戶可以是目標資源群組的訂用帳戶,也可以是租用戶中的任何其他訂用帳戶。 此外,也請為巢狀部署設定 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": {}
}
如需範本的範例,請參閱建立資源群組。
租用戶的範圍
若要在租用戶建立資源,請將 scope
設為 /
。 部署範本的使用者必須擁有在租用戶部署的必要存取權。
若要使用巢狀部署,請設定 scope
和 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": {}
}
或者,您也可以將範圍 /
設為某些資源類型,例如管理群組。
{
"$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')]"
}
}
}
如需詳細資訊,請參閱管理群組。
部署至目標資源群組
若要在目標資源群組中部署資源,請在範本的 resources
區段中定義這些資源。 下列範本在部署作業所指定的資源群組中建立儲存體帳戶。
{
"$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]"
}
}
}
部署至多個資源群組
您可以在單一 ARM 範本中部署至多個資源群組。 若要以不同於父代範本的資源群組為目標,請使用巢狀或連結的範本。 在部署資源類型中,指定將成為巢狀範本部署目標的「訂用帳戶識別碼」和「資源群組」的值。 資源群組可以存在於不同的訂用帳戶中。
注意
您可以在單一部署中部署至 800 個資源群組。 一般而言,此限制表示您可以部署至一個指定用於父代範本的資源群組,並且可在巢狀或連結的部署中部署至最多 799 個資源群組。 不過,如果父代範本只包含巢狀或連結的範本,本身未部署任何資源,則您可以在巢狀或連結的部署中包含最多 800 個資源群組。
下列範例會部署兩個儲存體帳戶。 第一個儲存體帳戶會部署到部署作業中指定的資源群組。 第二個儲存體帳戶會部署到 secondResourceGroup
和 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": {}
}
}
]
}
如果您將 resourceGroup
設定為不存在的資源群組名稱,部署就會失敗。
若要測試上述範本並查看結果,請使用 PowerShell 或 Azure CLI。
若要將兩個儲存體帳戶部署至相同訂用帳戶中的兩個資源群組,請使用:
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
若要將兩個儲存體帳戶部署至兩個訂用帳戶,請使用:
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
建立資源群組
從資源群組部署中,您可以切換至訂用帳戶層級來建立資源群組。 下列範本將儲存體帳戶部署至目標資源群組,並在指定的訂用帳戶中建立新的資源群組。
{
"$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": {}
}
}
}
]
}
下一步
- 如需針對適用於雲端的 Microsoft Defender 部署工作區設定的範例,請參閱 deployASCwithWorkspaceSettings.json。