带有ARM模板的Azure IoT事件订阅

时间:2019-06-24 07:03:19

标签: windows azure azure-storage azure-iot-hub azure-eventgrid

我正在尝试使用ARM模板和PowerShell将Azure IoT设备连接的事件订阅部署到Azure存储队列。我已使用以下模板进行部署。另外,我已经阅读了很多有关Microsoft的文章。但是找不到任何解决方案。请帮我弄清楚。

 "resources": [
    {
        "type": "Microsoft.EventGrid/eventSubscriptions",
        "name": "DeviceConnected",
        "location": "[resourceGroup().location]",
        "apiVersion": "2018-01-01",
        "dependsOn": [
          "[resourceId('Microsoft.Devices/IotHubs', variables('iotHubName'))]"
        ],
        "properties": {

          "destination": {
            "endpointType": "storagequeue",
            "properties": {
              "queueName":"device-connnection-state-queue",
              "resourceId": "[resourceId('Microsoft.Storage/storageAccounts', variables('storageName'))]"
            }
        },

          "filter": {
            "includedEventTypes": [
              "Microsoft.Devices.DeviceConnected"
            ]
          }
        }
      }
],

错误显示如下 enter image description here

2 个答案:

答案 0 :(得分:1)

  1. 您看到的错误与您指定的dependsOn属性有关。

    来自MS documentation

      

    在部署此资源之前必须先部署的资源。资源管理器评估资源之间的依赖关系,并以正确的顺序部署它们。当资源彼此不依赖时,它们将并行部署。该值可以是资源名称或资源唯一标识符的逗号分隔列表。仅列出此模板中部署的资源。该模板中未定义的资源必须已经存在。避免添加不必要的依赖项,因为它们会减慢部署速度并创建循环依赖项。有关设置依赖项的指导,请参见Defining dependencies in Azure Resource Manager templates

    因此,无法在DependsOn属性中使用ARM模板中未定义的资源。

  2. 以下是与事件订阅创建相关的文档:

    Microsoft.EventGrid eventSubscriptions template reference

    关于如何创建事件订阅的示例并不多,但是您可以从Azure门户中提取模板的某些部分:

    • 单击+ Event Subscription enter image description here

    • 填写详细信息 enter image description here

    • 单击右上角的Advanced Editor button链接 enter image description here

    • 它将向您显示创建ARM模板所需的一些详细信息 enter image description here

以下是示例ARM模板的外观:

"resources": [
    {
      "type": "Microsoft.Devices/IotHubs/providers/eventSubscriptions",
      "apiVersion": "2019-01-01",
      "name": "[concat(parameters('iotHubName'), '/Microsoft.EventGrid/', parameters('eventSubName'))]",
      "location": "[resourceGroup().location]",
      "properties": {
        "topic": "[resourceId('Microsoft.Devices/IotHubs', parameters('iotHubName'))]",
        "destination": {
          "endpointType": "StorageQueue",
          "properties": {
            "resourceId": "[resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName'))]",
            "queueName": "[parameters('queueName')]"
          }
        },
        "filter": {
          "includedEventTypes": [
            "Microsoft.Devices.DeviceConnected"
          ],
          "advancedFilters": []
        },
        "labels": [],
        "eventDeliverySchema": "EventGridSchema"
      }
    }
]

答案 1 :(得分:-2)

某些功能无法使用或无法在模板中使用。您可以做的是,在执行模板后运行Powershell脚本。如果使用的是AzureDevOps(VSTS),则可以在模板执行后添加另一步骤来运行脚本。