Создание устойчивой функции в Python

Устойчивые функции — это расширение Функции Azure, которое позволяет записывать функции с отслеживанием состояния в бессерверной среде. Расширение автоматически управляет состоянием, создает контрольные точки и перезагружается.

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

Снимок экрана с выполнением устойчивой функции в Azure.

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

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

  • Установка Visual Studio Code.

  • Установите расширение Функции Azure для Visual Studio Code.

  • Убедитесь, что используется последняя версия Azure Functions Core Tools.

  • Для работы Устойчивых функций требуется учетная запись хранения Azure. Вам требуется подписка Azure.

  • Убедитесь, что у вас установлена версия 3.7, 3.8, 3.9 или 3.10 Python .

Если у вас еще нет подписки Azure, создайте бесплатную учетную запись Azure, прежде чем начинать работу.

Создание локального проекта

В этом разделе вы используете Visual Studio Code. чтобы создать локальный проект Функций Azure.

  1. В Visual Studio Code нажмите клавишу F1 (или CTRL/CMD+SHIFT+P), чтобы открыть палитру команд. В палитре команд найдите и щелкните Azure Functions: Create New Project....

    Снимок экрана с окном создания функции.

  2. Выберите расположение пустой папки для проекта и нажмите кнопку Выбрать.

  1. Следуйте инструкциям и укажите следующее:

    Prompt значение Описание
    Select a language for your function app project (Выберите язык для проекта приложения-функции) Python Создание локального проекта "Функции Python".
    Выбор версии Функции Azure версии 4 Этот параметр отображается, только если вы еще не установили Core Tools. В этом случае Core Tools устанавливается при первом запуске приложения.
    Python version Python 3.7, 3.8, 3.9 или 3.10 Visual Studio Code создаст виртуальную среду с выбранной версией.
    Выбор шаблона для первой функции проекта Пока пропустить
    Выбор способа открытия проекта Открыть в текущем окне Повторно открывает Visual Studio Code в выбранной папке.
  1. Следуйте инструкциям и укажите следующее:

    Prompt значение Описание
    Выбор языка Python (модель программирования версии 2) Создайте локальный проект функций Python с помощью модели программирования версии 2.
    Выбор версии Функции Azure версии 4 Этот параметр отображается, только если вы еще не установили Core Tools. В этом случае Core Tools устанавливается при первом запуске приложения.
    Python version Python 3.7, 3.8, 3.9 или 3.10 Visual Studio Code создаст виртуальную среду с выбранной версией.
    Выбор способа открытия проекта Открыть в текущем окне Повторно открывает Visual Studio Code в выбранной папке.

При необходимости Visual Studio Code устанавливает Azure Functions Core Tools. Кроме того, создается проект приложения-функции в папке. Проект будет содержать файлы конфигурации host.json и local.settings.json.

В корневой папке также будет создан файл requirements.txt. Там будут указаны пакеты Python, необходимые для запуска приложения-функции.

Установка azure-functions-durable из PyPI

