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


Краткое руководство: Реагирование на события хранилища Blob с помощью Azure Functions

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

Проект использует расширение Интерфейса командной строки разработчика Azure (azd) с Visual Studio Code для упрощения инициализации и проверки кода проекта локально, а также развертывания кода в Azure. Это развертывание следует текущим рекомендациям по безопасным и масштабируемым Функции Azure развертываниям.

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

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

Предпосылки

  • Node.js 18.x или более поздней версии. Используйте команду node --version, чтобы проверить установленную версию.

Инициализируйте проект

azd init Используйте команду из палитры команд, чтобы создать локальный проект кода Функций Azure на основе шаблона.

  1. В Visual Studio Code откройте папку или рабочую область, в которой вы хотите создать проект.

  2. Нажмите клавишу F1 , чтобы открыть палитру команд, найдите и выполните команду Azure Developer CLI (azd): Initialize App (init), а затем выберите шаблон.

    При инициализации azd текущей папки или рабочей области может возникнуть небольшая задержка.

  1. При появлении запроса выберите " Выбрать шаблон", а затем найдите и выберите Azure Functions C# Event Grid Blob Trigger using Azure Developer CLI.

  2. При появлении запроса в терминале введите уникальное имя среды, например blobevents-dotnet.

    Эта команда извлекает файлы проекта из репозитория шаблонов и инициализирует проект в текущей папке или рабочей области.

  1. При появлении запроса выберите " Выбрать шаблон", а затем найдите и выберите Azure Functions Python Event Grid Blob Trigger using Azure Developer CLI.

  2. При появлении запроса в терминале введите уникальное имя среды, например blobevents-python.

    Эта команда извлекает файлы проекта из репозитория шаблонов и инициализирует проект в текущей папке или рабочей области.

  1. При появлении запроса выберите " Выбрать шаблон", а затем найдите и выберите Azure Functions TypeScript Event Grid Blob Trigger using Azure Developer CLI.

  2. При появлении запроса введите уникальное имя среды, например blobevents-typescript.

    Эта команда извлекает файлы проекта из репозитория шаблонов и инициализирует проект в текущей папке или рабочей области.

  1. При появлении запроса выберите " Выбрать шаблон", а затем найдите и выберите Azure Functions Java Event Grid Blob Trigger using Azure Developer CLI.

  2. При появлении запроса введите уникальное имя среды, например blobevents-java.

    Эта команда извлекает файлы проекта из репозитория шаблонов и инициализирует проект в текущей папке или рабочей области.

  1. При появлении запроса выберите " Выбрать шаблон", а затем найдите и выберите Azure Functions PowerShell Event Grid Blob Trigger using Azure Developer CLI.

  2. При появлении запроса введите уникальное имя среды, например blobevents-powershell.

    Эта команда извлекает файлы проекта из репозитория шаблонов и инициализирует проект в текущей папке или рабочей области.

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

Добавление файла local.settings.json

Для настройки узла при локальном выполнении функций требуется файл local.settings.json.

  1. Выполните следующую команду, чтобы перейти в папку src приложения:

    cd src
    
  1. Создайте файл с именемlocal.settings.json в папке src , содержащей эти данные JSON:

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated",
            "PDFProcessorSTORAGE": "UseDevelopmentStorage=true"
        }
    }
    
  1. Создайте файл с именемlocal.settings.json в папке src , содержащей эти данные JSON:

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "java",
            "PDFProcessorSTORAGE": "UseDevelopmentStorage=true"
        }
    }
    
  1. Создайте файл с именемlocal.settings.json в папке src , содержащей эти данные JSON:

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "node",
            "PDFProcessorSTORAGE": "UseDevelopmentStorage=true"
        }
    }
    
  1. Создайте файл с именемlocal.settings.json в папке src , содержащей эти данные JSON:

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "powershell",
            "FUNCTIONS_WORKER_RUNTIME_VERSION": "7.2",
            "PDFProcessorSTORAGE": "UseDevelopmentStorage=true"
        }
    }
    
  1. Создайте файл с именемlocal.settings.json в папке src , содержащей эти данные JSON:

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "python",
            "PDFProcessorSTORAGE": "UseDevelopmentStorage=true"
        }
    }
    

Создание и активация виртуальной среды

В папке src выполните следующие команды, чтобы создать и активировать виртуальную среду с именем .venv:

