Я разрабатываю функцию Azure, которая должна добавлять новую строку в таблицу Azure при добавлении нового большого двоичного объекта.У приложения есть много контейнеров в хранилище BLOB-объектов, и моя функция Azure должна обрабатывать все BLOB-объекты из всех контейнеров.
Я пытался реализовать получение событий с помощью EventGrid, но выдает ошибку.
Моя функция Azure:
#r "D:\home\site\wwwroot\BlobCreatedFunction\Microsoft.Azure.EventGrid.dll"
#r"D:\home\site\wwwroot\BlobCreatedFunction\Microsoft.WindowsAzure.Storage.dll"
using Microsoft.Azure.EventGrid.Models;
using Microsoft.WindowsAzure.Storage.Table;
using System;
public class TemporaryBlobEntity : TableEntity
{
public TemporaryBlobEntity(string partitionKey, string rowKey)
{
this.PartitionKey = partitionKey;
this.RowKey = rowKey;
}
public string BlobUrl { get; set; }
public DateTime BlobUploaded { get; set; }
}
public static TemporaryBlobEntity Run(EventGridEvent eventGridEvent, ILogger log)
{
if (eventGridEvent.Data is StorageBlobCreatedEventData eventData)
{
log.LogInformation(eventData.Url);
log.LogInformation(eventGridEvent.Data.ToString());
var temporaryBlob = new TemporaryBlobEntity("blobs", eventData.Url)
{
BlobUrl = eventData.Url,
BlobUploaded = DateTime.UtcNow
};
return temporaryBlob;
}
return null;
}
Здесьмоя интеграция JSON:
{
"bindings": [
{
"type": "eventGridTrigger",
"name": "eventGridEvent",
"direction": "in"
},
{
"type": "table",
"name": "$return",
"tableName": "temporaryBlobs",
"connection": "AzureWebJobsStorage",
"direction": "out"
}
]
}
В настройках функции Azure я добавил значение для AzureWebJobsStorage
.
Когда я нажимаю Выполнить в раздел теста , логи показывают:
2019-07-08T13:52:16.756 [Information] Executed 'Functions.BlobCreatedFunction' (Succeeded, Id=6012daf1-9b98-4892-9560-932d05857c3e)
Выглядит хорошо, но в облачной таблице нет нового элемента.Почему?
Затем я попытался связать свою функцию с темой EventGrid.Я заполнил новую форму подписки, выбрал «Web Hook» в качестве типа конечной точки и установил конечную точку подписчика: https://<azure-function-service>.azurewebsites.net/runtime/webhooks/EventGrid?functionName=<my-function-name>
.Затем я получил следующее сообщение об ошибке:
Deployment has failed with the following error: {"code":"Url validation","message":"The attempt to validate the provided endpoint https://####.azurewebsites.net/runtime/webhooks/EventGrid failed. For more details, visit https://aka.ms/esvalidation."}
Насколько я понимаю, приложению требуется своего рода проверка запроса.Действительно ли мне нужно реализовать проверку в каждой из моих функций Azure?Или я должен использовать другой тип конечной точки?