如何在Azure Resource Manager嵌套模板中定义特定资源组

时间:2016-02-11 10:50:42

标签: azure azure-resource-manager iaas

有谁知道如何将ARM模板中的资源放入特定的不同资源组?这可能是一个RG中的存储和另一个RG中的网络,两者都是在相同或不同的模板中创建的(例如,嵌套)。

详情如下。

阅读最佳做法指南ARM template best practice和白皮书World Class ARM Templates Considerations and Proven Practices,建议部署的不同元素应位于不同的资源组中。例如,在IaaS解决方案中,您的DC可能位于Admin RG中,后端服务器位于另一个中,而您的客户端桌面位于第三个。

我目前正在尝试通过嵌套模板部署这样的解决方案,我偶然发现了一个问题,即创建的所有项目都会自动放置在关闭进程时选择的资源组内(即父模板)。我在线查看了各种文档,但显然无法找到将模板中创建的资源强制到特定资源组的方法。有没有人这样做过?

2 个答案:

答案 0 :(得分:5)

无法从模板将资源部署到多个资源组中。仅仅因为Azure Resource Manager REST API Reference只有一个地方来指定资源组名称这一事实。

ARM模板的概念是您创建资源组并将模板部署到其中,从而提供单个管理单元来管理这些资源。这改进了Azure Service Management模型,您必须单独管理每个资源。

嵌套资源组是满足您需求的一个很好的功能,但我从来没有听说过为Azure计划过这样的事情。

答案 1 :(得分:3)

对于在谷歌中发现这一点的其他人(就像我一样):

现在可以在一个ARM模板中将资源部署到多个资源组。 Microsoft提供了详细信息:https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-manager-cross-resource-group-deployment了解详细信息。

要执行此操作,请在主要部署模板中包含嵌套部署模板,并将嵌套部署设置为另一个资源组。这是MS站点的一个例子:

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-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": [
        {
            "apiVersion": "2017-05-10",
            "name": "nestedTemplate",
            "type": "Microsoft.Resources/deployments",
            "resourceGroup": "[parameters('secondResourceGroup')]",
            "subscriptionId": "[parameters('secondSubscriptionID')]",
            "properties": {
                "mode": "Incremental",
                "template": {
                    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
                    "contentVersion": "1.0.0.0",
                    "parameters": {},
                    "variables": {},
                    "resources": [
                        {
                            "type": "Microsoft.Storage/storageAccounts",
                            "name": "[variables('secondStorageName')]",
                            "apiVersion": "2017-06-01",
                            "location": "[parameters('secondStorageLocation')]",
                            "sku":{
                                "name": "Standard_LRS"
                            },
                            "kind": "Storage",
                            "properties": {
                            }
                        }
                    ]
                },
                "parameters": {}
            }
        },
        {
            "type": "Microsoft.Storage/storageAccounts",
            "name": "[variables('firstStorageName')]",
            "apiVersion": "2017-06-01",
            "location": "[resourceGroup().location]",
            "sku":{
                "name": "Standard_LRS"
            },
            "kind": "Storage",
            "properties": {
            }
        }
    ]
}