使用Azure ARM模板创建带有Sql筛选器的服务总线主题订阅?
我已经能够了解如何设置Azure ARM模板,该模板创建/管理Azure Service Bus命名空间、主题和订阅以接收所有消息。但是,在ARM Tempates上仍然非常缺乏Microsoft文档,我无法确定如何在可以使用.NET SDK管理的模板中为订阅定义SqlFilter 有人知道如何在ARM模板中向服务总线主题订阅添加Sql筛选器吗 这里有一个指向ARM模板的链接,该模板用于创建不带Sql筛选器的服务总线主题和订阅: 另外,这里是我所指的ARM模板的来源:使用Azure ARM模板创建带有Sql筛选器的服务总线主题订阅?,azure,azure-servicebus-topics,azure-resource-manager,Azure,Azure Servicebus Topics,Azure Resource Manager,我已经能够了解如何设置Azure ARM模板,该模板创建/管理Azure Service Bus命名空间、主题和订阅以接收所有消息。但是,在ARM Tempates上仍然非常缺乏Microsoft文档,我无法确定如何在可以使用.NET SDK管理的模板中为订阅定义SqlFilter 有人知道如何在ARM模板中向服务总线主题订阅添加Sql筛选器吗 这里有一个指向ARM模板的链接,该模板用于创建不带Sql筛选器的服务总线主题和订阅: 另外,这里是我所指的ARM模板的来源: { "$schema
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"serviceBusNamespaceName": {
"type": "string",
"metadata": {
"description": "Name of the Service Bus Namespace"
}
},
"serviceBusTopicName": {
"type": "string",
"metadata": {
"description": "Name of the Service Bus Topic"
}
},
"serviceBusTopicSubscriptionName": {
"type": "string",
"metadata": {
"description": "Name of the Service Bus Topic Subscription"
}
}
},
"variables": {
"sbVersion": "2015-08-01"
},
"resources": [
{
"apiVersion": "[variables('sbVersion')]",
"name": "[parameters('serviceBusNamespaceName')]",
"type": "Microsoft.ServiceBus/namespaces",
"location": "[resourceGroup().location]",
"properties": {
},
"resources": [
{
"apiVersion": "[variables('sbVersion')]",
"name": "[parameters('serviceBusTopicName')]",
"type": "Topics",
"dependsOn": [
"[concat('Microsoft.ServiceBus/namespaces/', parameters('serviceBusNamespaceName'))]"
],
"properties": {
"path": "[parameters('serviceBusTopicName')]"
},
"resources": [
{
"apiVersion": "[variables('sbVersion')]",
"name": "[parameters('serviceBusTopicSubscriptionName')]",
"type": "Subscriptions",
"dependsOn": [
"[parameters('serviceBusTopicName')]"
],
"properties": {
},
"resources": [
]
}
]
}
]
}
],
"outputs": {
}
}
Sql筛选器应该在规则中,因此我们应该在服务总线主题订阅中创建规则。例如:
"resources": [
{
"apiVersion": "[variables('sbVersion')]",
"name": "[parameters('serviceBusTopicSubscriptionName')]",
"type": "Subscriptions",
"dependsOn": [
"[parameters('serviceBusTopicName')]"
],
"properties": {
},
"resources": [
{
"apiVersion": "[variables('sbVersion')]",
"name": "[parameters('serviceBusTopicSubscriptionRuleName')]",
"type": "Rules",
"dependsOn": [
"[parameters('serviceBusTopicSubscriptionName')]"
],
"properties": {
},
"resources": [
]
}
]
}
]
我已尝试部署此模板,但出现以下错误:
New-AzureRmResourceGroupDeployment : InvalidTemplate: Deployment template validation failed: 'The template resource 'Microsoft.ServiceBus/namespaces/<serviceBusNamespaceName>/Topics/<serviceBusTopicName>/Subscriptions/<serviceBusTopicSubscriptionName>' cannot reference itself. Please see http://aka.ms/arm-template-expressions/#reference for usage details.'.
At line:1 char:1
+ New-AzureRmResourceGroupDeployment -Name ServiceBusTest -ResourceGrou ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : CloseError: (:) [New-AzureRmResourceGroupDeployment], CloudException
+ FullyQualifiedErrorId : Microsoft.Azure.Commands.Resources.NewAzureResourceGroupDeploymentCommand
No HTTP resource was found that matches the request URI
'https://sbgm.windows.net/subscriptions/<subscriptionid>/resourceGroups/Default-ServiceBus-EastUS/providers/Microsoft.ServiceBus/namespaces/<namespace>/topics/<topic>/Subscriptions/<subscription>/Rules/rule1?api-version=2014-09-01'
Get-AzureRmResource -ResourceGroupName Default-ServiceBus-EastUS `
-ResourceType Microsoft.ServiceBus/namespaces/topics/Subscriptions/Rules `
-ResourceName <namespace>/<topic>/<subscription>/rule1 `
-ApiVersion 2014-09-01
Get AzureRmResource-ResourceGroupName默认ServiceBus EastUS`
-ResourceType Microsoft.ServiceBus/namespaces/topics/Subscriptions/Rules`
-ResourceName///rule1`
-API2014-09-01版
我得到以下错误:
New-AzureRmResourceGroupDeployment : InvalidTemplate: Deployment template validation failed: 'The template resource 'Microsoft.ServiceBus/namespaces/<serviceBusNamespaceName>/Topics/<serviceBusTopicName>/Subscriptions/<serviceBusTopicSubscriptionName>' cannot reference itself. Please see http://aka.ms/arm-template-expressions/#reference for usage details.'.
At line:1 char:1
+ New-AzureRmResourceGroupDeployment -Name ServiceBusTest -ResourceGrou ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : CloseError: (:) [New-AzureRmResourceGroupDeployment], CloudException
+ FullyQualifiedErrorId : Microsoft.Azure.Commands.Resources.NewAzureResourceGroupDeploymentCommand
No HTTP resource was found that matches the request URI
'https://sbgm.windows.net/subscriptions/<subscriptionid>/resourceGroups/Default-ServiceBus-EastUS/providers/Microsoft.ServiceBus/namespaces/<namespace>/topics/<topic>/Subscriptions/<subscription>/Rules/rule1?api-version=2014-09-01'
未找到与请求URI匹配的HTTP资源
'https://sbgm.windows.net/subscriptions//resourceGroups/Default-ServiceBus-EastUS/providers/Microsoft.ServiceBus/namespaces//topics//Subscriptions//Rules/rule1?api-版本=2014-09-01'
$NamespaceManager.GetRules($TopicPath,$Name)
,我会成功地获取上述规则。这意味着规则已成功创建目前,ARM模板不支持创建/管理Azure Service Bus主题订阅筛选器。这现在可以通过以下快速启动模板实现,该模板演示了如何添加SQL筛选器: 另外,如果您希望通过ARM添加相关过滤器,我可以通过如下设置
规则资源来实现:
"resources": [
{
"apiVersion": "[variables('sbVersion')]",
"name": "$Default",
"type": "Rules",
"dependsOn": [
"[parameters('serviceBusSubscriptionName')]"
],
"properties": {
"filter": {
"correlationId": "[parameters('correlationId')]"
}
}
}
]
只需将以下内容添加到订阅资源中,即可创建SQL筛选器和操作:
,“资源”:[{
“apiVersion”:“[变量('sbVersion')]”,
“名称”:“$Default”,
“类型”:“规则”,
“dependsOn”:[“[参数('serviceBusSubscriptionName')]”,
“财产”:{
“filterType”:“SqlFilter”,
“sqlFilter”:{
“sqlExpression”:“1=1”,
“重新处理”:false
},
“行动”:{
“sqlExpression”:“set something='something'”
}
}
}]
用于添加Sql筛选器的订阅语法最近已更改
<snip>
"apiVersion": "2017-04-01",
"name": "[parameters('serviceBusSubscriptionName')]",
<snip>
"resources": [
{
"apiVersion": "2017-04-01",
"name": "[parameters('serviceBusRuleName')]",
"type": "Rules",
"dependsOn": [
"[parameters('serviceBusSubscriptionName')]"
],
"properties": {
"filterType": "SqlFilter",
"sqlFilter": {
"sqlExpression": "FilterTag = 'true'",
"requiresPreprocessing": "false"
},
"action": {
"sqlExpression": "set FilterTag = 'true'"
}
}
}
]
“apiVersion”:“2017-04-01”,
“名称”:“[参数('serviceBusSubscriptionName')]”,
“资源”:[
{
“apiVersion”:“2017-04-01”,
“名称”:“[参数('serviceBusRuleName')]”,
“类型”:“规则”,
“dependsOn”:[
“[参数('serviceBusSubscriptionName')”
],
“财产”:{
“filterType”:“SqlFilter”,
“sqlFilter”:{
“sqlExpression”:“FilterTag='true',
“重新处理”:“错误”
},
“行动”:{
“sqlExpression”:“set FilterTag=‘true’”
}
}
}
]
您可以在此ARM模板中找到最新的示例:
使用服务总线浏览器应用程序。
如果您已经知道要创建什么SQL过滤器,我建议您下载并使用此应用程序。从下载
您只需要连接到服务总线,然后将规则添加到订阅
然后,转到Azure门户并检索该特定服务总线的ARM模板李>
您将能够看到SQL过滤器是如何构建的
这是向订阅添加规则的方式:
这是您查看所创建规则的方式:
使用Service Bus Explorer应用程序非常简单。
由于它是用户交互的,因此您始终可以配置您的服务总线,然后转到Azure Portal检索ARM模板。对此有任何更新吗?我正在寻找同样的,好奇地知道,如果这个能力得到了包括now@MaheshJasti已经宣布,服务总线团队正在努力为服务总线添加ARM支持。它也应该在今年晚些时候提供,所以很快我们终于获得了服务总线ARM模板支持!谢谢,但您的回答无助于自动化或从ARM模板部署。它的帮助在于,您可以从此Service Bus Explorer应用程序创建规则,然后转到Azure portal检索生成的ARM模板。在该ARM模板中,您将能够看到如何在ARM模板中生成服务总线主题订阅的Sql筛选器,并将其用作创建您自己的Sql筛选器的指南