Руководство, шаг 2. Автоматическое изменение размера переданных изображений с помощью службы "Сетка событий"

В этом руководстве описано, как добавить бессерверное автоматическое создание эскизов с помощью Сетка событий Azure и Функции Azure. Ниже приведен высокоуровневый рабочий процесс.

Вот какие шаги выполняются в этом руководстве:

  • Создание учетной записи хранения Azure
  • Создание, настройка и развертывание приложения-функции
  • Создание подписки на события хранилища
  • Поверка примера приложения

Предварительные требования

Для работы с этим руководством сделайте следующее:

Создание учетной записи хранения Azure

Для службы "Функции Azure" требуется общая учетная запись хранения. Кроме учетной записи хранения BLOB-объектов, созданной при изучении предыдущего руководства, создайте отдельную общую учетную запись хранения в группе ресурсов. Имя учетной записи хранения должно содержать от 3 до 24 символов и состоять только из цифр и строчных букв.

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

Выполните команду az storage account create.

Примечание

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

Выполните следующие команды, чтобы создать учетную запись хранения Azure.

functionstorage="funcstorage$RANDOM"
az storage account create --name $functionstorage --location $region --resource-group $rgName --sku Standard_LRS --kind StorageV2  --allow-blob-public-access true

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

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

Создайте приложение-функцию с помощью команды az functionapp create.

functionapp="funcapp$RANDOM"
az functionapp create --name $functionapp --storage-account $functionstorage --resource-group $rgName --consumption-plan-location $region --functions-version 4

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

Настройка приложения-функции

Для приложения-функции нужно указать данные для входа в учетную запись хранения BLOB-объектов, добавляемые в параметры приложения-функции с помощью команды az functionapp config appsettings set или Update-AzFunctionAppSetting.

storageConnectionString=$(az storage account show-connection-string --resource-group $rgName --name $blobStorageAccount --query connectionString --output tsv)

az functionapp config appsettings set --name $functionapp --resource-group $rgName --settings AzureWebJobsStorage=$storageConnectionString THUMBNAIL_CONTAINER_NAME=thumbnails THUMBNAIL_WIDTH=100 FUNCTIONS_EXTENSION_VERSION=~2 FUNCTIONS_WORKER_RUNTIME=dotnet

Параметр FUNCTIONS_EXTENSION_VERSION=~2 позволяет запустить приложение-функцию в версии 2 среды выполнения решения "Функции Azure". Теперь можно развернуть проект кода функции в этом приложении-функции.

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

Пример функции изменения размера на C# см. на GitHub. Разверните этот код в приложение-функцию с помощью команды az functionapp deployment source config.

az functionapp deployment source config --name $functionapp --resource-group $rgName --branch master --manual-integration --repo-url https://github.com/Azure-Samples/function-image-upload-resize

Функция изменения размера образа активируется HTTP-запросом, отправленным из службы "Сетка событий". Вы указываете этой службе, что хотите получать эти уведомления по URL-адресу функции, создав подписку на события. В этом руководстве вы подписываетесь на события, созданные большим двоичным объектом.

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

Этот проект использует EventGridTrigger как тип триггера. Рекомендуется использовать триггер Сетки событий, а не универсальные триггеры HTTP. Служба "Сетка событий" автоматически проверяет триггеры функций сетки событий. При использовании универсальных триггеров HTTP вам нужно реализовать ответ проверки.

Дополнительные сведения об этой функции см. в файлах function.json и run.csx.

Код проекта функция развертывается непосредственно из общедоступного примера репозитория. Чтобы узнать больше о параметрах развертывания службы "Функции Azure", ознакомьтесь с разделом Непрерывное развертывание для Функций Azure.

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

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

  1. На портале Azureв верхней части страницы выполните поиск по запросу "Function App" и выберите результат поиска. Затем выберите созданное приложение-функцию. Щелкните элемент Функции и выберите функцию Эскиз.

    Выбор функции Эскиз на портале

  2. Щелкните элемент Интеграция. Затем последовательно выберите элементы Триггер сетки событий и Создание подписки для Сетки событий.

    Переход к параметру добавления подписки Сетки событий на портале Azure

  3. Задайте значения параметров подписки на событие, указанные в таблице.

    Создание подписки на событие из функции на портале Azure

    Параметр Рекомендуемое значение Описание
    имя; imageresizersub Имя, которое идентифицирует новую подписку на событие.
    Тип раздела Учетные записи хранения Выберите поставщик событий учетной записи хранения.
    Подписка Ваша подписка Azure. По умолчанию должна быть выбрана ваша текущая подписка Azure.
    Группа ресурсов myResourceGroup Щелкните Использовать существующую и выберите группу ресурсов, используемую в этом руководстве.
    Ресурс Учетная запись хранения больших двоичных объектов Выберите учетную запись хранения BLOB-объектов, в которой хранятся образы, а не учетную запись, используемую приложением-функцией Azure.
    Имя системного раздела imagestoragesystopic Введите имя системного раздела. См. общие сведения о системных разделах.
    Типы событий Blob created Снимите флажки всех типов, кроме Blob created (Большой двоичный объект создан). Только события типа Microsoft.Storage.BlobCreated будут передаваться в функцию.
    Тип конечной точки autogenerated Предопределено как Функция Azure.
    Конечная точка autogenerated Имя функции. В нашем примере это функция Эскиз.
  4. Перейдите на вкладку Фильтры и выполните следующие действия:

    1. Выберите параметр Включить фильтрацию тем.

    2. В поле Тема начинается с укажите следующее значение: /blobServices/default/containers/images/.

      Выбор фильтра для подписки на событие

  5. Нажмите кнопку Создать, чтобы добавить подписку на событие. Будет создана подписка на событие, которая вызывает функцию Thumbnail при добавлении BLOB-объекта в контейнер images. Эта функция изменяет размер изображений и добавляет их в контейнер thumbnails.

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

Поверка примера приложения

Чтобы проверить изменение размера изображений в веб-приложении, перейдите на URL-адрес опубликованного приложения. URL-адрес приложения по умолчанию: https://<web_app>.azurewebsites.net.

Выберите Отправить фотографии , чтобы выбрать и отправить файл. Можно также перетащить фотографию в эту область.

Обратите внимание, что после того как переданное изображение исчезнет, его копия появится в карусели Generated Thumbnails (Созданные эскизы). С помощью функции размер этого образа был изменен, после чего он был добавлен в контейнер эскизов и скачан веб-клиентом.

Снимок экрана: опубликованное веб-приложение с названием ImageResizer в браузере для пакета SDK NET 12.

Дальнейшие действия

См. другие руководства в разделе Учебники таблицы содержимого (ОГЛА).