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


Справочник разработчика функций Azure для приложений Python

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

В этом руководстве основное внимание уделяется созданию функций Azure на основе Python и поможет вам:

  • Создание и запуск приложений-функций локально
  • Общие сведения о модели программирования Python
  • Упорядочение и настройка приложения
  • Развертывание и мониторинг приложения в Azure
  • Применение рекомендаций по масштабированию и производительности

Ищете концептуальный обзор? См. справочник разработчика функций Azure.

Заинтересованы в реальных вариантах использования? Изучите страницу "Сценарии и примеры ".

Начало работы

Выберите среду, которая соответствует рабочему процессу и перейдите в Функции Azure для Python:

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

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

Модель программирования

Функции поддерживают две версии модели программирования Python:

Версия Описание
2.x Используйте подход на основе декоратора для определения триггеров и привязок непосредственно в файле кода Python. Вы реализуете каждую функцию в качестве глобального метода, не имеющего состояния, в файле function_app.py или в файле схемы, на который имеется ссылка. Эта версия модели рекомендуется для новых приложений Python.
1.x Вы определяете триггеры и привязки для каждой функции в отдельном function.json файле. Вы реализуете каждую функцию как глобальный метод без состояния в вашем файле кода Python. Эта версия модели поддерживает устаревшие приложения.

Эта статья предназначена для конкретной версии модели Python. Выберите нужную версию в верхней части статьи.

Внимание

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

В программной модели Python версии 1 каждая функция определяется как глобальный метод без состояния внутри файла с названием __init__.py. Триггеры и привязки функции настраиваются отдельно в function.json файле, а значения привязки name используются в качестве параметров в main() методе.

Пример

Ниже приведена простая функция, которая отвечает на HTTP-запрос:

# __init__.py
def main(req):
    user = req.params.get('user')
    return f'Hello, {user}!'

Ниже приведен соответствующий function.json файл:

{
    "scriptFile": "__init__.py",
    "bindings": [
        {
            "authLevel": "function",
            "type": "httpTrigger",
            "direction": "in",
            "name": "req",
            "methods": [
                "get",
                "post"
            ]
        },
        {
            "type": "http",
            "direction": "out",
            "name": "$return"
        }
    ]
}

Основные понятия

  • Функция имеет один триггер HTTP.
  • Объект HttpRequest содержит заголовки запросов, параметры запроса, параметры маршрута и текст сообщения. Эта функция получает значение name параметра запроса из params параметра объекта HttpRequest .
  • Чтобы отправить имя в этом примере, добавьте ?name={name} к URL-адресу предоставленной функции. Например, при локальном запуске полный URL-адрес может выглядеть следующим http://localhost:7071/api/http_trigger?name=Testобразом. Примеры использования привязок см. в разделе "Триггеры" и "Привязки".

Используйте SDK и включите аннотации типов для улучшения поддержки IntelliSense и редактора.

# __init__.py
import azure.functions as func

def http_trigger(req: func.HttpRequest) -> str:
# requirements.txt
azure-functions

azure-functions Библиотека

Библиотека azure-functions Python предоставляет основные типы, используемые для взаимодействия со средой выполнения Функций Azure. Чтобы просмотреть все доступные типы и методы, посетите azure-functions API. Ваш код функции может использовать azure-functions для:

  • Входные данные триггера доступа (например, HttpRequest, TimerRequest)
  • Создание выходных значений (например HttpResponse)
  • Взаимодействие с контекстом, предоставленным средой выполнения, и данными привязки

Если вы используете azure-functions в вашем приложении, оно должно быть включено в зависимости вашего проекта.

Примечание.

Библиотека azure-functions определяет область программирования для функций Azure Python, но это не пакет SDK общего назначения. Используйте его специально для разработки и запуска функций в среде выполнения Функций Azure.

Альтернативная точка входа

Поведение функции по умолчанию можно изменить, указав scriptFileentryPoint свойства в function.json файле. Например, следующий function.json файл указывает среде выполнения использовать метод custom_entry() в файле main.py в качестве точки входа для вашей функции Azure.

{
  "scriptFile": "main.py",
  "entryPoint": "custom_entry",
  "bindings": [
      ...
  ]
}

Структура папок

Используйте следующую структуру для проекта Функций Azure Python:

