Поделиться через


Учебник. Активация Функций Azure в контейнерах BLOB-объектов с помощью подписки на события

Предыдущие версии триггера хранилища BLOB-объектов Функции Azure опрашивали контейнер хранилища для изменений. Более поздняя версия расширения хранилища BLOB-объектов (5.x+) вместо этого использует подписку на события Сетки событий в контейнере. Эта подписка на событие уменьшает задержку, активируя функцию мгновенно, как изменения происходят в контейнере, подписанном.

В этой статье показано, как создать функцию, которая выполняется на основе событий, возникающих при добавлении большого двоичного объекта в контейнер. Вы используете Visual Studio Code для локальной разработки и проверяете код перед развертыванием проекта в Azure.

  • Создайте функцию хранилища BLOB-объектов на основе событий в новом проекте.
  • Проверьте локально в Visual Studio Code с помощью эмулятора Azurite.
  • Создайте контейнер хранилища BLOB-объектов в новой учетной записи хранения в Azure.
  • Создайте приложение-функцию в плане потребления Flex (предварительная версия).
  • Создайте подписку на событие для нового контейнера BLOB-объектов.
  • Разверните и проверьте код функции в Azure.

Эта статья поддерживает версию 4 модели программирования Node.js для Функции Azure.

Эта статья поддерживает версию 2 модели программирования Python для Функции Azure.

В этой статье создается приложение C#, которое выполняется в изолированном рабочем режиме, которое поддерживает .NET 8.0.

Внимание

В этом руководстве вы используете план потребления Flex, который в настоящее время находится в предварительной версии. План потребления Flex поддерживает только версию триггера хранилища BLOB-объектов на основе событий. Это руководство можно выполнить с помощью любого другого плана размещения для приложения-функции.

Необходимые компоненты

Примечание.

Расширение служба хранилища Azure для Visual Studio Code в настоящее время находится в предварительной версии.

Создание функции, активируемой большим двоичным объектом

При создании функции триггера хранилища BLOB-объектов с помощью Visual Studio Code также создается новый проект. Необходимо изменить функцию, чтобы использовать подписку на события в качестве источника, а не использовать обычный контейнер опроса.

  1. В Visual Studio Code откройте приложение-функцию.

  2. Нажмите клавишу F1, чтобы открыть палитру команд, введите Azure Functions: Create Function...и выберите " Создать проект".

  3. В рабочей области проекта выберите расположение каталога. Убедитесь, что вы создадите новую папку или выберите пустую папку для рабочей области проекта.

    Не выбирайте папку проекта, которая уже входит в рабочую область.

  4. В запросах укажите следующие сведения:

    Prompt Действие
    Выбор языка Выберите C#.
    Выберите среду выполнения .NET Выберите .NET 8.0 Isolated LTS.
    Выбор шаблона для первой функции проекта Выберите Azure Blob Storage trigger (using Event Grid).
    Укажите имя функции Введите BlobTriggerEventGrid.
    Укажите пространство имен Введите My.Functions.
    Select setting from "local.settings.json" (Выберите параметр из файла local.settings.json) Выберите Create new local app setting.
    Выбор подписки Выберите свою подписку.
    Выбрать учетную запись хранения Используйте эмулятор Azurite для локального хранилища.
    Это путь в учетной записи хранения, который будет отслеживаться триггером Примите значение по умолчанию samples-workitems.
    Выбор способа открытия проекта Выберите Open in current window.
    Prompt Действие
    Выбор языка Выберите Python.
    Выберите интерпретатор Python для создания виртуальной среды Выберите предпочитаемый интерпретатор Python. Если параметр не отображается, введите полный путь к двоичному файлу Python.
    Выбор шаблона для первой функции проекта Выберите Azure Blob Storage trigger (using Event Grid).
    Укажите имя функции Введите BlobTriggerEventGrid.
    Select setting from "local.settings.json" (Выберите параметр из файла local.settings.json) Выберите Create new local app setting.
    Выбор подписки Выберите свою подписку.
    Выбрать учетную запись хранения Используйте эмулятор Azurite для локального хранилища.
    Это путь в учетной записи хранения, который будет отслеживаться триггером Примите значение по умолчанию samples-workitems.
    Выбор способа открытия проекта Выберите Open in current window.
    Prompt Действие
    Выбор языка Выберите Java.
    Выберите версию Java Выберите Java 11 или Java 8, версию Java, в которой выполняются функции в Azure, и вы проверили ее локально.
    Укажите идентификатор группы Выберите com.function.
    Укажите идентификатор артефакта Выберите BlobTriggerEventGrid.
    Укажите версию Выберите 1.0-SNAPSHOT.
    Укажите имя пакета Выберите com.function.
    Укажите имя приложения Примите созданное имя, начиная с BlobTriggerEventGrid.
    Выберите средство сборки для проекта Java Выберите Maven.
    Выбор способа открытия проекта Выберите Open in current window.
    Prompt Действие
    Выбор язык для проекта приложения-функции Выберите TypeScript.
    Выбор модели программирования TypeScript Выберите Model V4.
    Выбор шаблона для первой функции проекта Выберите Azure Blob Storage trigger (using Event Grid).
    Укажите имя функции Введите BlobTriggerEventGrid.
    Select setting from "local.settings.json" (Выберите параметр из файла local.settings.json) Выберите Create new local app setting.
    Выбор подписки Выберите свою подписку.
    Выбрать учетную запись хранения Используйте эмулятор Azurite для локального хранилища.
    Это путь в учетной записи хранения, который будет отслеживаться триггером Примите значение по умолчанию samples-workitems.
    Выбор способа открытия проекта Выберите Open in current window.
    Prompt Действие
    Выбор язык для проекта приложения-функции Выберите JavaScript.
    Выбор модели программирования JavaScript Выберите Model V4.
    Выбор шаблона для первой функции проекта Выберите Azure Blob Storage trigger (using Event Grid).
    Укажите имя функции Введите BlobTriggerEventGrid.
    Select setting from "local.settings.json" (Выберите параметр из файла local.settings.json) Выберите Create new local app setting.
    Выбор подписки Выберите свою подписку.
    Выбрать учетную запись хранения Используйте эмулятор Azurite для локального хранилища.
    Это путь в учетной записи хранения, который будет отслеживаться триггером Примите значение по умолчанию samples-workitems.
    Выбор способа открытия проекта Выберите Open in current window.
    Prompt Действие
    Выбор язык для проекта приложения-функции Выберите PowerShell.
    Выбор шаблона для первой функции проекта Выберите Azure Blob Storage trigger (using Event Grid).
    Укажите имя функции Введите BlobTriggerEventGrid.
    Select setting from "local.settings.json" (Выберите параметр из файла local.settings.json) Выберите Create new local app setting.
    Выбор подписки Выберите свою подписку.
    Выбрать учетную запись хранения Используйте эмулятор Azurite для локального хранилища.
    Это путь в учетной записи хранения, который будет отслеживаться триггером Примите значение по умолчанию samples-workitems.
    Выбор способа открытия проекта Выберите Open in current window.

