Проблема с идентификатором ресурса шаблона ARM Azure с вложенными развертываниями на уровне подписки

Я работаю над шаблоном ARM, чтобы

A. развернуть группу ресурсов B. развернуть среду ASE.

Чтобы сделать и то, и другое, как я понимаю, мне нужно запустить развертывание на уровне подписки на область New-AzDeployment -Name TestingASE -TemplateFile $HOME/azuredeploy.json -TemplateParameterFile $HOME/parameters.json -Location 'West Europe'

Мой шаблон уже довольно длинный - так что вот самые важные части (я думаю).

{
    "$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
    "contentVersion": "1.0.0.1",
    "parameters": {
....
"resources": [
        // Resource Group
        {
            "type": "Microsoft.Resources/resourceGroups",
            "apiVersion": "2018-05-01",
            "location": "[parameters('Location')]",
            "name": "[parameters('rgName')]",
            "properties": {}
        },
        {
            "type": "Microsoft.Resources/deployments",
            "apiVersion": "2019-05-01",
            "name": "storageDeployment",
            "resourceGroup": "[parameters('rgName')]",
            "dependsOn": [
                "[resourceId('Microsoft.Resources/resourceGroups/', parameters('rgName'))]"
            ],
            "properties": {
                "mode": "Incremental",
                "template": {
                    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
                    "contentVersion": "1.0.0.0",
                    "parameters": {},
                    "variables": {},
                    "resources": [
....
{
                            "apiVersion": "2019-04-01",
                            "name": "[parameters('asevnetname')]",
                            "type": "Microsoft.Network/virtualNetworks",
                            "location": "[parameters('Location')]",
                            "properties": {
                                "addressSpace": {
                                    "addressPrefixes": [
                                        "[parameters('addressPrefix')]"
                                    ]
                                },
                                "subnets": [
                                    {
                                        "name": "[parameters('subnetName')]",
...
{
                            "apiVersion": "2019-02-01",
                            "type": "Microsoft.Web/hostingEnvironments",
                            "name": "[parameters('aseName')]",
                            "kind": "ASEV2",
                            "location": "[parameters('Location')]",
                            "properties": {
                                "name": "[parameters('aseName')]",
                                "location": "[parameters('Location')]",
                                "InternalLoadBalancingMode": "[parameters('ilbMode')]",
                                "virtualNetwork": {
                                    "Id": "[resourceId(subscription().id, resourceGroup().Id, 'Microsoft.Network/virtualNetworks/subnets',parameters('asevnetname'),parameters('subnetName'))]"
                                }
....

Это дает мне вывод «Функция шаблона 'RESOURCEGROUP' не ожидается в этом месте» Насколько я понимаю, я следую рекомендациям https://docs.microsoft.com/en-gb/azure/azure-resource-manager/templates/template-functions-resource#resourcegroup

Функцию resourceGroup () нельзя использовать в шаблоне, развернутом на уровне подписки. Его можно использовать только в шаблонах, развернутых в группе ресурсов. Вы можете использовать функцию resourceGroup () в связанном или вложенном шаблоне (с внутренней областью действия), который нацелен на группу ресурсов, даже если родительский шаблон развернут в подписке. В этом сценарии связанный или вложенный шаблон развертывается на уровне группы ресурсов.

Спасибо, что помогли с этим.


person Mathias Indermühle    schedule 10.01.2020    source источник


Ответы (1)


Ошибка произошла на resourceId формат, он должен быть

resourceId([subscriptionId], [resourceGroupName], resourceType, resourceName1, [resourceName2], ...)

Чтобы получить идентификатор ресурса в той же подписке, но в другой группе ресурсов, укажите имя группы ресурсов.

"[resourceId('otherResourceGroup', 'Microsoft.Storage/storageAccounts', 'examplestorage')]"

Итак, в этом случае virtualNetwork ID в свойствах Microsoft.Web/hostingEnvironments должен быть

"virtualNetwork": {
 "Id": "[resourceId(parameters('rgName'), 'Microsoft.Network/virtualNetworks/subnets',parameters('asevnetname'),parameters('subnetName'))]"
}

or

"Id": "[resourceId(resourceGroup().name, 'Microsoft.Network/virtualNetworks/subnets',parameters('asevnetname'),parameters('subnetName'))]"

Для получения дополнительной информации вы можете получить дополнительные ссылки на развертывание ASE в подсети из этот шаблон.

person Nancy Xiong    schedule 15.01.2020