<project_root>/
│
├── .venv/                   # (Optional) Local Python virtual environment
├── .vscode/                 # (Optional) VS Code workspace settings
│
├── my_first_function/       # Function directory
│   └── __init__.py          # Function code file
│   └── function.json        # Function binding configuration file
│
├── my_second_function/
│   └── __init__.py  
│   └── function.json 
│
├── shared/                  # (Optional) Pure helper code with no triggers/bindings
│   └── utils.py
│
├── additional_functions/    # (Optional) Contains blueprints for organizing related Functions
│   └── blueprint_1.py  
│
├── tests/                   # (Optional) Unit tests for your functions
│   └── test_my_function.py
│
├── .funcignore              # Excludes files from being published
├── host.json                # Global function app configuration
├── local.settings.json      # Local-only app settings (not published)
├── requirements.txt         # (Optional) Defines Python dependencies for remote build
├── Dockerfile               # (Optional) For custom container deployment

Ключевые файлы и папки

Файл / папка Описание Требуется для запуска приложения в Azure
my_first_function/ Каталог для одной функции.
__init__.py/ Основной my_first_function скрипт, в котором определен код функции.
function.json/ Содержит конфигурацию привязки для my_first_function функции.
host.json Глобальная конфигурация для всех функций в приложении.
requirements.txt Зависимости Python, установленные во время публикации при использовании удаленной сборки. ❌ (рекомендуется для управления пакетами)
local.settings.json Параметры и секреты приложения только для локального использования (никогда не публикуемые). ❌ (требуется для локальной разработки)
.funcignore Указывает файлы и папки, которые следует исключить из развертывания (например, .venv/, tests/, local.settings.json). ❌ (рекомендуется)
.venv/ Локальная виртуальная среда для Python (исключенная из развертывания).
.vscode/ Конфигурация редактора для Visual Studio Code. Не требуется для развертывания.
shared/ Содержит вспомогательный код, используемый в проекте Function App.
additional_functions/ Используется для модульной организации кода, обычно с схемами.
tests/ Модульные тесты для функционального приложения. Не опубликовано в Azure.
Dockerfile Определяет пользовательский контейнер для развертывания.

В программной модели Python v2 функции Azure используют декораторный подход для определения триггеров и привязок в коде. Каждая функция реализуется как глобальный метод без отслеживания состояния в function_app.py файле.

Пример

Ниже приведена простая функция, которая отвечает на HTTP-запрос:

import azure.functions as func

app = func.FunctionApp()

@app.route("hello")
def http_trigger(req):
    user = req.params.get("user")
    return f"Hello, {user}!"
# requirements.txt
azure-functions

Основные понятия

  • Код импортирует пакет azure-functions и использует декораторы и типы для определения функции приложения.
  • Функция имеет один триггер HTTP.
  • Объект HttpRequest содержит заголовки запросов, параметры запроса, параметры маршрута и текст сообщения. Эта функция получает значение name параметра запроса из params параметра объекта HttpRequest .
  • Чтобы отправить имя в этом примере, добавьте ?name={name} к URL-адресу открытой функции. Например, при локальном запуске полный URL-адрес может выглядеть следующим http://localhost:7071/api/http_trigger?name=Testобразом. Примеры использования привязок см. в разделе "Триггеры" и "Привязки".

azure-functions Библиотека