Обновление расширения хранилища

Чтобы использовать триггер хранилища BLOB-объектов на основе сетки событий, необходимо иметь по крайней мере версию 5.x расширения хранилища Функции Azure.

Чтобы обновить проект с требуемой версией расширения, в окне терминала выполните следующую dotnet add package команду:

dotnet add package Microsoft.Azure.Functions.Worker.Extensions.Storage.Blobs 
  1. Откройте файл проекта host.json и просмотрите extensionBundle элемент.

  2. Если extensionBundle.version элемент не является по крайней мере 3.3.0 , замените extensionBundle его этой версией:

    "extensionBundle": {
        "id": "Microsoft.Azure.Functions.ExtensionBundle",
        "version": "[4.0.0, 5.0.0)"
    }
    

Подготовка эмуляции локального хранилища

Visual Studio Code использует Azurite для эмуляции служба хранилища Azure служб при локальном запуске. Вы используете Azurite для эмуляции службы Хранилище BLOB-объектов Azure во время локальной разработки и тестирования.

  1. Если этого еще не сделано, установите расширение Azurite версии 3 для Visual Studio Code.

  2. Убедитесь, что для файла "UseDevelopmentStorage=true" local.settings.json задано значение AzureWebJobsStorage, которое сообщает Core Tools использовать Azurite вместо реального подключения к учетной записи хранения при локальном запуске.

  3. Нажмите клавишу F1, чтобы открыть палитру команд, введите Azurite: Start Blob Serviceи нажмите клавишу ВВОД, которая запускает эмулятор службы хранилища BLOB-объектов Azurite.

  4. Щелкните значок Azure на панели действий, разверните локальный эмулятор присоединенных к рабочей области>учетных>записей хранения, щелкните правой кнопкой мыши контейнеры BLOB-объектов, выберите "Создать контейнер BLOB-объектов...", введите имя samples-workitemsи нажмите клавишу ВВОД.

    Снимок экрана: выбор параметра

  5. Разверните примеры контейнеров>BLOB-объектов и выберите "Отправить файлы...".

    Снимок экрана: выборка

  6. Выберите файл для отправки в локально эмулированный контейнер. Этот файл обрабатывается позже функцией для проверки и отладки кода функции. Текстовый файл может работать лучше всего с кодом шаблона триггера BLOB-объектов.

