Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ServiceBus的Azure ARM模板:无法引用自身_Azure_Devops_Azure Resource Manager_Servicebus - Fatal编程技术网

ServiceBus的Azure ARM模板:无法引用自身

ServiceBus的Azure ARM模板:无法引用自身,azure,devops,azure-resource-manager,servicebus,Azure,Devops,Azure Resource Manager,Servicebus,我编写了一个ARM模板来编写ServiceBus的部署和配置脚本。脚本的目标之一是使管理主题和订阅变得容易。为了实现这一点,脚本使用数组变量 这一切都很好,但每当我尝试为两个不同的主题使用相同的订阅名称时,我就会发现一个问题。现在,我了解到订阅只能映射到单个主题。脚本试图通过将订阅名称加入主题来说明这一点 我还应该注意,Azure UI将允许您在两个主题下使用相同的订阅名称。此脚本源自通过azure控制台设置此场景,然后导出ARM 我已经看过这个剧本几十次了,但我不知道原因。希望新的眼睛会有所帮

我编写了一个ARM模板来编写ServiceBus的部署和配置脚本。脚本的目标之一是使管理主题和订阅变得容易。为了实现这一点,脚本使用数组变量

这一切都很好,但每当我尝试为两个不同的主题使用相同的订阅名称时,我就会发现一个问题。现在,我了解到订阅只能映射到单个主题。脚本试图通过将订阅名称加入主题来说明这一点

我还应该注意,Azure UI将允许您在两个主题下使用相同的订阅名称。此脚本源自通过azure控制台设置此场景,然后导出ARM

我已经看过这个剧本几十次了,但我不知道原因。希望新的眼睛会有所帮助

以下是脚本:

{
    "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "envType": {
            "type": "string",
            "allowedValues": [ "dev", "prod" ],
            "defaultValue": "dev",
            "metadata": { "description": "The environment type being created" }
        },
        "sbSku": {
            "type": "string",
            "allowedValues": [ "Standard", "Premium" ],
            "defaultValue": "Standard",
            "metadata": { "description": "The messaging tier for service Bus namespace" }
        }
    },
    "variables": {
        "defaultSASKeyName": "RootManageSharedAccessKey",
        "authRuleResourceId": "[resourceId('Microsoft.ServiceBus/namespaces/authorizationRules', variables('sbNamespaceName'), variables('defaultSASKeyName'))]",
        "sbNamespaceName": "[concat(parameters('envType'), 'eventbus')]",
        "sbVersion": "2017-04-01",
        "sbTopics": [
            "mytopic1",
            "mytopic2",
            "mytopic3",
            "mytopic4"
        ],
        "sbSubscriptions": [
            { "Name": "mysubA", "Topic": "mytopic1" },
            { "Name": "mysubB", "Topic": "mytopic2" },
            { "Name": "mysubB", "Topic": "mytopic3" },
            { "Name": "mysubC", "Topic": "mytopic4" }
        ]
    },
    "resources": [
        {
            "apiVersion": "[variables('sbVersion')]",
            "location": "[resourceGroup().location]",
            "name": "[variables('sbNamespaceName')]",
            "properties": {},
            "sku": {
                "name": "[parameters('sbSku')]"
            },
            "tags": {},
            "type": "Microsoft.ServiceBus/Namespaces"
        },
        {
            "type": "Microsoft.ServiceBus/namespaces/topics",
            "name": "[concat(variables('sbNamespaceName'), '/', variables('sbTopics')[copyIndex()])]",
            "apiVersion": "[variables('sbVersion')]",
            "location": "[resourceGroup().location]",
            "dependsOn": [
                "[concat('Microsoft.ServiceBus/namespaces/', variables('sbNamespaceName'))]"
            ],
            "properties": {
                "defaultMessageTimeToLive": "P14D",
                "maxSizeInMegabytes": 1024,
                "requiresDuplicateDetection": false,
                "enablePartitioning": true
            },
            "copy": {
                "name": "topiccopy",
                "count": "[length(variables('sbTopics'))]",
                "mode": "Serial",
                "batchSize": 3
            }
        },
        {
            "type": "Microsoft.ServiceBus/namespaces/topics/subscriptions",
            "name": "[concat(variables('sbNamespaceName'), '/', variables('sbSubscriptions')[copyIndex()].Topic, '/', variables('sbSubscriptions')[copyIndex()].Name)]",
            "apiVersion": "2017-04-01",
            "location": "East US",
            "dependsOn": [
                "[resourceId('Microsoft.ServiceBus/namespaces', variables('sbNamespaceName'))]",
                "[resourceId('Microsoft.ServiceBus/namespaces/topics', variables('sbNamespaceName'), variables('sbSubscriptions')[copyIndex()].Topic)]"
            ],
            "properties": {
                "maxDeliveryCount": 10
            },
            "copy": {
                "name": "subscriptioncopy",
                "count": "[length(variables('sbSubscriptions'))]",
                "mode": "Serial",
                "batchSize": 1
            }
        }
    ],
    "outputs": {
        "NamespaceConnectionString": {
            "type": "string",
            "value": "[listkeys(variables('authRuleResourceId'), variables('sbVersion')).primaryConnectionString]"
        },
        "SharedAccessPolicyPrimaryKey": {
            "type": "string",
            "value": "[listkeys(variables('authRuleResourceId'), variables('sbVersion')).primaryKey]"
        },
        "Topics": {
            "type": "array",
            "value": "[concat(variables('sbTopics'))]"
        },
        "Subscriptionss": {
            "type": "array",
            "value": "[concat(variables('sbSubscriptions'))]"
        }
    }
}
在执行时:

