使用Azure ARM模板创建带有Sql筛选器的服务总线主题订阅?

使用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

我已经能够了解如何设置Azure ARM模板,该模板创建/管理Azure Service Bus命名空间、主题和订阅以接收所有消息。但是,在ARM Tempates上仍然非常缺乏Microsoft文档,我无法确定如何在可以使用.NET SDK管理的模板中为订阅定义SqlFilter

有人知道如何在ARM模板中向服务总线主题订阅添加Sql筛选器吗

这里有一个指向ARM模板的链接,该模板用于创建不带Sql筛选器的服务总线主题和订阅:

另外,这里是我所指的ARM模板的来源:

{
  "$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'
  • 当我尝试使用类似的PowerShell命令获取主题订阅规则时:

    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筛选器的指南