python3 -m venv .venv
source .venv/bin/activate

Если Python не устанавливает пакет venv в дистрибутиве Linux, выполните следующую команду:

sudo apt-get install python3-venv

Настройка локального эмулятора хранилища

Используйте эмулятор Azurite для локального запуска проекта кода перед созданием и использованием ресурсов Azure.

  1. Если вы еще не сделали этого, установите Azurite.

  2. Нажмите клавишу F1. В палитре команд найдите и запустите команду Azurite: Start , чтобы запустить локальный эмулятор хранилища.

  3. В области Azure разверните Рабочая область>Присоединенные учетные записи хранения> и Локальный эмулятор, щелкните правой кнопкой мыши (Ctrl-click на Mac) Контейнеры BLOB, выберите Создать контейнер BLOB... и создайте два контейнера BLOB в локальном эмуляторе:

    • unprocessed-pdf: контейнер, который триггер отслеживает для событий хранения.
    • processed-pdf: контейнер, в который функция отправляет обработанные BLOB в качестве выходных данных.
  4. Разверните контейнеры Blob, щелкните правой кнопкой мыши (Ctrl-клик на Mac) unprocessed-pdf, выберите "Загрузить файлы...", нажмите клавишу ВВОД, чтобы принять корневой каталог, и загрузите PDF-файлы из data папки проекта.

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

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

Visual Studio Code интегрируется с инструментами Azure Functions Core , чтобы позволить запускать этот проект на локальном компьютере разработки с помощью эмулятора Azurite. Переменная PDFProcessorSTORAGE среды определяет подключение учетной записи хранилища, которое также устанавливается "UseDevelopmentStorage=true" в файле local.settings.json при запуске на локальной машине.

  1. Выполните следующую команду из src папки проекта в терминале или командной строке:

    func start
    
    mvn clean package
    mvn azure-functions:run
    
    npm install
    func start  
    
    npm install
    npm start  
    

    При запуске узла Функций он записывает имя триггера и тип триггера в выходные данные терминала. В функциях корневая папка проекта содержит файл host.json.

  2. С Core Tools, которые по-прежнему работают в терминале, откройте test.http файл в проекте и выберите Отправить запрос, чтобы активировать ProcessBlobUpload функцию, отправив тестовое blob-событие в вебхук для blob-событий.

    Этот шаг имитирует получение события из подписки на события при локальном запуске, и вы увидите сведения о запросе и обработанных файлах, записанных в журналах. Если вы не используете REST Client, необходимо использовать другой безопасный инструмент для работы с REST, чтобы вызывать конечную точку с полезной нагрузкой в test.http.

  3. В рабочей области контейнера BLOB разверните обработанный-pdf и убедитесь, что функция обработала PDF-файл и скопировала его с префиксом processed-.

  4. По завершении нажмите клавиши CTRL+C в окне терминала, чтобы остановить func.exe процесс узла.

Просмотр кода (необязательно)

Вы можете просмотреть код, определяющий триггер BLOB в Event Grid в файле проекта ProcessBlobUpload.cs. Функция демонстрирует, как:

  • Используйте BlobTrigger и Source = BlobTriggerSource.EventGrid для обработки почти в режиме реального времени
  • BlobClient Привязка к исходному BLOB-объекту и BlobContainerClient целевому объекту
  • Обработка содержимого BLOB-объектов и копирование его в другой контейнер с помощью потоков

Вы можете просмотреть код, определяющий триггер Blob для Event Grid в файле проекта function_app.py. Функция демонстрирует, как:

  • Используйте @app.blob_trigger и source="EventGrid" для обработки почти в режиме реального времени
  • Доступ к содержимому BLOB-объектов с помощью InputStream параметра
  • Копирование обработанных файлов в целевой контейнер с помощью пакета SDK службы хранилища Azure

Вы можете просмотреть код, который определяет Blob-триггер в Event Grid, в файле проекта processBlobUpload.ts. Функция демонстрирует, как:

  • Используйте app.storageBlob() и source: 'EventGrid' для обработки почти в режиме реального времени
  • Доступ к содержимому BLOB-объектов с помощью пакета SDK службы хранилища Azure Node.js
  • Обработка и копирование файлов в целевой контейнер асинхронно

