Azure Функция не запускается сразу, как ожидалось - PullRequest
2 голосов
/ 30 января 2020

У нас есть функция Azure, которая должна запускаться, как только файл будет вставлен в один из наших Azure хранилищ больших двоичных объектов. Мы видим, что на самом деле требуется от 1 до 10 минут для запуска после появления файла в BLOB-хранилище. Мы не можем подтвердить это точно, но похоже, что он опрашивает большой объем хранилища каждые 10 минут в поисках изменений, а не запускается сразу после вставки.

Вот код для триггера; order-requests BLOB-объект - это тот, куда вставляется файл:

using System.Threading.Tasks;
using Microsoft.Azure.WebJobs;
using Microsoft.Extensions.Logging;
using Microsoft.WindowsAzure.Storage.Blob;


namespace Integration
{
    public static class IntegrationFunction
    {
        [FunctionName("AbcIntegration")]
        public static async Task Run(
            [BlobTrigger("order-requests/{name}", Connection = "BlobStorageConString")] CloudBlockBlob blob, 
            [Blob("order-responses/{name}")] CloudBlockBlob outputBlob,
            ILogger log)
        {
            var result = await new IntegrationService().IntegrateTask(blob, outputBlob);



            log.LogInformation(result);
        }
    }
}

Как мы можем гарантировать, что функция будет запущена, как только файл попадет в BLOB-объект?

1 Ответ

4 голосов
/ 30 января 2020

После некоторых исследований есть два варианта решения этой проблемы:

  1. Использовать запуск таблицы событий вместо запуска Blob: https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-event-grid?tabs=csharp
  2. Убедитесь приложение-функция находится в плане обслуживания приложения (а не в плане потребления) и убедитесь, что для приложения установлено значение Всегда включено.

Реализация # 2 - это то, что сработало для нас. У нас был план потребления, который может занять до 10 минут на срабатывание триггера для функционального приложения. Мы переключили приложение на план обслуживания приложения, установили для него значение «Всегда включено», и теперь мы получаем немедленное выполнение, когда файл попадает в BLOB-объект.

Важно отметить, что дополнительные расходы связаны с планом обслуживания Always On App. Идея плана потребления заключается в том, чтобы оплачивать только при работающей функции. Это происходит за свой счет, хотя возможное холодное начало может занять до 10 минут для выполнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...