Функция Azure, запускаемая EventGrid в хранилище BLOB-объектов - PullRequest
0 голосов
/ 15 ноября 2018

Я следовал учебному руководству Microsoft , чтобы обработать событие на основе BLOB-объекта, создаваемого в хранилище Azure.

Событие запускается, но код события для обработки изображения пропускается как вводПараметр потока не заполняется событием EventGrid.Это должно проходить через путь к BLOB-объекту (файлу изображения) для обработки.

 public static async Task Run(
        [EventGridTrigger]EventGridEvent eventGridEvent,
        [Blob("{data.url}", FileAccess.Read)] Stream input,
        ILogger log)
    {
        try
        {
            log.LogInformation("Entered Thumbnail Function ..");

            if (input != null) 
            { //doesn't get to here ..

Журнал при каждом срабатывании события равен

2018-11-15T05:33:41.096 [Information] Executing 'Thumbnail' (Reason='EventGrid trigger fired at 2018-11-15T05:33:41.0781270+00:00' ..

2018-11-15T05:33:41.096 [Information] Entered Thumbnail Function

2018-11-15T05:33:41.096 [Information] Executed 'Thumbnail' (Succeeded, 

2018-11-15T05:33:41.096 [Information] Executing 'Thumbnail' (Reason='EventGrid trigger fired at 2018-11-15T05:33:41.0781270+00:00', 

2018-11-15T05:33:41.096 [Information] Entered Thumbnail Function

2018-11-15T05:33:41.096 [Information] Executed 'Thumbnail' (Succeeded,

Ответы [ 2 ]

0 голосов
/ 15 ноября 2018

Учебное пособие работает для v1 c # скриптовой функции , как вы можете видеть, упоминает csx файл , когда речь идет о коде функции.Но теперь ссылка проекта указывает на предварительно скомпилированный код v2, изменения в коде могут вызвать проблемы, если мы строго будем следовать руководству.

Давайте исправим несоответствие в два этапа.

  1. Ключевым моментом является то, что функция не была подключена к учетной записи хранилища BLOB-объектов, созданной в part1 , поэтому мы получили нулевой поток ввода.

    Поскольку мы создали настройку приложения myblobstorage_STORAGEв на этом шаге нам нужно только добавить его в наш код функции.

    public static async Task Run(
        [EventGridTrigger]EventGridEvent eventGridEvent,
        [Blob("{data.url}", FileAccess.Read, Connection = "myblobstorage_STORAGE")] Stream input,
        ILogger log)
    
  2. На этом же шаге учебное пособие устанавливает настройку приложения myContainerName дляконтейнер thumbnails, созданный в учетной записи хранилища BLOB-объектов в part1 .

    Но в нашем коде мы видим, что он подключается к учетной записи , созданной для приложения Function с AzureWebJobsStorage и хочет получить имя контейнера из настроек приложения THUMBNAIL_CONTAINER_NAME.

    Быстрое решение заключается в замене AzureWebJobsStorage и THUMBNAIL_CONTAINER_NAME и установке константы для thumbnailWidth.

    private static readonly string BLOB_STORAGE_CONNECTION_STRING = Environment.GetEnvironmentVariable("myblobstorage_STORAGE");
    ...
    var thumbnailWidth = 100;
    var thumbContainerName = Environment.GetEnvironmentVariable("myContainerName");
    

    Конечно, вы можете добавить THUMBNAIL_WIDTH в приложениинастройки портала Azure.

Переиздать и все должно работать.

0 голосов
/ 15 ноября 2018

Данные никогда не будут переданы. Событие Event Grid будет передавать только метаданные, которые будут включать URI BLOB-объекта, который вы можете использовать для извлечения содержимого, если вам нужно.

...