New-AzureRmResourceGroupDeployment -ResourceGroupName {xxx} -TemplateFile arm.servicebus.example.json
它返回:

New-AzureRmResourceGroupDeployment : 2:58:05 PM - Error: Code=InvalidTemplate; Message=Deployment template validation
failed: 'The template resource 'Microsoft.ServiceBus/namespaces/deveventbus/topics/mytopic3/subscriptions/mysubB'
cannot reference itself. Please see https://aka.ms/arm-template-expressions/#reference for usage details.'.
At line:1 char:1
+ New-AzureRmResourceGroupDeployment -ResourceGroupName Wiretappers_Ste ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [New-AzureRmResourceGroupDeployment], Exception
    + FullyQualifiedErrorId : Microsoft.Azure.Commands.ResourceManager.Cmdlets.Implementation.NewAzureResourceGroupDep
   loymentCmdlet

New-AzureRmResourceGroupDeployment : The deployment validation failed
At line:1 char:1
+ New-AzureRmResourceGroupDeployment -ResourceGroupName Wiretappers_Ste ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : CloseError: (:) [New-AzureRmResourceGroupDeployment], InvalidOperationException
    + FullyQualifiedErrorId : Microsoft.Azure.Commands.ResourceManager.Cmdlets.Implementation.NewAzureResourceGroupDep
   loymentCmdlet
问题是由“sbSubscriptions”数组(mysubB/mytopic3)中的第三个条目引起的。这是在“资源”下的第三个对象中处理的

如果有人能看到我的疏忽,我将不胜感激

另外,如果有人知道如何让Azure工具在扩展了“复制”节点和函数(resourceId、concat)后输出模板json,那也会很有帮助

更新:2018-03-01 这是一个工作模板,供将来参考。有关详细信息,请参阅下面的所有评论

{
    "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "envType": {
            "type": "string",
            "allowedValues": [ "dev", "prod" ],
            "defaultValue": "dev",
            "metadata": { "description": "The environment type being created" }
        },
        "sbSku": {
            "type": "string",
            "allowedValues": [ "Standard", "Premium" ],
            "defaultValue": "Standard",
            "metadata": { "description": "The messaging tier for service Bus namespace" }
        }
    },
    "variables": {
        "sbNamespaceName": "[concat(parameters('envType'), 'eventbus')]",
        "sbVersion": "2017-04-01",
        "sbTopics": [
            "mytopic1",
            "mytopic2",
            "mytopic3",
            "mytopic4"
        ],
        "sbSubscriptions": [
            { "Name": "mysubA", "Topic": "mytopic1" },
            { "Name": "mysubB", "Topic": "mytopic2" },
            { "Name": "mysubB", "Topic": "mytopic3" },
            { "Name": "mysubC", "Topic": "mytopic4" }
        ]
    },
    "resources": [
        {
            "apiVersion": "[variables('sbVersion')]",
            "location": "[resourceGroup().location]",
            "name": "[variables('sbNamespaceName')]",
            "properties": {},
            "sku": {
                "name": "[parameters('sbSku')]"
            },
            "tags": {},
            "type": "Microsoft.ServiceBus/Namespaces"
        },
        {
            "type": "Microsoft.ServiceBus/namespaces/topics",
            "name": "[concat(variables('sbNamespaceName'), '/', variables('sbTopics')[copyIndex()])]",
            "apiVersion": "[variables('sbVersion')]",
            "location": "[resourceGroup().location]",
            "dependsOn": [
                "[variables('sbNamespaceName')]"
            ],
            "properties": {
                "defaultMessageTimeToLive": "P14D",
                "maxSizeInMegabytes": 1024,
                "requiresDuplicateDetection": false,
                "enablePartitioning": true
            },
            "copy": {
                "name": "topiccopy",
                "count": "[length(variables('sbTopics'))]",
                "mode": "Serial",
                "batchSize": 3
            }
        },
        {
            "type": "Microsoft.ServiceBus/namespaces/topics/subscriptions",
            "name": "[concat(variables('sbNamespaceName'), '/', variables('sbSubscriptions')[copyIndex()].Topic, '/', variables('sbSubscriptions')[copyIndex()].Name)]",
            "apiVersion": "[variables('sbVersion')]",
            "location": "[resourceGroup().location]",
            "dependsOn": [
                "[resourceId('Microsoft.ServiceBus/namespaces', variables('sbNamespaceName'))]",
                "[resourceId('Microsoft.ServiceBus/namespaces/topics', variables('sbNamespaceName'), variables('sbSubscriptions')[copyIndex()].Topic)]"
            ],
            "properties": {
                "maxDeliveryCount": 10
            },
            "copy": {
                "name": "subscriptioncopy",
                "count": "[length(variables('sbSubscriptions'))]"
            }
        }
    ],
    "outputs": {
        "Topics": {
            "type": "array",
            "value": "[concat(variables('sbTopics'))]"
        },
        "Subscriptionss": {
            "type": "array",
            "value": "[concat(variables('sbSubscriptions'))]"
        }
    }
}