azure-functions Библиотека Python является основной частью модели программирования функций Azure. Он предоставляет декораторы, типы триггеров и привязки, а также объекты запроса и ответа, используемые для определения и взаимодействия с функциями во время выполнения. Чтобы увидеть все доступные типы и декораторы, посетите API . Код функционального приложения зависит от этой библиотеки:

  • Определение всех функций с помощью FunctionApp объекта
  • Объявление триггеров и привязок (например, @app.route, @app.timer_trigger)
  • Доступ к типизированным входным и выходным данным (например, HttpRequest, HttpResponse и Out`)

Должен быть включен в зависимости проекта azure-functions. Дополнительные сведения см. в статье об управлении пакетами.

Примечание.

Библиотека azure-functions определяет область программирования для функций Azure Python, но это не пакет SDK общего назначения. Используйте его специально для разработки и запуска функций в среде выполнения Функций Azure.

Используйте аннотации типов, чтобы улучшить поддержку IntelliSense и редактора.

def http_trigger(req: func.HttpRequest) -> str:

Упорядочение с помощью схем

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

Чтобы определить и зарегистрировать схему:

  1. Определите схему в другом файле Python, например http_blueprint.py:

    import azure.functions as func
    
    bp = func.Blueprint()
    
    @bp.route(route="default_template")
    def default_template(req: func.HttpRequest) -> func.HttpResponse:
        return func.HttpResponse("Hello World!")
    
  2. Зарегистрируйте схему в главном function_app.py файле:

    import azure.functions as func
    from http_blueprint import bp
    
    app = func.FunctionApp()
    app.register_functions(bp)
    

С помощью схем можно:

  • Разбиите приложение на многократно используемые модули
  • Держите связанные функции сгруппированными по файлам или возможностям.
  • Расширение или совместное использование схем между проектами

Примечание.

Устойчивые функции также поддерживают схемы с помощью azure-functions-durable. Просмотр примера →

Структура папок

Используйте следующую структуру для проекта Функций Azure Python:

<project_root>/
│
├── .venv/                   # (Optional) Local Python virtual environment
├── .vscode/                 # (Optional) VS Code workspace settings
│
├── function_app.py          # Main function entry point (decorator model)
├── shared/                  # (Optional) Pure helper code with no triggers/bindings
│   └── utils.py
│
├── additional_functions/    # (Optional) Contains blueprints for organizing related Functions
│   └── blueprint_1.py  
│
├── tests/                   # (Optional) Unit tests for your functions
│   └── test_my_function.py
│
├── .funcignore              # Excludes files from being published
├── host.json                # Global function app configuration
├── local.settings.json      # Local-only app settings (not published)
├── requirements.txt         # (Optional) Defines Python dependencies for remote build
├── Dockerfile               # (Optional) For custom container deployment

Ключевые файлы и папки

Файл / папка Описание Требуется для запуска приложения в Azure
function_app.py Основной сценарий, в котором определяются функции и триггеры Azure с помощью декораторов.
host.json Глобальная конфигурация для всех функций в приложении.
requirements.txt Зависимости Python, установленные во время публикации при использовании удаленной сборки. ❌ (рекомендуется для управления пакетами)
local.settings.json Параметры и секреты приложения только для локального использования (никогда не публикуемые). ❌ (требуется для локальной разработки)
.funcignore Указывает файлы и папки, которые следует исключить из развертывания (например, .venv/, tests/, local.settings.json). ❌ (рекомендуется)
.venv/ Локальная виртуальная среда для Python (исключенная из развертывания).
.vscode/ Конфигурация редактора для Visual Studio Code. Не требуется для развертывания.
shared/ Хранит вспомогательный код, который используется в проекте приложения функций.
additional_functions/ Используется для модульной организации кода, обычно с схемами.
tests/ Модульные тесты для функционального приложения. Не опубликовано в Azure.
Dockerfile Определяет пользовательский контейнер для развертывания.

[ПРИМЕЧАНИЕ!] Включите при развертывании файл requirements.txt при удаленной сборке. Если вы не используете удаленную сборку или хотите использовать другой файл для определения зависимостей приложений, можно выполнить локальную сборку и развернуть приложение с предварительно созданными зависимостями.

Инструкции по модульного тестирования см. в разделе "Модульное тестирование". Сведения о развертывании контейнеров см. в разделе "Развертывание с помощью пользовательских контейнеров".


Триггеры и привязки

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

Существуют два основных типа привязок:

  • Триггеры (входные данные, запускающие функцию)
  • Входные и выходные данные (дополнительные источники данных или назначения)

Дополнительные сведения о доступных триггерах и привязках см. в разделе "Триггеры и привязки" в Функциях Azure.

Пример: триггер таймера с входными данными объектов Blob

Эта функция выполняет следующее:

  • Триггеры каждые 10 минут
  • Чтение из BLOB с помощью привязок типов SDK
  • Кэширует результаты и записывает во временный файл
import azure.functions as func
import azurefunctions.extensions.bindings.blob as blob
import logging
import tempfile

CACHED_BLOB_DATA = None

app = func.FunctionApp()

@app.function_name(name="TimerTriggerWithBlob")
@app.schedule(schedule="0 */10 * * * *", arg_name="mytimer")
@app.blob_input(arg_name="client",
                path="PATH/TO/BLOB",
                connection="BLOB_CONNECTION_SETTING")
def timer_trigger_with_blob(mytimer: func.TimerRequest,
                            client: blob.BlobClient,
                            context: func.Context) -> None:
    global CACHED_BLOB_DATA
    if CACHED_BLOB_DATA is None:
        # Download blob and save as a global variable
        CACHED_BLOB_DATA = client.download_blob().readall()

        # Create temp file prefix
        my_prefix = context.invocation_id
        temp_file = tempfile.NamedTemporaryFile(prefix=my_prefix)
        temp_file.write(CACHED_BLOB_DATA)
        logging.info(f"Cached data written to {temp_file.name}")

Основные понятия

  • Используйте привязки типов SDK для работы с расширенными типами. Дополнительные сведения см. в статье о привязках типов пакета SDK.
  • Глобальные переменные можно использовать для кэширования дорогостоящих вычислений, но их состояние не гарантируется для сохранения во время выполнения функций.
  • Временные файлы хранятся в tmp/ и не гарантируется, что они сохранятся между вызовами или экземплярами при масштабировании.
  • Вы можете получить доступ к контексту вызова функции через класс Context.

Пример: триггер HTTP с входными данными и выходными данными Концентратора событий Cosmos DB

Эта функция выполняет следующее:

  • Триггеры в HTTP-запросе
  • Считывает из Cosmos DB
  • Запись в выходные данные Концентратора событий
  • Возвращает HTTP-ответ
# __init__.py
import azure.functions as func

def main(req: func.HttpRequest,
         documents: func.DocumentList,
         event: func.Out[str]) -> func.HttpResponse:

    # Content from HttpRequest and Cosmos DB input
    http_content = req.params.get("body")
    doc_id = documents[0]["id"] if documents else "No documents found"

    event.set(f"HttpRequest content: {http_content} | CosmosDB ID: {doc_id}")

    return func.HttpResponse(
        "Function executed successfully.",
        status_code=200
    )
// function.json
{
  "scriptFile": "__init__.py",
  "entryPoint": "main",
  "bindings": [
    {
      "type": "httpTrigger",
      "direction": "in",
      "name": "req",
      "methods": ["get", "post"],
      "route": "file"
    },
    {
      "type": "http",
      "direction": "out",
      "name": "$return"
    },
    {
      "type": "cosmosDB",
      "direction": "in",
      "name": "documents",
      "databaseName": "test",
      "containerName": "items",
      "id": "cosmosdb-input-test",
      "connection": "COSMOSDB_CONNECTION_SETTING"
    },
    {
      "type": "eventHub",
      "direction": "out",
      "name": "event",
      "eventHubName": "my-test-eventhub",
      "connection": "EVENTHUB_CONNECTION_SETTING"
    }
  ]
}

основные понятия

  • Каждая функция имеет один триггер, но может иметь несколько привязок.
  • Добавьте входные данные, указав direction "in" в function.json. Выходные данные имеют значение directionout.
  • Вы можете получить доступ к сведениям запроса через HttpRequest объект и создать настраиваемый HttpResponse с заголовками, кодом состояния и текстом.
import azure.functions as func

app = func.FunctionApp()

@app.function_name(name="HttpTriggerWithCosmosDB")
@app.route(route="file")
@app.cosmos_db_input(arg_name="documents",
                     database_name="test",
                     container_name="items",
                     connection="COSMOSDB_CONNECTION_SETTING")
@app.event_hub_output(arg_name="event",
                      event_hub_name="my-test-eventhub",
                      connection="EVENTHUB_CONNECTION_SETTING")
def http_trigger_with_cosmosdb(req: func.HttpRequest,
                               documents: func.DocumentList,
                               event: func.Out[str]) -> func.HttpResponse:
    # Content from HttpRequest and Cosmos DB input
    http_content = req.params.get('body')
    doc_id = documents[0]['id']

    event.set("HttpRequest content: " + http_content
              + " | CosmosDB ID: " + doc_id)

    return func.HttpResponse(
        f"Function executed successfully.",
        status_code=200
    )

Основные понятия

  • Используйте @route() или триггерные декораторы (@timer_trigger, @queue_triggerи другие) для определения способа вызова функции.
  • Добавьте входные данные с помощью декораторов, таких как @blob_input, @queue_inputи других.
  • Выходные данные могут быть:
    • Возвращается напрямую (если только один выход)
    • Назначается с помощью Out привязок и .set() метода для нескольких выходных данных.
  • Вы можете получить доступ к сведениям запроса через HttpRequest объект и создать настраиваемый HttpResponse с заголовками, кодом состояния и текстом.

Привязки типов ПАКЕТА SDK

Для выбора триггеров и привязок можно работать с типами данных, реализованными базовыми пакетами SDK и платформами Azure. Используя эти привязки типов ПАКЕТА SDK, вы можете взаимодействовать с данными привязки, как если бы вы использовали базовый пакет SDK службы. Дополнительные сведения см. в поддерживаемых привязках типов ПАКЕТА SDK.

Внимание

Поддержка привязок типов ПАКЕТА SDK для Python доступна только в модели программирования Python версии 2.

Переменные среды

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

Можно определить переменные среды:

Доступ к переменным непосредственно в коде с помощью os.environ или os.getenv.

setting_value = os.getenv("myAppSetting", "default_value")

Примечание.

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

Управление пакетами

Чтобы использовать другие пакеты Python в приложении Azure Functions, перечислите их в файле requirements.txt в корне вашего проекта. Эти пакеты импортируются системой импорта Python, и вы можете ссылаться на эти пакеты как обычно. Дополнительные сведения о создании и развертывании с внешними зависимостями см. в разделе "Параметры сборки" для приложений-функций Python.

Например, в следующем примере показано, как requests модуль включен и используется в приложении-функции.

<requirements.txt>
requests==2.31.0

Установите пакет локально с помощью pip install -r requirements.txt.

После установки пакета можно импортировать и использовать его в коде функции:

import azure.functions as func
import requests

def main(req: func.HttpRequest) -> func.HttpResponse:
    r = requests.get("https://api.github.com")
    return func.HttpResponse(f"Status: {r.status_code}")
import azure.functions as func
import requests

app = func.FunctionApp()

@app.function_name(name="HttpExample")
@app.route(route="call_api")
def main(req: func.HttpRequest) -> func.HttpResponse:
    r = requests.get("https://api.github.com")
    return func.HttpResponse(f"Status: {r.status_code}")

Соображения

  • Конфликтует со встроенными модулями:
    • Избегайте именования папок проекта после стандартных библиотек Python (например, email/, json/).
    • Не включать собственные библиотеки Python (например logging, asyncioили uuid) в requirements.txt.
  • Развертывание
    • Чтобы предотвратить ModuleNotFound ошибки, убедитесь, что в списке перечислены requirements.txtвсе необходимые зависимости.
    • При обновлении версии Python приложения перестройте и повторно разверните приложение в новой версии Python, чтобы избежать конфликтов зависимостей с ранее созданными пакетами.
  • Зависимости, отличные от PyPI:
  • Зависимости рабочего процесса Python для Azure Functions:
    • Если пакет содержит определенные библиотеки, которые могут столкнуться с зависимостями рабочей роли (например, protobuf или grpcio), настройте PYTHON_ISOLATE_WORKER_DEPENDENCIES на 1 в параметрах приложения, чтобы предотвратить обращение приложения к зависимостям рабочей роли. Для Python 3.13 и выше эта функция включена по умолчанию.

Выполнение и развертывание

В этом разделе содержатся сведения о локальном выполнении функций, поддержке версий Python, параметрах сборки и развертывании, а также конфигурации среды выполнения. Используйте эти сведения для успешного запуска приложения-функции как в локальных, так и в средах Azure.

Запуск на локальной машине

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

Использование основных средств Функций Azure

Установите основные средства Функций Azure и запустите локальную func start среду выполнения, выполнив команду из корневого каталога проекта:

func start

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

Functions:
        http_trigger:  http://localhost:7071/api/http_trigger

Дополнительные сведения об использовании основных средств см. в статье "Разработка функций Azure" локально с помощью основных средств.

Вызов функции напрямую

С помощью azure-functions >= 1.21.0 можно также вызывать функции напрямую через интерпретатор Python без запуска Core Tools. Этот подход полезен для быстрых модульных тестов:

# function_app.py
import azure.functions as func

app = func.FunctionApp(http_auth_level=func.AuthLevel.ANONYMOUS)

@app.route(route="http_trigger")
def http_trigger(req: func.HttpRequest) -> func.HttpResponse:
    return "Hello, World!"

# Test the function directly
print(http_trigger(None))

Чтобы просмотреть выходные данные, запустите файл непосредственно с помощью Python:

> python function_app.py

Hello, World!
# __init__.py
import azure.functions as func

def main(req: func.HttpRequest) -> func.HttpResponse:
    return func.HttpResponse("Hello, World!")

# Test the function directly
print(main(None))

Чтобы просмотреть выходные данные, запустите файл непосредственно с помощью Python:

> python __init__.py

Hello, World!

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

Поддерживаемые версии Python

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

Внимание

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

Сборка и развертывание

Дополнительные сведения о рекомендуемом механизме сборки для вашего сценария см. в разделе "Параметры сборки". Общие сведения о развертывании см. в разделе "Технологии развертывания" в Функциях Azure.

Быстрое сравнение механизмов развертывания

Инструмент или платформа Команда / Действие Лучший вариант использования
Основные инструменты Функций Azure func azure functionapp publish <APP_NAME> Идеально подходит для выполнения CI, локальной автоматизации или при работе с кроссплатформенной платформой.
AZ CLI az functionapp deployment source config-zip Полезно при развертывании сценариев за пределами основных инструментов. Хорошо работает в автоматизированных конвейерах или облачных терминалах (Azure Cloud Shell).
Visual Studio Code (расширение функций Azure) Палитра команд → "Функции Azure: развертывание в Azure..." Лучше всего подходит для начинающих или интерактивных развертываний. Автоматически обрабатывает упаковку и сборку.
Действия GitHub Azure/functions-action@v1 Идеально подходит для CI/CD на основе GitHub. Включает автоматическое развертывание при отправке (push) или слиянии pull request.
Azure Pipelines AzureFunctionApp@2 Задача Внедрение корпоративного CI/CD с помощью Azure DevOps. Лучше всего подходит для управляемых рабочих процессов выпуска, модульных сборок и многоступенчатых пайплайнов.
Пользовательское развертывание контейнеров Отправка контейнера az functionapp create --image <container> Требуется, если вам нужны пакеты на уровне ОС, пользовательские сборки Python, закрепленные среды выполнения или неподдерживаемые зависимости (например, системные библиотеки, локальные двоичные файлы).
Создание функции на основе портала Создать функцию на портале Azure → во встроенном редакторе Используется только для простых функций без зависимостей. Отлично подходит для демонстраций или обучения, но не рекомендуется для приложений, требующих сторонних пакетов.

Примечание.

Создание функций на основе портала не поддерживает сторонние зависимости и не рекомендуется создавать рабочие приложения. Вы не можете устанавливать или ссылаться на пакеты вне azure-functions и встроенной стандартной библиотеки Python.

Внимание

После 30 сентября 2028 г. возможность размещения функционального приложения на Linux в плане потребления будет прекращена. Чтобы избежать сбоев, перенесите существующие приложения плана потребления, которые работают в Linux, в план потребления Flex до этой даты. Приложения, работающие в Windows в плане потребления, не влияют на это изменение. Дополнительные сведения см. в уведомлении о выходе из плана потребления Linux.

Обновления Python 3.13+

Начиная с Python 3.13 функции Azure представляют несколько основных улучшений среды выполнения и производительности, влияющих на сборку и запуск приложений. К ключевым изменениям относятся:

  • Управление версиями в среде выполнения: теперь вы можете при необходимости зафиксировать или обновить вашу версию приложения до конкретных версий рабочего Python, ссылаясь на пакет azure-functions-runtime в вашем requirements.txt.

    • Без включения управления версиями ваше приложение работает на стандартной версии среды выполнения Python, которой управляет служба Functions. Необходимо изменить файлrequirements.txt , чтобы запросить последнюю выпущенную версию, предварительную версию или закрепить приложение на определенную версию среды выполнения Python.

    • Чтобы включить управление версиями среды выполнения, добавьте ссылку на пакет среды выполнения Python в файл requirements.txt , где значение, назначенное пакету, определяет используемую версию среды выполнения.

    • Избегайте закрепления продуктовых приложений на предрелизные версии среды выполнения (альфа-, бета- или dev-версии).

    • Чтобы узнать об изменениях, регулярно просматривайте заметки о выпуске среды выполнения Python .

    • В следующей таблице указано поведение управления версиями на основе значения версии этого параметра в файле requirements.txt :

      Версия Example Поведение
      Значение не задано azure-functions-runtime Приложение Python 3.13+ запускается на последней доступной версии среды выполнения Functions для Python. Этот вариант лучше всего подходит для обновления платформы и функций, так как ваше приложение автоматически получает последние стабильные обновления среды выполнения.
      Закреплено за определенной версией azure-functions-runtime==1.2.0 Приложение Python 3.13+ остается в закрепленной версии среды выполнения и не получает автоматических обновлений. Вместо этого необходимо вручную обновить закрепленную версию, чтобы воспользоваться преимуществами новых функций, исправлений и улучшений среды выполнения. Закрепление рекомендуется для критически важных рабочих нагрузок в рабочей среде, где важна стабильность и прогнозируемость. Закрепление также позволяет протестировать приложение на предрелизных версиях среды выполнения во время разработки.
      Нет ссылки на пакет n/a Не задав azure-functions-runtime, ваше приложение Python 3.13+ будет работать на версии среды выполнения Python по умолчанию, которая уступает последней выпущенной версии. Обновления периодически выполняются функциями. Этот параметр обеспечивает стабильность и широкую совместимость. Однако доступ к новейшим функциям и исправлениям задерживается до обновления версии по умолчанию.
  • Изоляция зависимостей: зависимости вашего приложения (например grpcio или protobuf) полностью изолированы от зависимостей рабочей среды, предотвращая конфликты версий. Параметр PYTHON_ISOLATE_WORKER_DEPENDENCIES приложения не будет влиять на приложения, работающие на Python 3.13 или более поздней версии.

  • Упрощенная настройка потоковой передачи HTTP — не требуются специальные параметры приложения.

  • Удалена поддержка расширений рабочих ролей и функций общей памяти.

  • Управление версиями в среде выполнения: теперь вы можете при необходимости зафиксировать или обновить вашу версию приложения до конкретных версий рабочего Python, ссылаясь на пакет azure-functions-runtime-v1 в вашем requirements.txt.

    • Без включения управления версиями ваше приложение работает на стандартной версии среды выполнения Python, которой управляет служба Functions. Необходимо изменить файлrequirements.txt , чтобы запросить последнюю выпущенную версию, предварительную версию или закрепить приложение на определенную версию среды выполнения Python.

    • Чтобы включить управление версиями среды выполнения, добавьте ссылку на пакет среды выполнения Python в файл requirements.txt , где значение, назначенное пакету, определяет используемую версию среды выполнения.

    • Избегайте закрепления продуктовых приложений на предрелизные версии среды выполнения (альфа-, бета- или dev-версии).

    • Чтобы узнать об изменениях, регулярно просматривайте заметки о выпуске среды выполнения Python .

    • В следующей таблице указано поведение управления версиями на основе значения версии этого параметра в файле requirements.txt :

      Версия Example Поведение
      Значение не задано azure-functions-runtime-v1 Ваше приложение Python 3.13+ запускается в последней доступной версии среды выполнения функций Python. Этот вариант лучше всего подходит для обновления платформы и функций, так как ваше приложение автоматически получает последние стабильные обновления среды выполнения.
      Закреплено за определенной версией azure-functions-runtime-v1==1.2.0 Приложение Python 3.13+ остается в закрепленной версии среды выполнения и не получает автоматических обновлений. Вместо этого необходимо вручную обновить закрепленную версию, чтобы воспользоваться преимуществами новых функций, исправлений и улучшений среды выполнения. Закрепление рекомендуется для критически важных рабочих нагрузок в рабочей среде, где важна стабильность и прогнозируемость. Закрепление также позволяет во время разработки протестировать приложение на предварительных версиях среды выполнения.
      Нет ссылки на пакет n/a Не задав azure-functions-runtime-v1, ваше приложение Python 3.13+ будет запускаться на стандартной версии среды выполнения Python, которая отстает от последней выпущенной версии. Обновления периодически выполняются функциями. Этот параметр обеспечивает стабильность и широкую совместимость. Однако доступ к новейшим функциям и исправлениям задерживается до обновления версии по умолчанию.
  • Изоляция зависимостей: зависимости вашего приложения (например, grpcio или protobuf) полностью изолированы от зависимостей рабочего процесса, предотвращая конфликты версий. Параметр PYTHON_ISOLATE_WORKER_DEPENDENCIES приложения не будет влиять на приложения, работающие на Python 3.13 или более поздней версии.

  • Удалена поддержка расширений рабочих ролей и функций общей памяти.

Наблюдаемость и тестирование

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

Ведение журналов и мониторинг

Функции Azure предоставляют корневой модуль ведения журнала, который можно использовать непосредственно с встроенным logging модулем Python. Все сообщения, написанные с помощью этого средства ведения журнала, автоматически отправляются в Application Insights при запуске приложения в Azure.

Ведение журнала позволяет записывать сведения о среде выполнения и диагностировать проблемы без необходимости установки.

Пример ведения журнала с помощью триггера HTTP

import logging
import azure.functions as func

def main(req: func.HttpRequest) -> func.HttpResponse:
    logging.debug("Example debug log")
    logging.info("Example info log")
    logging.warning("Example warning")
    logging.error("Example error log")
    return func.HttpResponse("OK")
import logging
import azure.functions as func

app = func.FunctionApp()

@app.route(route="http_trigger")
def http_trigger(req) -> func.HttpResponse:
    logging.debug("Example debug log")
    logging.info("Example info log")
    logging.warning("Example warning")
    logging.error("Example error log")
    return func.HttpResponse("OK")

Вы можете использовать полный набор уровней ведения журнала (debug, , infowarning, иerrorcritical) на портале Azure в разделе "Журналы" или Application Insights.

Дополнительные сведения о мониторинге функций Azure на портале см. в статье "Мониторинг функций Azure".

Примечание.

Чтобы просмотреть журналы отладки в Application Insights, требуется дополнительная настройка. Эту функцию можно включить, установив PYTHON_ENABLE_DEBUG_LOGGING в 1 и установив logLevel в trace или debug в файле host.json. По умолчанию журналы отладки не отображаются в Application Insights.

Ведение логирования из фоновых потоков

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

import logging
import threading
import azure.functions as func

def main(req: func.HttpRequest, context) -> func.HttpResponse:
    logging.info("Function started")
    t = threading.Thread(target=log_from_thread, args=(context,))
    t.start()
    return "okay"

def log_from_thread(context):
    # Associate the thread with the current invocation
    context.thread_local_storage.invocation_id = context.invocation_id  
    logging.info("Logging from a background thread")
import azure.functions as func
import logging
import threading

app = func.FunctionApp()

@app.route(route="http_trigger")
def http_trigger(req, context) -> func.HttpResponse:
    logging.info("Function started")
    t = threading.Thread(target=log_from_thread, args=(context,))
    t.start()
    return "okay"

def log_from_thread(context):
    # Associate the thread with the current invocation
    context.thread_local_storage.invocation_id = context.invocation_id  
    logging.info("Logging from a background thread")

Настройка пользовательских логгеров

Пользовательские логеры можно настроить в Python, если требуется больше контроля над поведением ведения журнала, например, с настраиваемым форматированием, фильтрацией журналов или сторонними интеграциями. Чтобы настроить пользовательский логгер, используйте Python logging.getLogger() с пользовательским именем, добавляя обработчики или форматировщики по мере необходимости.

import logging

custom_logger = logging.getLogger('my_custom_logger')

Поддержка OpenTelemetry

Функции Azure для Python также поддерживают OpenTelemetry, что позволяет выдавать трассировки, метрики и журналы в стандартизованном формате. Использование OpenTelemetry особенно полезно для распределенных приложений или сценариев, где требуется экспортировать данные телеметрии в средства за пределами Application Insights (например, Grafana или Jaeger).

Ознакомьтесь с нашим кратким руководством по OpenTelemetry для Функций Azure (Python), чтобы узнать, как настроить и посмотреть пример кода.

Модульное тестирование

Пишите и запускайте модульные тесты для своих функций, используя pytest. Вы можете протестировать функции Python, такие как другой код Python, с помощью стандартных платформ тестирования. Для большинства привязок можно создать макет входного объекта, создав экземпляр соответствующего класса из azure.functions пакета.

Используя my_function в качестве примера, следующий пример является макетным тестом функции, активируемой HTTP:

Сначала создайте файл project_root</function_app.py и реализуйте> функцию my_function в качестве триггера HTTP.

# <project_root>/function_app.py
import azure.functions as func
import logging

app = func.FunctionApp()

# Define the HTTP trigger that accepts the ?value=<int> query parameter
# Double the value and return the result in HttpResponse
@app.function_name(name="my_function")
@app.route(route="hello")
def my_function(req: func.HttpRequest) -> func.HttpResponse:
    logging.info('Executing myfunction.')

    initial_value: int = int(req.params.get('value'))
    doubled_value: int = initial_value * 2

    return func.HttpResponse(
        body=f"{initial_value} * 2 = {doubled_value}",
        status_code=200
    )

Вы можете начать писать тестовые случаи для триггера HTTP.

# <project_root>/test_my_function.py
import unittest
import azure.functions as func

from function_app import my_function

class TestFunction(unittest.TestCase):
  def test_my_function(self):
    # Construct a mock HTTP request.
    req = func.HttpRequest(method='GET',
                           body=None,
                           url='/api/my_function',
                           params={'value': '21'})
    # Call the function.
    func_call = main.build().get_user_function()
    resp = func_call(req)
    # Check the output.
    self.assertEqual(
        resp.get_body(),
        b'21 * 2 = 42',
    )

В папке виртуальной среды Python можно выполнить следующие команды для тестирования приложения:

pip install pytest
pytest test_my_function.py

Вы видите результаты в терминале pytest следующим образом:

============================================================================================================ test session starts ============================================================================================================
collected 1 item                                                                                                                                                                                                                             

test_my_function.py .                                                                                                                                                                                                                  [100%] 
============================================================================================================= 1 passed in 0.24s ============================================================================================================= 

Оптимизация и более сложные темы

Дополнительные сведения о оптимизации приложений функций Python см. в следующих статьях:

Дополнительные сведения о функциях см. в следующих статьях:

Проблемы с использованием Python? Сообщите нам и создайте запрос.