Локальное выполнение функции

С помощью файла в эмулированном хранилище можно запустить функцию для имитации события, вызываемого подпиской сетки событий. Сведения о событии, передаваемые триггеру, зависят от файла, добавленного в локальный контейнер.

  1. Задайте все точки останова и нажмите клавишу F5, чтобы запустить проект для локальной отладки. Функции Azure Основные инструменты должны работать в окне терминала.

  2. Вернитесь в область Azure, разверните функции локального проекта>рабочей области>, щелкните правой кнопкой мыши функцию и выберите "Выполнить функцию сейчас...".

    Снимок экрана: кнопка

  3. В диалоговом окне текста запроса введите samples-workitems/<TEST_FILE_NAME>имя файла, <TEST_FILE_NAME> отправленного в локальном эмуляторе хранилища.

  4. Нажмите клавишу ВВОД, чтобы запустить функцию. Указанное значение — путь к большому двоичному объекту в локальном эмуляторе. Эта строка передается триггеру в полезные данные запроса, который имитирует полезные данные, когда подписка на событие вызывает функцию, чтобы сообщить о добавлении большого двоичного объекта в контейнер.

  5. Просмотрите выходные данные выполнения этой функции. Вы увидите в выходных данных имя файла и его содержимое. Если вы устанавливаете точки останова, может потребоваться продолжить выполнение.

Теперь, когда вы успешно проверили код функции локально, пора опубликовать проект в новом приложении-функции в Azure.

Подготовка учетной записи служба хранилища Azure

Для подписок на события для служба хранилища Azure требуется учетная запись хранения общего назначения версии 2. Расширение служба хранилища Azure для Visual Studio Code можно использовать для создания этой учетной записи хранения.

  1. В Visual Studio Code снова нажмите клавишу F1, чтобы открыть палитру команд и ввести Azure Storage: Create Storage Account.... Укажите эти сведения при появлении запроса:

    Prompt Действие
    Введите имя новой учетной записи хранения Присвойте ему произвольное глобально уникальное имя. Имена учетных записей хранения должны содержать от 3 до 24 символов длиной только строчных букв и чисел. Чтобы упростить идентификацию, мы используем то же имя для группы ресурсов и имени приложения-функции.
    Выбор расположения для новых ресурсов Для повышения производительности выберите регион рядом с вами.

    Расширение создает учетную запись хранения общего назначения версии 2 с указанным именем. То же имя также используется для группы ресурсов, содержащей учетную запись хранения. Триггер хранилища BLOB-объектов на основе сетки событий требует учетной записи хранения общего назначения версии 2.

  2. Снова нажмите клавишу F1 и в палитре команд введите Azure Storage: Create Blob Container.... Укажите эти сведения при появлении запроса:

    Prompt Действие
    Выбор ресурса Выберите созданную учетную запись хранения общего назначения версии 2.
    Введите имя нового контейнера больших двоичных объектов Введите samples-workitemsимя контейнера, на которое ссылается проект кода.

Для запуска приложения-функции также требуется учетная запись хранения. Для простоты в этом руководстве используется та же учетная запись хранения для триггера BLOB-объекта и приложения-функции. Однако в рабочей среде может потребоваться использовать отдельную учетную запись хранения с приложением-функцией. Дополнительные сведения см. в статье Рекомендации по хранению для Функций Azure.

Создание приложения-функции

Используйте эти действия, чтобы создать приложение-функцию в плане потребления Flex. Если приложение размещено в плане потребления Flex, триггеры хранилища BLOB-объектов должны использовать подписки на события.

  1. В палитре команд введите Azure Functions: Create function app in Azure...(Advanced) (Функции Azure: создание приложения-функции в Azure... (Дополнительно)).

  2. Следуя инструкциям, введите следующие сведения:

    Prompt Выбор
    Введите глобально уникальное имя нового приложения-функции. Введите глобально уникальное имя для определения вашего нового приложения-функции, а затем нажмите клавишу ВВОД. Допустимые символы для имени приложения-функции: a-z, 0-9 и -.
    Выберите план размещения. Выбор потребления Flex (предварительная версия).
    Выберите стек сред выполнения Выберите стек языка и версию, в которой вы работали локально.
    Выберите группу ресурсов для новых ресурсов. Выберите существующую группу ресурсов, в которой вы создали учетную запись хранения.
    Выберите расположение для новых ресурсов. Выберите расположение в поддерживаемом регионе рядом с вами или рядом с другими службами, к которым обращаются функции. Неподдерживаемые регионы не отображаются. Дополнительные сведения см. в разделе "Просмотр поддерживаемых в настоящее время регионов".
    Выберите учетную запись хранения. Выберите имя созданной учетной записи хранения.
    Выберите ресурс Application Insights для приложения. Выберите "Создать новый ресурс Application Insights" и в запросе укажите имя экземпляра, используемого для хранения данных среды выполнения из функций.

    Уведомление появляется после создания приложения-функции. Выберите "Просмотреть выходные данные " в этом уведомлении, чтобы просмотреть результаты создания, включая созданные ресурсы Azure.