好的,我不知道问题是什么,但这是可行的:

{
    "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "envType": {
            "type": "string",
            "allowedValues": [
                "dev",
                "prod",
                "zlp"
            ],
            "defaultValue": "zlp",
            "metadata": {
                "description": "The environment type being created"
            }
        },
        "sbSku": {
            "type": "string",
            "allowedValues": [
                "Standard",
                "Premium"
            ],
            "defaultValue": "Standard",
            "metadata": {
                "description": "The messaging tier for service Bus namespace"
            }
        }
    },
    "variables": {
        "sbNamespaceName": "[concat(parameters('envType'), 'eventbus')]",
        "sbVersion": "2017-04-01",
        "sbTopics": [
            "mytopic1",
            "mytopic2",
            "mytopic3",
            "mytopic4"
        ],
        "sbSubscriptions": [
            {
                "Name": "mysubA",
                "Topic": "mytopic1"
            },
            {
                "Name": "mysubB",
                "Topic": "mytopic2"
            },
            {
                "Name": "mysubB",
                "Topic": "mytopic3"
            },
            {
                "Name": "mysubC",
                "Topic": "mytopic4"
            }
        ]
    },
    "resources": [
        {
            "apiVersion": "[variables('sbVersion')]",
            "location": "[resourceGroup().location]",
            "name": "[variables('sbNamespaceName')]",
            "properties": {},
            "sku": {
                "name": "[parameters('sbSku')]"
            },
            "tags": {},
            "type": "Microsoft.ServiceBus/Namespaces"
        },
        {
            "type": "Microsoft.ServiceBus/namespaces/topics",
            "name": "[concat(variables('sbNamespaceName'), '/', variables('sbTopics')[copyIndex()])]",
            "apiVersion": "[variables('sbVersion')]",
            "location": "[resourceGroup().location]",
            "dependsOn": [
                "[variables('sbNamespaceName')]"
            ],
            "properties": {
                "defaultMessageTimeToLive": "P14D",
                "maxSizeInMegabytes": 1024,
                "requiresDuplicateDetection": false,
                "enablePartitioning": true
            },
            "copy": {
                "name": "topiccopy",
                "count": "[length(variables('sbTopics'))]"
            }
        },
        {
            "type": "Microsoft.ServiceBus/namespaces/topics/subscriptions",
            "name": "[concat(variables('sbNamespaceName'), '/', variables('sbSubscriptions')[copyIndex()].Topic, '/', variables('sbSubscriptions')[copyIndex()].Name)]",
            "apiVersion": "[variables('sbVersion')]",
            "location": "[resourceGroup().location]",
            "dependsOn": [
                "topiccopy"
            ],
            "properties": {
                "maxDeliveryCount": 10
            },
            "copy": {
                "name": "subscriptioncopy",
                "count": "[length(variables('sbSubscriptions'))]"
            }
        }
    ]
}
您还可以使用此选项进行调试:

Test-AzureRmResourceGroupDeployment -verbose or -debug

尝试
Test AzureRmResourceGroupDeployment-verbose
-debug
,它将向您显示(很可能)谢谢。带有-debug的TestAzureRMResourceGroupDeployment确实显示了扩展的模板。我到处寻找那个命令。我能够使用你的模板并使它工作。您提供的模板运行正常,但不完全符合我的要求。对于每个订阅,它实际上为每个主题创建一个dependsOn条目。但是,您的模板所暴露的是,我的问题的来源是在订阅的“复制”对象上指定的“模式”和“批大小”属性。移除这些,解决了我的问题。另外,感谢您在我使用变量时发现了一些疏忽。我将发布一个工作模板作为对原始消息的更新,因为它不适合这里。您还将区域硬编码放在一个位置,api版本也硬编码:)