为Azure Function创建

时间:2018-09-04 11:11:00

标签: azure-eventgrid

我正在尝试为使用EventGridTrigger的Azure函数创建 EventGridSubscription 。 运行 New-AzureRmEventGridSubscription cmdlet时,出现以下错误:

  

网址验证:验证提供的端点https://blablafunction.azurewebsites.net/admin/EventGridExtensionConfig的尝试失败。

这是天蓝色的功能代码:

[FunctionName("BlobCreatedHandler")]
public static async Task Run([EventGridTrigger]JObject blobEvent,
    [Queue("blob-created-queue", Connection = Strings.StorageAccountConnection)] CloudQueue blobCreatedQueue,
    [Inject(typeof(IBlobCreatedHandler))] IBlobCreatedHandler blobCreatedHandler)
{
    await blobCreatedHandler.Handle(blobEvent, blobCreatedQueue);
}

我尝试了不同版本的AzureRM.EventGrid模块。有趣的是,在低于0.3.0的版本上它可以正常工作。但是从0.3.1开始的所有最新版本都失败,并出现此错误。 有人会经历同样的经历吗?

UPD: Fiddler说,两个版本的SDK(好一个和坏一个)都发送完全相同的请求:

{
"properties": {
    "destination": {
        "endpointType": "WebHook",
        "properties": {
            "endpointUrl": "https://blobmalwarescanapptest.azurewebsites.net/admin/EventGridExtensionConfig?functionName=TestFunc&code=PhWghMXtSma188UQccaoErA4Eiw7ygudguHkpq1V0XKMfzA59yBR5g=="
        }
    },
    "filter": {
        "includedEventTypes": [
            "All"
        ],
        "isSubjectCaseSensitive": false
    }
}

,并获得完全相同的响应。 但是在更新版本的SDK上,好像Azure EventGrid管理端点会截断“?”之后的所有内容签名并尝试验证基本网址(没有查询参数)。

1 个答案:

答案 0 :(得分:0)

我刚刚使用ARM模板来达到相同的结果。对我有用的端点是: https://<FunctionAppName>.azurewebsites.net/runtime/webhooks/EventGrid?functionName=<functionName>&code=<code>

尽管这也适用于v2的azure函数,但我看到您正在使用v1(因为JObject作为eventgrid触发器)。

编辑:我的ARM模板示例:

{
  "type": "Microsoft.Storage/storageAccounts/providers/eventSubscriptions",
  "name": "[concat(variables('MobileStorageName'), '/Microsoft.EventGrid/', variables('EventSubscriberName'))]",
  "apiVersion": "2018-01-01",
  "dependsOn": [
    "[variables('MobileStorageName')]"
  ],
  "tags": {
    "displayName": "Storage Account Event Subscription"
  },
  "properties": {
    "destination": {
      "endpointType": "WebHook",
      "properties": {
        "endpointUrl": "[variables('FunctionAppEndpoint')]"
      }
    },
    "filter": {
      "subjectBeginsWith": "",
      "subjectEndsWith": "",
      "isSubjectCaseSensitive": false,
      "includedEventTypes": [ "Microsoft.Storage.BlobCreated" ]
    }
  }
}

请注意,在我的情况下,我需要StorageV2(它是2018-02-1 API),否则它不起作用。