Развертывание кода функции

Внимание

Развертывание в существующем приложении-функции всегда перезаписывает содержимое этого приложения в Azure.

  1. В палитре команд введите и выберите Функции Azure: Развернуть в приложении-функции.

  2. Выберите только что созданное приложение-функцию. При появлении запроса на перезапись предыдущих развертываний выберите "Развернуть ", чтобы развернуть код функции в новом ресурсе приложения-функции.

  3. После завершения развертывания выберите "Просмотреть выходные данные ", чтобы просмотреть результаты создания и развертывания, включая созданные ресурсы Azure. Если вы пропустили уведомление, выберите значок колокольчика в правом нижнем углу, чтобы увидеть его снова.

    Снимок экрана с окном

Обновление параметров приложения

Так как необходимые параметры приложения из local.settings.json файла не публикуются автоматически, их необходимо передать в приложение-функцию, чтобы функция выполнялось правильно в Azure.

  1. В поддоне команды введите Azure Functions: Download Remote Settings...и в строке выбора ресурса выберите имя приложения-функции.

  2. Когда появится запрос на AzureWebJobsStorage наличие параметра, выберите "Да", чтобы перезаписать параметр локального эмулятора с помощью фактической учетной записи хранения строка подключения из Azure.

  3. В файле замените local.settings.json параметр локального эмулятора тем же строка подключения, что и дляAzureWebJobsStorage этого.

  4. FUNCTIONS_WORKER_RUNTIME Удалите запись, которая не поддерживается в плане потребления Flex.

  5. В поддоне команды введите Azure Functions: Upload Local Settings...и в строке выбора ресурса выберите имя приложения-функции.

Теперь узел функций и триггер используют одну и ту же учетную запись хранения.

Создание URL-адреса конечной точки

Чтобы создать подписку на события, необходимо предоставить сетку событий URL-адрес конкретной конечной точки, чтобы сообщить о событиях хранилища BLOB-объектов. Этот URL-адрес расширения BLOB-объектов состоит из следующих частей:

Часть Пример
URL-адрес базового приложения-функции https://<FUNCTION_APP_NAME>.azurewebsites.net
Путь, зависящий от большого двоичного объекта /runtime/webhooks/blobs
Строка запроса функции ?functionName=Host.Functions.BlobTriggerEventGrid
Ключ доступа к расширению BLOB-объектов &code=<BLOB_EXTENSION_KEY>

Ключ доступа к расширению BLOB-объектов предназначен для того, чтобы другие пользователи могли получить доступ к конечной точке расширения BLOB-объектов. Чтобы определить ключ доступа к расширению BLOB-объектов, выполните приведенные далее действия.

  1. В Visual Studio Code щелкните значок Azure на панели действий. В разделе Ресурсы разверните подписку, разверните Приложение-функция, щелкните правой кнопкой мыши созданное приложение-функцию и выберите Открыть на портале.

  2. В меню слева в разделе Функции выберите Ключи приложения.

  3. В разделе Системные ключи выберите ключ с именем blobs_extension и скопируйте значение ключа.

    Это значение включается в строку запроса нового URL-адреса конечной точки.

  4. Создайте URL-адрес конечной точки для триггера Хранилища BLOB-объектов на основе следующего примера:

    https://<FUNCTION_APP_NAME>.azurewebsites.net/runtime/webhooks/blobs?functionName=Host.Functions.BlobTriggerEventGrid&code=<BLOB_EXTENSION_KEY>
    

    В этом примере замените <FUNCTION_APP_NAME> на имя приложения-функции и замените <BLOB_EXTENSION_KEY> значением, полученным на портале. Если вы использовали другое имя для функции, вам также потребуется изменить functionName значение строки запроса на имя функции.

Теперь этот URL-адрес конечной точки можно использовать для создания подписки на события.

Создание подписки на события

