【问题标题】:Event subscription by ARM template for topic with EndpointType as AzureFunction通过 ARM 模板为端点类型为 Azure 函数的主题订阅事件
【发布时间】:2020-05-29 03:29:03
【问题描述】:

我正在尝试使用 "endpointType": "AzureFunction" 创建事件网格主题订阅。它给出了以下错误:-

“错误”:{ "code": "无效请求", "message": "无效的事件订阅请求:提供的 URL 无效。它不能为空或空,应该是正确的 HTTPS URL 比如https://www.example.com。” }

我的 ARM 模板如下:-

{
      "name": "[concat(variables('eventGridTopicName'), '/Microsoft.EventGrid/', variables('myFuncName'))]",
      "type": "Microsoft.EventGrid/topics/providers/eventSubscriptions",
      "apiVersion": "2019-01-01",
      "location": "[parameters('location')]",
      "properties": {
        "topic": "[concat('/subscriptions/', parameters('subscriptionId'),'/resourcegroups/', parameters('resourceGroupName'), '/providers/Microsoft.EventGrid/topics/', variables('eventGridTopicName'))]",
        "destination": {
          "endpointType": "AzureFunction",
          "properties": {
            "resourceId": "[resourceId('Microsoft.Web/sites/functions/', variables('funcAppName'), variables('myFuncName'))]",
            "maxEventsPerBatch": 1,
            "preferredBatchSizeInKilobytes": 64
          }
        },
        "filter": {
          "advancedFilters": [
            {
              "operatorType": "StringIn",
              "key": "eventType",
              "values": [
                "xyzEvent"
              ]
            },
            {
              "operatorType": "StringIn",
              "key": "subject",
              "values": [
                "xyzEventReceived"
              ]
            }
          ]
        },
        "labels": [],
        "eventDeliverySchema": "EventGridSchema"
      },
      "dependsOn": [
        "[variables('eventGridTopicName')]"
      ]
    }

之前,我使用 EndpointType 作为 webhook,因为 Azure 函数、存储队列等新的事件处理程序不可用 (https://docs.microsoft.com/en-us/azure/event-grid/event-handlers)。我使用了 Azure 门户生成的 arm 模板,如下所示:-

有人遇到过这个问题吗?

【问题讨论】:

    标签: azure azure-functions azure-resource-manager arm-template azure-eventgrid


    【解决方案1】:

    是的!当我遇到同样的问题时发现了这个! ..

    更新!找到了一个使用另一个 API 版本的示例,它似乎工作得更好,现在我的问题是第一次部署时没有代码,所以我需要将模板分成两部分并在 btween 中部署内容(或通过c) 的模板。

    "apiVersion": "2020-01-01-preview",

    https://blog.brooksjc.com/2019/07/19/arm-template-for-event-grid-integration-with-a-new-azure-function/

    更新2,添加内容并重新运行模板后,它工作正常!

    这是我的存储触发器的完整代码

    {
                "name": "[concat(variables('storageAccountName'), '/Microsoft.EventGrid/coreCostManagementExport')]",
                "type": "Microsoft.Storage/storageAccounts/providers/eventSubscriptions",
                "apiVersion": "2020-01-01-preview",
                "dependsOn": [
                    "[resourceId('Microsoft.Storage/storageAccounts',variables('storageAccountName'))]",
                    "[resourceId('Microsoft.Web/sites',parameters('functionAppName'))]"
                ],
                "properties": {
                    "topic": "[resourceId('Microsoft.Storage/storageAccounts',variables('storageAccountName'))]",
                    "destination": {
                        "endpointType": "AzureFunction",
                        "properties": {
                            "resourceId": "[resourceId('Microsoft.Web/sites/functions/', parameters('functionAppName'), 'QueueUsageOnExport')]",
                            "maxEventsPerBatch": 1,
                            "preferredBatchSizeInKilobytes": 64
                        }
                    },
                    "filter": {
                        "subjectBeginsWith": "/blobServices/default/containers/usage",
                        "subjectEndsWith": ".csv",
                        "includedEventTypes": [
                            "Microsoft.Storage.BlobCreated"
                        ],
                        "advancedFilters": [
                        ]
                    },
                    "labels": [
                    ],
                    "eventDeliverySchema": "EventGridSchema"
                }
            }
    
    

    【讨论】:

    • 这由API Documentation 确认,“对于 WebHook,表示事件订阅目的地端点的 URL。”
    • 抱歉,我删除了旧回复,因为我找到了一个新回复,我还没有看到您回复过!.. 但是 webhook 应该可以工作,但新版本更好更简单! :) 一定是一个错误,它在当前的 api 中不起作用,只有新的预览 api。将我的工作代码添加到我的原始回复中
    【解决方案2】:

    Jakob 更改 api 版本的建议对我更改 resourceId 有效。这是我修改后的工作模板:-

    {
          "name": "[concat(variables('eventGridTopicName'), '/Microsoft.EventGrid/', variables('myFuncName'))]",
          "type": "Microsoft.EventGrid/topics/providers/eventSubscriptions",
          "apiVersion": "2020-01-01-preview",
          "location": "[parameters('location')]",
          "properties": {
            "topic": "[concat('/subscriptions/', parameters('subscriptionId'),'/resourcegroups/', parameters('resourceGroupName'), '/providers/Microsoft.EventGrid/topics/', variables('eventGridTopicName'))]",
            "destination": {
              "endpointType": "AzureFunction",
              "properties": {
                "resourceId": "[concat('/subscriptions/', parameters('subscriptionId'),'/resourcegroups/', parameters('resourceGroupName'), '/providers/Microsoft.Web/sites/', variables('funcAppName'), '/functions/' , variables('myFuncName'))]",
                "maxEventsPerBatch": 1,
                "preferredBatchSizeInKilobytes": 64
              }
            },
            "filter": {
              "advancedFilters": [
                {
                  "operatorType": "StringIn",
                  "key": "eventType",
                  "values": [
                    "xyzEvent"
                  ]
                },
                {
                  "operatorType": "StringIn",
                  "key": "subject",
                  "values": [
                    "xyzEventReceived"
                  ]
                }
              ]
            },
            "labels": [],
            "eventDeliverySchema": "EventGridSchema"
          },
          "dependsOn": [
            "[variables('eventGridTopicName')]"
          ]
        }
    

    【讨论】:

      【解决方案3】:

      在我的场景中,我试图将函数应用订阅添加到使用“AzureFunctionEventSubscriptionDestination”作为目标的事件网格主题。我的问题是我错过了将 /functions/{targetFunctionName} 添加到资源 ID。

      “resourceId”:“/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Web/sites/{functionAppName}/functions/{targetFunctionName}”

      【讨论】:

        猜你喜欢
        • 2019-06-11
        • 2019-11-05
        • 1970-01-01
        • 2016-07-16
        • 2017-03-28
        • 1970-01-01
        • 1970-01-01
        • 2018-02-27
        • 2020-05-09
        相关资源
        最近更新 更多