Вы можете просмотреть код, определяющий триггер Blob для Event Grid в файле проекта ProcessBlobUpload.java. Функция демонстрирует, как:

  • Используйте @BlobTrigger и source = "EventGrid" для обработки почти в режиме реального времени
  • Доступ к содержимому BLOB-объектов с помощью BlobInputStream параметра
  • Копирование обработанных файлов в целевой контейнер с помощью пакета SDK службы хранилища Azure для Java

Вы можете просмотреть код, определяющий триггер Blob в Event Grid в файле проекта ProcessBlobUpload/run.ps1 и соответствующем Function.json. Функция демонстрирует, как:

  • Настройте триггер blob в function.json для обработки данных почти в режиме реального времени.
  • Доступ к содержимому BLOB-объектов с помощью командлетов службы хранилища Azure PowerShell
  • Обработка и копирование файлов в целевой контейнер с помощью модулей Azure PowerShell

Проверив и подтвердив правильность кода функции локально, настало время опубликовать проект в Azure.

Создание ресурсов Azure и развертывание

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

  1. В Visual Studio Code нажмите клавишу F1, чтобы открыть палитру команд. Выполните поиск и выполните команду Azure Developer CLI (azd): Sign In with Azure Developer CLI, а затем выполните вход с помощью учетной записи Azure.

  2. В корневом каталоге проекта нажмите клавишу F1 , чтобы открыть палитру команд. Найдите и выполните команду Azure Developer CLI (azd): Provision and Deploy (up), чтобы создать необходимые ресурсы Azure и развернуть ваш код.

  3. При появлении запроса в окне терминала укажите следующие необходимые параметры развертывания:

    Подсказка Description
    Выбор подписки Azure для использования Выберите подписку, в которой вы хотите создать ресурсы.
    Название среды Среда, используемая для поддержания уникального контекста развертывания для приложения.
    Расположение Azure Регион Azure, в котором создается группа ресурсов, содержащая новые ресурсы Azure. Отображаются только регионы, поддерживающие план потребления Flex.

    Команда azd up использует ваши ответы на эти запросы вместе с файлами конфигурации Bicep, чтобы создать и настроить эти необходимые ресурсы Azure, следуя последним передовым практикам.

    • План потребления и приложение-функция Flex
    • Учетная запись хранения Azure с контейнерами BLOB
    • Application Insights (рекомендуется)
    • Политики и роли доступа для учетной записи
    • Подписка на Event Grid на события объектов BLOB
    • Подключения между службами с использованием управляемых удостоверений (вместо использования хранимых строк подключения)

    После успешного выполнения команды ваше приложение запускается в Azure с настроенной подпиской на события для активации вашей функции при добавлении BLOB в контейнер unprocessed-pdf.

  4. Запишите AZURE_STORAGE_ACCOUNT_NAME и AZURE_FUNCTION_APP_NAME в выходных данных. Эти имена уникальны для учетной записи хранения и приложения-функции в Azure соответственно.

Проверьте развернутую функцию

  1. В Visual Studio Code нажмите клавишу F1. В палитре команд найдите и выполните команду Azure Storage: Upload Files.... Примите корневой каталог и, как и раньше, отправьте один или несколько PDF-файлов из data папки проекта.

  2. При появлении запроса выберите имя новой учетной записи хранения (из AZURE_STORAGE_ACCOUNT_NAME). Выберите контейнеры BLOB>unprocessed-pdf.

  3. Нажмите клавишу F1. В палитре команд найдите и выполните команду Azure Storage: Open in Explorer. Выберите одну и ту же учетную запись > хранения контейнеры>BLOB-объектов, обработанные в формате PDF, а затем откройте новое окно.

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

Триггер blob в Event Grid обрабатывает файлы в течение нескольких секунд после загрузки. Эта скорость демонстрирует возможности этого подхода в почти реальном времени по сравнению с традиционными триггерами на основе опроса.

Повторное развертывание кода

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

Замечание

Развернутые файлы кода всегда перезаписываются последним пакетом развертывания.

Исходные ответы на azd запросы и любые переменные среды, созданные с помощью azd , хранятся локально в именованной среде. azd env get-values Используйте команду, чтобы просмотреть все переменные в вашей среде, которые использовались при создании ресурсов Azure.

Очистите ресурсы

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

azd down --no-prompt

Замечание

Параметр --no-prompt указывает azd удалить группу ресурсов без подтверждения.

Эта команда не влияет на локальный проект кода.