Подписка на события, на основе Сетка событий Azure, вызывает события на основе изменений в контейнере большого двоичного объекта, подписанного на подписку. Затем это событие отправляется в конечную точку расширения BLOB-объектов для вашей функции. После создания подписки на событие невозможно обновить URL-адрес конечной точки.

  1. В Visual Studio Code щелкните значок Azure на панели действий. В разделе Ресурсы разверните подписку, разверните Учетные записи хранения, щелкните правой кнопкой мыши созданную ранее учетную запись хранения и выберите Открыть на портале.

  2. Войдите на портал Azure и запишите группу ресурсов для учетной записи хранения. Вы создаете другие ресурсы в той же группе, чтобы упростить очистку ресурсов при завершении.

  3. В меню слева выберите пункт События.

    Добавление события учетной записи хранения

  4. В окне События нажмите кнопку + Подписка на события и укажите значения из приведенной ниже таблицы на вкладке Базовые.

    Параметр Предлагаемое значение Описание:
    Имя myBlobEventSub Имя, идентифицирующее подписку на события. Имя можно использовать для быстрого поиска подписки на события.
    Схема событий Схема сетки событий Используйте схему по умолчанию для событий.
    Имя системного раздела samples-workitems-blobs Имя раздела, представляющего контейнер. Раздел создается с первой подпиской, и вы будете использовать его для будущих подписок на события.
    Фильтрация по типам событий Blob created (Большой двоичный объект создан)
    Тип конечной точки Веб-перехватчик Триггер Хранилища BLOB-объектов использует конечную точку типа "Веб-перехватчик".
    Конечная точка Конечная точка URL-адреса на основе Azure Используйте созданную конечную точку URL-адреса, которая включает значение ключа.
  5. Выберите Подтвердить выбор, чтобы проверить URL-адрес конечной точки.

  6. Выберите Создать, чтобы создать подписку на события.

Отправка файла в контейнер

Вы можете передать файл с компьютера в контейнер хранилища BLOB-объектов с помощью Visual Studio Code.

  1. В Visual Studio Code нажмите клавишу F1, чтобы открыть палитру команд и ввести.Azure Storage: Upload Files...

  2. В диалоговом окне "Открыть" выберите файл, предпочтительный текстовый файл и нажмите кнопку "Отправить".

  3. Введите следующие сведения по соответствующим запросам:

    Параметр Предлагаемое значение Description
    Введите целевой каталог этой отправки default Просто примите значение / по умолчанию, которое является корнем контейнера.
    Выбор ресурса Storage account name Выберите имя учетной записи хранения, созданной на предыдущем шаге.
    Выберите тип ресурсов Контейнеры больших двоичных объектов Вы отправляете данные в контейнер больших двоичных объектов.
    Выберите контейнер больших двоичных объектов samples-workitems Это значение представляет собой имя контейнера, созданного на предыдущем шаге.

Перейдите к локальной файловой системе, чтобы найти файл для отправки, а затем нажмите кнопку "Отправить ", чтобы отправить файл.

Проверка функции в Azure

После отправки файла в контейнер samples-workitems необходимо активировать функцию. Проверить можно, проверив следующее в портал Azure:

  1. В учетной записи хранения перейдите на страницу "События", выберите "Подписки на события" и убедитесь, что событие доставлено. Может потребоваться до пятиминутной задержки, чтобы событие отображалось на диаграмме.

  2. Вернитесь на страницу приложения-функции на портале, в разделе "Функции " найдите функцию и выберите вызовы и многое другое. Вы должны увидеть трассировки, записанные из успешного выполнения функции.

Очистка ресурсов

При переходе к следующему шагу и добавлении привязки очереди службы хранилища Azure к функции, вам потребуется сохранить все ресурсы, чтобы использовать их в будущем.

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

  1. В Visual Studio Code нажмите клавишу F1, чтобы открыть палитру команд. В палитре команд найдите и щелкните Azure: Open in portal.

  2. Выберите приложение-функцию и нажмите клавишу ВВОД. Страница приложения-функции откроется на портале Azure.

  3. На вкладке Обзор выберите именованную ссылку рядом с полем Группа ресурсов.

    Снимок экрана: выбор группы ресурсов, которую требуется удалить со страницы приложения-функции.

  4. На странице Группа ресурсов просмотрите список включенных ресурсов и убедитесь, что именно их нужно удалить.

  5. Выберите Удалить группу ресурсов и следуйте инструкциям.

    Удаление может занять несколько минут. После этого на несколько секунд появится уведомление. Кроме того, можно выбрать значок колокольчика в верхней части страницы, чтобы просмотреть уведомление.

Дополнительные сведения о затратах на использование Функций см. в статье Оценка затрат на план потребления.

Следующие шаги