При создании проекта расширение "Функции Azure" для Visual Studio Code автоматически создает виртуальную среду с выбранной версией Python. Вам нужно активировать виртуальную среду в терминале и установить ряд зависимостей, которые требуются для Функций Azure и Устойчивых функций.

  1. Откройте файл requirements.txt в редакторе и измените его содержимое на следующее:

    azure-functions
    azure-functions-durable
    
  2. Откройте встроенный терминал редактора в текущей папке (CTRL+SHIFT+`).

  3. Во встроенном терминале активируйте виртуальную среду в текущей папке с учетом своей операционной системы.

    source .venv/bin/activate
    
  4. В том интегрированном терминале, где активирована виртуальная среда, используйте pip для установки определенных пакетов.

    python -m pip install -r requirements.txt
    

Создание функций

В простом приложении Устойчивых функций есть три функции:

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

Функция оркестратора

Для создания кода устойчивой функции в проекте используется шаблон.

  1. В палитре команд найдите и щелкните Azure Functions: Create Function....

  2. Следуйте инструкциям и укажите следующее:

    Prompt значение Описание
    Выбор шаблона для функции Оркестратор Устойчивых функций Создание оркестрации Устойчивых функций
    Provide a function name (Укажите имя функции) HelloOrchestrator Имя устойчивой функции

Итак, вы добавили оркестратор для координации функций действия. Откройте файл HelloOrchestrator/__init__.py и изучите функцию оркестратора. Каждый вызов context.call_activity приводит к вызову функции действия с именем Hello.

Теперь нужно добавить функцию действия Hello, на которую ведет эта ссылка.

Функция действия

  1. В палитре команд найдите и щелкните Azure Functions: Create Function....

  2. Следуйте инструкциям и укажите следующее:

    Prompt значение Описание
    Выбор шаблона для функции Действие Устойчивых функций Создание функции действия
    Provide a function name (Укажите имя функции) Привет Имя функции действия

Теперь вы добавили функцию действия Hello, которая вызывается оркестратором. Откройте файл Hello/__init__.py и убедитесь, что эта функция принимает имя в качестве входных данных и возвращает приветствие. Функция действия отвечает за все реальные действия, включая обращение к базе данных и выполнение вычислений.

Наконец, нужно добавить активируемую вызовом HTTP функцию, которая запускает оркестратор.

Функция клиента (начальный объект HTTP)

  1. В палитре команд найдите и щелкните Azure Functions: Create Function....

  2. Следуйте инструкциям и укажите следующее:

    Prompt значение Описание
    Выбор шаблона для функции Начальный объект HTTP Устойчивых функций Создание функции начального объекта HTTP
    Provide a function name (Укажите имя функции) DurableFunctionsHttpStart Имя функции клиента
    Уровень авторизации Анонимные Для примера разрешите вызывать функцию без проверки подлинности.

Итак, вы добавили активируемую вызовом HTTP функцию, которая запускает оркестратор. Откройте файл DurableFunctionsHttpStart/__init__.py и убедитесь, что эта функция client.start_new запускает новую оркестрацию с помощью. После этого она должна вызывать client.create_check_status_response, чтобы вернуть ответ HTTP с URL-адресами, которые позволяют отслеживать новую оркестрацию и управлять ею.

Теперь у вас есть готовое приложение Устойчивых функций, которое можно выполнить локально и развернуть в Azure.

Требования

Для модели программирования Python версии 2 требуются следующие минимальные версии:

Включение модели программирования версии 2

Для запуска модели программирования версии 2 требуется следующий параметр приложения:

  • Имя: AzureWebJobsFeatureFlags
  • Значение: EnableWorkerIndexing

Если вы работаете локально с помощью Функции Azure Core Tools, необходимо добавить этот параметр в local.settings.json файл. Если вы работаете в Azure, выполните следующие действия с помощью выбранного средства:

Замените и <RESOURCE_GROUP_NAME> назовите <FUNCTION_APP_NAME> приложение-функцию и группу ресурсов соответственно.

az functionapp config appsettings set --name <FUNCTION_APP_NAME> --resource-group <RESOURCE_GROUP_NAME> --settings AzureWebJobsFeatureFlags=EnableWorkerIndexing

Чтобы создать базовое приложение Устойчивые функции с помощью этих 3 типов функций, замените содержимое function_app.py следующим кодом Python.

import azure.functions as func
import azure.durable_functions as df

myApp = df.DFApp(http_auth_level=func.AuthLevel.ANONYMOUS)

# An HTTP-Triggered Function with a Durable Functions Client binding
@myApp.route(route="orchestrators/{functionName}")
@myApp.durable_client_input(client_name="client")
async def http_start(req: func.HttpRequest, client):
    function_name = req.route_params.get('functionName')
    instance_id = await client.start_new(function_name)
    response = client.create_check_status_response(req, instance_id)
    return response

# Orchestrator
@myApp.orchestration_trigger(context_name="context")
def hello_orchestrator(context):
    result1 = yield context.call_activity("hello", "Seattle")
    result2 = yield context.call_activity("hello", "Tokyo")
    result3 = yield context.call_activity("hello", "London")

    return [result1, result2, result3]

# Activity
@myApp.activity_trigger(input_name="city")
def hello(city: str):
    return f"Hello {city}"

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

Метод Description
hello_orchestrator Функция оркестратора, описывающая рабочий процесс. В этом случае оркестрация запускается, вызывает три функции в последовательности и возвращает упорядоченные результаты всех трех функций в списке.
hello Функция действия, которая выполняет оркестрацию работы. Функция возвращает простое приветствие городу, переданном в качестве аргумента.
http_start Функция, активируемая HTTP-запросом, которая запускает пример оркестрации и возвращает ответ состояния проверки.

Примечание.

Устойчивые функции также поддерживает схемы Python версии 2. Чтобы использовать их, необходимо зарегистрировать функции схемы с помощью azure-functions-durableBlueprint класса, как показано здесь. После этого результирующая схема может быть зарегистрирована как обычная. Пример см. в нашем примере .

Локальное тестирование функции

Основные инструменты службы "Функции Azure" позволяют запускать проекты функций Azure на локальном компьютере разработчика. Если она не установлена, вам будет предложено установить эти инструменты при первом запуске функции из Visual Studio Code.

  1. Чтобы протестировать созданную функцию, установите точку останова в коде функции Hello действия (файл Hello/init__.py). Нажмите клавишу F5 или выберите Debug: Start Debugging на палитре команд, чтобы запустить проект приложения-функции. Выходные данные основных инструментов отображаются на панели Terminal (Терминал).
  1. Чтобы проверить функцию, задайте точку останова в коде hello функции действия. Нажмите клавишу F5 или выберите Debug: Start Debugging на палитре команд, чтобы запустить проект приложения-функции. Выходные данные основных инструментов отображаются на панели Terminal (Терминал).

Примечание.

Дополнительные сведения об отладке см. в статье Диагностика Устойчивых функций.

  1. Для выполнения Устойчивых функций требуется учетная запись хранения Azure. Когда Visual Studio Code предложит выбрать учетную запись хранения, щелкните Выбрать учетную запись хранения.

    Снимок экрана, на котором показано, как создать учетную запись хранения.

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

    Prompt значение Описание
    Выбор подписки имя вашей подписки Выберите подписку Azure.
    Выберите учетную запись хранения Создать учетную запись хранения
    Ввод имени новой учетной записи хранения уникальное имя Имя учетной записи хранения для создания
    Выберите группу ресурсов уникальное имя Имя создаваемой группы ресурсов
    Выбор расположения region Выберите ближайший регион.
  3. На панели Terminal (Терминал) скопируйте URL-адрес конечной точки функции, активируемой HTTP-запросом.

    Снимок экрана с локальными выходными данными в Azure.

  1. Используя браузер либо средства наподобие Postman или cURL, отправьте HTTP-запрос к конечной точке URL-адреса. Последний сегмент замените именем функции оркестратора (HelloOrchestrator в нашем примере). URL-адрес должен быть похожим на http://localhost:7071/api/orchestrators/HelloOrchestrator.

    Полученный ответ является начальным результатом функции HTTP, который сообщает об успешном начале работы устойчивой оркестрации. Это еще не конечный результат оркестрации. Ответ включает несколько полезных URL-адреса. Теперь запросите состояние оркестрации.

  1. Используя браузер либо средства наподобие Postman или cURL, отправьте HTTP-запрос к конечной точке URL-адреса. Последний сегмент замените именем функции оркестратора (hello_orchestrator в нашем примере). URL-адрес должен быть похожим на http://localhost:7071/api/orchestrators/hello_orchestrator.

    Полученный ответ является начальным результатом функции HTTP, который сообщает об успешном начале работы устойчивой оркестрации. Это еще не конечный результат оркестрации. Ответ включает несколько полезных URL-адреса. Теперь запросите состояние оркестрации.

  1. Скопируйте значение URL-адреса для statusQueryGetUri, вставьте его в адресную строку браузера и выполните запрос. Кроме того, вы можете воспользоваться Postman для отправки запроса GET.

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

{
    "name": "HelloOrchestrator",
    "instanceId": "9a528a9e926f4b46b7d3deaa134b7e8a",
    "runtimeStatus": "Completed",
    "input": null,
    "customStatus": null,
    "output": [
        "Hello Tokyo!",
        "Hello Seattle!",
        "Hello London!"
    ],
    "createdTime": "2020-03-18T21:54:49Z",
    "lastUpdatedTime": "2020-03-18T21:54:54Z"
}
{
    "name": "hello_orchestrator",
    "instanceId": "9a528a9e926f4b46b7d3deaa134b7e8a",
    "runtimeStatus": "Completed",
    "input": null,
    "customStatus": null,
    "output": [
        "Hello Tokyo!",
        "Hello Seattle!",
        "Hello London!"
    ],
    "createdTime": "2020-03-18T21:54:49Z",
    "lastUpdatedTime": "2020-03-18T21:54:54Z"
}
  1. Чтобы остановить отладку, нажмите клавиши SHIFT+F5 в Visual Studio Code.

Убедившись, что функция выполняется правильно на локальном компьютере, опубликуйте проект в Azure.

Вход в Azure

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

  1. Если вы не выполнили вход, щелкните значок Azure на панели действий. Затем в области Ресурсы выберите Вход в Azure….

    Снимок экрана с окном входа в Azure в VS Code.

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

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

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

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

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

  1. Щелкните значок Azure на панели действий. Затем в области Ресурсы щелкните значок + и выберите вариант Создать приложение-функцию в Azure.

    Создание ресурса в подписке Azure

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

    Prompt Выбор
    Выбор подписки Выберите подписку, которую нужно использовать. Эта подсказка не отобразится, если в области Ресурсы отображается только одна подписка.
    Ввод глобально уникального имени для приложения-функции Введите имя, допустимое в пути URL-адреса. Имя, которое вы вводите, проверяется, чтобы убедиться, что оно уникально в функциях Azure.
    Выберите стек сред выполнения Выберите версию языка, которая запускалась локально.
    Выбор расположения для новых ресурсов Для повышения производительности выберите регион рядом с вами.

    Расширение показывает на панели Azure: журнал действий состояние отдельных ресурсов по мере их создания в Azure.

    Журнал создания ресурсов Azure

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

    • группу ресурсов — логический контейнер связанных ресурсов;
    • Учетная запись хранения Azure уровня "Стандартный" для сохранения состояния и других сведений о проектах.
    • Приложение-функция, которое предоставляет окружение для выполнения кода вашей функции. Приложение-функция позволяет группировать функции в логические единицы и упростить развертывание, масштабирование и совместное использование ресурсов, а также управление ими в рамках единого плана размещения.
    • План службы приложений, который определяет базовый узел для приложения-функции.
    • Экземпляр Application Insights, подключенный к приложению-функции, который отслеживает использование функций в приложении.

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

    Совет

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

Развертывание проекта в Azure

Внимание

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

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

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

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

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

Тестирование функции в Azure

  1. Скопируйте URL-адрес HTTP-триггера на панели Output (Выходные данные). URL-адрес для вызова функции, активируемой HTTP-запросом, должен быть указан в формате https://<functionappname>.azurewebsites.net/api/orchestrators/HelloOrchestrator.
  1. Скопируйте URL-адрес HTTP-триггера на панели Output (Выходные данные). URL-адрес для вызова функции, активируемой HTTP-запросом, должен быть указан в формате https://<functionappname>.azurewebsites.net/api/orchestrators/hello_orchestrator.
  1. Вставьте этот URL-адрес для HTTP-запроса в адресную строку браузера. Вы должны получить тот же ответ о состоянии, что и раньше при использовании опубликованного приложения.

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

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