Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Функции Azure — это бессерверная служба вычислений, которая позволяет запускать управляемый событиями код без подготовки или управления инфраструктурой. Выполнение функций активируется событиями, такими как HTTP-запросы, сообщения очереди, таймеры или изменения в хранилище, а также автоматически масштабируются по требованию.
В этом руководстве основное внимание уделяется созданию Функции Azure на основе Python и помогает вам:
- Создание и запуск приложений-функций локально
- Общие сведения о модели программирования Python
- Упорядочение и настройка приложения
- Развертывание и мониторинг приложения в #REF!
- Применение рекомендаций по масштабированию и производительности
Ищете концептуальный обзор? См. справочник разработчика Функции Azure.
Заинтересованы в реальных вариантах использования? Изучите страницу "Сценарии и примеры ".
Начало работы
Выберите среду, которая соответствует рабочему процессу, и перейдите к Функции Azure для Python:
- Краткое ознакомительное руководство Visual Studio Code
- Быстрый старт по основным инструментам
Создание функционального приложения
В этом разделе рассматриваются основные компоненты для создания и структурирования приложения-функции Python. Разделы включают модель программирования, структуру проекта, триггеры и привязки, а также управление зависимостями.
Модель программирования
Функции поддерживают две версии модели программирования Python:
| Версия | Описание |
|---|---|
| 2.x | Используйте подход на основе декоратора для определения триггеров и привязок непосредственно в файле кода Python. Вы реализуете каждую функцию в качестве глобального метода, не имеющего состояния, в файле или в файле схемы, на который имеется ссылка. Эта версия модели рекомендуется для новых приложений Python. |
| 1.x | Вы определяете триггеры и привязки для каждой функции в отдельном файле. Вы реализуете каждую функцию как глобальный метод без состояния в файле кода Python. Эта версия модели поддерживает устаревшие приложения. |
Эта статья предназначена для конкретной версии модели Python. Выберите нужную версию в верхней части статьи.
Внимание
Используйте модель программирования версии 2 для подхода на основе декоратора для определения триггеров и привязок непосредственно в коде.
В модели программирования Python версии 1 каждая функция определяется как глобальный метод без отслеживания состояния main() внутри файла с именем __init__.py.
Триггеры и привязки функции настраиваются отдельно в файле, а значения привязки используются в качестве параметров в методе.
Пример
Ниже приведена простая функция, которая отвечает на HTTP-запрос:
# __init__.py
def main(req):
user = req.params.get('user')
return f'Hello, {user}!'
Ниже приведен соответствующий файл:
{
"scriptFile": "__init__.py",
"bindings": [
{
"authLevel": "function",
"type": "httpTrigger",
"direction": "in",
"name": "req",
"methods": [
"get",
"post"
]
},
{
"type": "http",
"direction": "out",
"name": "$return"
}
]
}
Основные понятия
- Функция имеет один триггер HTTP.
- Объект HttpRequest содержит заголовки запросов, параметры запроса, параметры маршрута и текст сообщения. Эта функция получает значение параметра запроса из параметра объекта HttpRequest .
- Чтобы отправить имя в этом примере, добавьте к URL-адресу предоставленной функции. Например, при локальном запуске полный URL-адрес может выглядеть следующим образом. Примеры использования привязок см. в разделе "Триггеры" и "Привязки".
Используйте SDK и включите аннотации типов для улучшения поддержки IntelliSense и редактора.
# __init__.py
import azure.functions as func
def http_trigger(req: func.HttpRequest) -> str:
# requirements.txt
azure-functions
Библиотека
Библиотека azure-functions Python предоставляет основные типы, используемые для взаимодействия с средой выполнения Функции Azure. Чтобы просмотреть все доступные типы и методы, посетите API.
Ваш код функции может использовать для:
- Входные данные триггера доступа (например, , )
- Создание выходных значений (например )
- Взаимодействие с контекстом, предоставленным средой выполнения, и данными привязки
Если вы используете в вашем приложении, оно должно быть включено в зависимости вашего проекта.
Примечание.
Библиотека azure-functions определяет область программирования для Python Функции Azure, но это не пакет SDK общего назначения. Используйте его специально для разработки и запуска функций в среде выполнения Функции Azure.
Альтернативная точка входа
Поведение функции по умолчанию можно изменить, указав свойства в файле. Например, следующий файл function.json направляет среду выполнения на использование метода custom_entry() в файле main.py в качестве точки входа для функции #REF!.
{
"scriptFile": "main.py",
"entryPoint": "custom_entry",
"bindings": [
...
]
}
Структура папок
Используйте следующую структуру для проекта Python Функции Azure:
<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
Ключевые файлы и папки
| Файл / папка | Описание | Требуется для запуска приложения в #REF! |
|---|---|---|
my_first_function/ |
Каталог для одной функции. | ✅ |
__init__.py/ |
Основной скрипт, в котором определен код функции. | ✅ |
function.json/ |
Содержит конфигурацию привязки для функции. | ✅ |
host.json |
Глобальная конфигурация для всех функций в приложении. | ✅ |
requirements.txt |
Установленные зависимости Python во время публикации при использовании remote build. | (рекомендуется для управления пакетами) |
local.settings.json |
Параметры и секреты приложения только для локального использования (никогда не публикуемые). | (требуется для локальной разработки) |
.funcignore |
Указывает файлы и папки, которые следует исключить из развертывания (например, , , ). | (рекомендуется) |
.venv/ |
Локальная виртуальная среда для Python (исключена из развертывания). | ❌ |
.vscode/ |
Конфигурация редактора для Visual Studio Code. Не требуется для развертывания. | ❌ |
shared/ |
Содержит вспомогательный код, используемый в проекте Function App. | ❌ |
additional_functions/ |
Используется для модульной организации кода, обычно с схемами. | ❌ |
tests/ |
Модульные тесты для функционального приложения. Не опубликовано в #REF!. | ❌ |
Dockerfile |
Определяет пользовательский контейнер для развертывания. | ❌ |
В модели программирования Python версии 2 Функции Azure используется подход на основе decorator для определения триггеров и привязок непосредственно в коде. Каждая функция реализуется как глобальный метод без отслеживания состояния в файле.
Пример
Ниже приведена простая функция, которая отвечает на 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
Основные понятия
- Код импортирует пакет и использует декораторы и типы для определения функции приложения.
- Функция имеет один триггер HTTP.
- Объект HttpRequest содержит заголовки запросов, параметры запроса, параметры маршрута и текст сообщения. Эта функция получает значение параметра запроса из параметра объекта HttpRequest .
- Чтобы отправить имя в этом примере, добавьте к URL-адресу предоставленной функции. Например, при локальном запуске полный URL-адрес может выглядеть следующим образом. Примеры использования привязок см. в разделе "Триггеры" и "Привязки".
Библиотека
Библиотека azure-functions Python является основной частью модели программирования Функции Azure. Он предоставляет декораторы, типы триггеров и привязки, а также объекты запроса и ответа, используемые для определения и взаимодействия с функциями во время выполнения.
Чтобы увидеть все доступные типы и декораторы, посетите API
- Определение всех функций с помощью объекта
- Объявление триггеров и привязок (например, , )
- Доступ к типизированным входным и выходным данным (например, , и Out`)
Должен быть включен в зависимости проекта . Дополнительные сведения см. в статье об управлении пакетами.
Примечание.
Библиотека azure-functions определяет область программирования для Python Функции Azure, но это не пакет SDK общего назначения. Используйте его специально для разработки и запуска функций в среде выполнения Функции Azure.
Используйте аннотации типов, чтобы улучшить поддержку IntelliSense и редактора.
def http_trigger(req: func.HttpRequest) -> str:
Упорядочение с помощью схем
Для более крупных или модульных приложений используйте blueprints для определения функций в отдельных файлах Python и регистрации их в основном приложении. Это разделение позволяет упорядочить код и повторно использовать его.
Чтобы определить и зарегистрировать схему:
Определите схему в другом файле 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!")Зарегистрируйте схему в главном файле:
import azure.functions as func from http_blueprint import bp app = func.FunctionApp() app.register_functions(bp)
С помощью схем можно:
- Разбиите приложение на многократно используемые модули
- Держите связанные функции сгруппированными по файлам или возможностям.
- Расширение или совместное использование схем между проектами
Примечание.
Устойчивые функции также поддерживает схемы с помощью azure-functions-durable.
Просмотр примера →
Структура папок
Используйте следующую структуру для проекта Python Функции Azure:
<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
Ключевые файлы и папки
| Файл / папка | Описание | Требуется для запуска приложения в #REF! |
|---|---|---|
function_app.py |
Основной сценарий, в котором определяются Функции Azure и триггеры с помощью декораторов. | ✅ |
host.json |
Глобальная конфигурация для всех функций в приложении. | ✅ |
requirements.txt |
Зависимости Python, установленные при публикации с использованием удаленной сборки. | (рекомендуется для управления пакетами) |
local.settings.json |
Параметры и секреты приложения только для локального использования (никогда не публикуемые). | (требуется для локальной разработки) |
.funcignore |
Указывает файлы и папки, которые следует исключить из развертывания (например, , , ). | (рекомендуется) |
.venv/ |
Локальная виртуальная среда для Python (исключена из развертывания). | ❌ |
.vscode/ |
Конфигурация редактора для Visual Studio Code. Не требуется для развертывания. | ❌ |
shared/ |
Содержит вспомогательный код, используемый в проекте Function App. | ❌ |
additional_functions/ |
Используется для модульной организации кода, обычно с схемами. | ❌ |
tests/ |
Модульные тесты для функционального приложения. Не опубликовано в #REF!. | ❌ |
Dockerfile |
Определяет пользовательский контейнер для развертывания. | ❌ |
[ПРИМЕЧАНИЕ!] Включите при развертывании файл при удаленной сборке. Если вы не используете удаленную сборку или хотите использовать другой файл для определения зависимостей приложений, можно выполнить локальную сборку и развернуть приложение с предварительно созданными зависимостями.
Инструкции по модульного тестирования см. в разделе "Модульное тестирование". Сведения о развертывании контейнеров см. в разделе "Развертывание с помощью пользовательских контейнеров".
Триггеры и привязки
Функции Azure использует triggers для запуска выполнения функций и bindings для подключения кода к другим службам, таким как хранилище, очереди и базы данных. В модели программирования Python версии 2 вы объявляете привязки с помощью декораторов.
Существуют два основных типа привязок:
- Триггеры (входные данные, запускающие функцию)
- Входные и выходные данные (дополнительные источники данных или назначения)
Дополнительные сведения о доступных триггерах и привязках см. в разделе Triggers и Bindings в Функции 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.
- Глобальные переменные можно использовать для кэширования дорогостоящих вычислений, но их состояние не гарантируется для сохранения во время выполнения функций.
- Временные файлы хранятся в и не гарантируется, что они сохранятся между вызовами или экземплярами при масштабировании.
- Вы можете получить доступ к контексту вызова функции через класс 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"
}
]
}
основные понятия
- Каждая функция имеет один триггер, но может иметь несколько привязок.
- Добавьте входные данные, указав "in" в . Выходные данные имеют значение .
- Вы можете получить доступ к сведениям запроса через объект и создать настраиваемый с заголовками, кодом состояния и текстом.
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
)
Основные понятия
- Используйте или триггерные декораторы (, и другие) для определения способа вызова функции.
- Добавьте входные данные с помощью декораторов, таких как , и других.
- Выходные данные могут быть:
- Возвращается напрямую (если только один выход)
- Назначается с помощью привязок и метода для нескольких выходных данных.
- Вы можете получить доступ к сведениям запроса через объект и создать настраиваемый с заголовками, кодом состояния и текстом.
Привязки типов ПАКЕТА SDK
Для выбора триггеров и привязок можно работать с типами данных, реализованными базовыми #REF! и платформами. Используя эти привязки типов ПАКЕТА SDK, вы можете взаимодействовать с данными привязки, как если бы вы использовали базовый пакет SDK службы. Дополнительные сведения см. в поддерживаемых привязках типов ПАКЕТА SDK.
Внимание
Поддержка привязок типов ПАКЕТА SDK для Python доступна только в модели программирования Python версии 2.
Переменные среды
Переменные среды в Функции Azure позволяют безопасно управлять значениями конфигурации, строками подключения и секретами приложений без их жесткого кода в коде функции.
Можно определить переменные среды:
- Локально: в файлеlocal.settings.json во время локальной разработки.
- В #REF!: как Параметры приложения на странице конфигурации приложения функции на портале #REF!.
Доступ к переменным непосредственно в коде с помощью или .
setting_value = os.getenv("myAppSetting", "default_value")
Примечание.
Функции Azure также распознает системные переменные среды, которые настраивают поведение среды выполнения Функций и работу Python рабочего процесса. Эти переменные не используются явным образом в коде функции, но влияют на работу приложения. Полный список системных переменных среды см. в справочнике по параметрам приложения.
Управление пакетами
Чтобы использовать другие пакеты Python в приложении Функции Azure, перечислите их в файле requirements.txt в корне проекта. Эти пакеты импортируются системой импорта Python, а затем можно ссылаться на эти пакеты как обычно.
Дополнительные сведения о создании и развертывании с внешними зависимостями см. в разделе Build Options for Python Function Apps.
Например, в следующем примере показано, как модуль включен и используется в приложении-функции.
<requirements.txt>
requests==2.31.0
Установите пакет локально с помощью .
После установки пакета можно импортировать и использовать его в коде функции:
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.
- Избегайте именования папок проекта после Python стандартных библиотек (например,
- Развертывание
- Чтобы предотвратить ошибки, убедитесь, что в списке перечислены все необходимые зависимости.
- При обновлении Python версии приложения перестройте и повторно разверните приложение в новой версии Python, чтобы избежать конфликтов зависимостей с ранее созданными пакетами.
- Зависимости, отличные от PyPI:
- Можно включить в приложение зависимости, недоступные в PyPI, такие как локальные пакеты, wheel-файлы или частные фиды. Инструкции по настройке см. в разделе Пользовательские зависимости в Python Функции Azure.
- Функции Azure Python зависимостей рабочих ролей:
- Если пакет содержит определенные библиотеки, которые могут столкнуться с зависимостями рабочей роли (например, или ), настройте PYTHON_ISOLATE_WORKER_DEPENDENCIES на 1 в параметрах приложения, чтобы предотвратить обращение приложения к зависимостям рабочей роли. Для Python 3.13 и более поздних версий функция this включена по умолчанию.
Выполнение и развертывание
В этом разделе содержатся сведения о запуске функций локально, поддержке версий Python, сборке и развертывании и конфигурации среды выполнения. Используйте эти сведения для успешного запуска приложения-функции как в локальных, так и в #REF! средах.
Запуск на локальной машине
Перед развертыванием в #REF! можно запустить и протестировать приложение-функцию Python на локальном компьютере.
Использование основных средств Функции Azure
Установите Функции Azure Core Tools и запустите локальную среду выполнения, выполнив команду func start из корневого каталога проекта:
func start
При локальном запуске приложения-функции Core Tools отображает все функции, которые находит для вашего приложения.
Functions:
http_trigger: http://localhost:7071/api/http_trigger
Дополнительные сведения об использовании Core Tools см. в разделе Разработка Функции Azure локально с использованием Core Tools.
Вызов функции напрямую
Используя azure-functions >= 1.21.0, вы также можете вызывать функции непосредственно с помощью интерпретатора Python без запуска основных инструментов. Этот подход полезен для быстрых модульных тестов:
# 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 Core Tools | func azure functionapp publish <APP_NAME> |
Идеально подходит для выполнения CI, локальной автоматизации или при работе с кроссплатформенной платформой. |
| AZ CLI | az functionapp deployment source config-zip |
Полезно при развертывании сценариев за пределами основных инструментов. Хорошо работает в автоматизированных конвейерах или облачных терминалах (Azure Cloud Shell). |
| Visual Studio Code (расширение Функции Azure) | Палитра команд → "Функции Azure: Развернуть в #REF!..." | Лучше всего подходит для начинающих или интерактивных развертываний. Автоматически обрабатывает упаковку и сборку. |
| GitHub Actions | Azure/functions-action@v1 |
Идеально подходит для CI/CD на основе #REF!. Включает автоматическое развертывание при отправке (push) или слиянии pull request. |
| Azure Pipelines | Задача | Корпоративная CI/CD с помощью Azure DevOps. Лучше всего подходит для управляемых рабочих процессов выпуска, модульных сборок и многоступенчатых пайплайнов. |
| Пользовательское развертывание контейнеров | Отправка контейнера | Требуется при необходимости пакетов, необходимых на уровне операционной системы, настроенных пользователем сборок Python, зафиксированных сред выполнения или неподдерживаемых зависимостей (например, системных библиотек, локальных двоичных файлов). |
| Создание функции на основе портала | Создание функции на портале #REF! → встроенный редактор | Используется только для простых функций без зависимостей. Отлично подходит для демонстраций или обучения, но не рекомендуется для приложений, требующих сторонних пакетов. |
Примечание.
Создание функций на основе портала не поддерживает сторонние зависимости и не рекомендуется создавать рабочие приложения. Невозможно установить или ссылаться на пакеты за пределами azure-functions и встроенной Python стандартной библиотеки.
Внимание
После 30 сентября 2028 г. возможность размещения функционального приложения на Linux в плане потребления будет прекращена. Чтобы избежать сбоев, перенесите существующие приложения плана потребления, которые работают в Linux, в план потребления Flex до этой даты. Приложения, работающие на #REF! в плане потребления, не влияют на это изменение.
После 30 сентября 2025 г. в план потребления Linux не добавляются новые функции и новая поддержка стека языков. Последние поддерживаемые языковые версии для потребления Linux: .NET 9, Python 3.12, Node.js 22, PowerShell 7.4 и Java 21. Новые языковые версии не поддерживаются для использования Linux.
Дополнительные сведения см. в материале «Перенос приложений из плана использования в план Flex Consumption».
обновления Python версии 3.13+
Начиная с Python 3.13, Функции Azure представляет несколько основных улучшений среды выполнения и производительности, влияющих на создание и запуск приложений. К ключевым изменениям относятся:
Управление версиями среды выполнения. Теперь вы можете закрепить или обновить приложение до определенных Python рабочих версий, ссылаясь на пакет
azure-functions-runtimeвrequirements.txt.Без включения управления версиями приложение выполняется в стандартной версии среды выполнения Python, которой управляет Функции. Необходимо изменить файл requirements.txt, чтобы запросить последнюю выпущенную версию, предварительную версию или закрепить приложение на определенную версию среды выполнения Python.
Чтобы включить управление версиями среды выполнения, добавьте ссылку на пакет среды выполнения Python в файл requirements.txt, где значение, назначенное пакету, определяет используемую версию среды выполнения.
Избегайте закрепления продуктовых приложений на предрелизные версии среды выполнения (альфа-, бета- или dev-версии).
Чтобы узнавать об изменениях, регулярно просматривайте заметки о выпуске среды выполнения Python.
В следующей таблице указано поведение управления версиями на основе значения версии этого параметра в файле requirements.txt :
Версия Example Поведение Значение не задано azure-functions-runtimeПриложение Python версии 3.13+ запускается в последней доступной версии среды выполнения Функций Python. Этот вариант лучше всего подходит для обновления платформы и функций, так как ваше приложение автоматически получает последние стабильные обновления среды выполнения. Закреплено за определенной версией azure-functions-runtime==1.2.0Ваше приложение Python версии 3.13+ остается на прикрепленной версии среды выполнения и не получает автоматические обновления. Вместо этого необходимо вручную обновить закрепленную версию, чтобы воспользоваться преимуществами новых функций, исправлений и улучшений среды выполнения. Закрепление рекомендуется для критически важных рабочих нагрузок в рабочей среде, где важна стабильность и прогнозируемость. Закрепление также позволяет протестировать приложение на предрелизных версиях среды выполнения во время разработки. Нет ссылки на пакет n/a Не устанавливая azure-functions-runtime, приложение Python 3.13+ запускается в версии среды выполнения Python по умолчанию, которая находится за последней выпущенной версией. Обновления периодически выполняются функциями. Этот параметр обеспечивает стабильность и широкую совместимость. Однако доступ к новейшим функциям и исправлениям задерживается до обновления версии по умолчанию.
Изоляция зависимостей: зависимости вашего приложения (например или ) полностью изолированы от зависимостей рабочей среды, предотвращая конфликты версий. Параметр приложения
PYTHON_ISOLATE_WORKER_DEPENDENCIESне влияет на приложения, работающие на Python 3.13 или более поздней версии.Упрощенная настройка потоковой передачи HTTP — не требуются специальные параметры приложения.
Удалена поддержка расширений рабочих ролей и функций общей памяти.
Управление версиями среды выполнения: теперь вы можете закрепить приложение на конкретных версиях рабочего процесса Python или обновить его, ссылаясь на пакет
azure-functions-runtime-v1вrequirements.txt.Без включения управления версиями приложение выполняется в стандартной версии среды выполнения Python, которой управляет Функции. Необходимо изменить файл requirements.txt, чтобы запросить последнюю выпущенную версию, предварительную версию или закрепить приложение на определенную версию среды выполнения Python.
Чтобы включить управление версиями среды выполнения, добавьте ссылку на пакет среды выполнения Python в файл requirements.txt, где значение, назначенное пакету, определяет используемую версию среды выполнения.
Избегайте закрепления продуктовых приложений на предрелизные версии среды выполнения (альфа-, бета- или dev-версии).
Для отслеживания изменений следите за заметками о выпуске Python runtime регулярно.
В следующей таблице указано поведение управления версиями на основе значения версии этого параметра в файле 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 по умолчанию, которая находится за последней выпущенной версией. Обновления периодически выполняются функциями. Этот параметр обеспечивает стабильность и широкую совместимость. Однако доступ к новейшим функциям и исправлениям задерживается до обновления версии по умолчанию.
Изоляция зависимостей: зависимости вашего приложения (например или ) полностью изолированы от зависимостей рабочей среды, предотвращая конфликты версий. Параметр приложения
PYTHON_ISOLATE_WORKER_DEPENDENCIESне влияет на приложения, работающие на Python 3.13 или более поздней версии.Удалена поддержка расширений рабочих ролей и функций общей памяти.
Наблюдаемость и тестирование
В этом разделе рассматриваются логирование, мониторинг и тестирование возможностей, чтобы помочь вам отлаживать проблемы, отслеживать производительность и обеспечивать надежность приложений функций Python.
Ведение журналов и мониторинг
Функции Azure предоставляет корневой модуль ведения журнала, который можно использовать непосредственно с встроенным модулем Python logging. Все сообщения, написанные с помощью этого средства ведения журнала, автоматически отправляются в Application Insights при запуске приложения в #REF!.
Ведение журнала позволяет записывать сведения о среде выполнения и диагностировать проблемы без необходимости установки.
Пример ведения журнала с помощью триггера 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, info, warning, error, critical), и они отображаются на портале #REF! в разделе "Журналы" или "Application Insights".
Дополнительные сведения о мониторинге Функции Azure на портале см. в статье Monitor Функции Azure.
Примечание.
Чтобы просмотреть журналы отладки в Application Insights, требуется дополнительная настройка. Эту функцию можно включить, установив PYTHON_ENABLE_DEBUG_LOGGING в и установив в или в файле host.json. По умолчанию журналы отладки не отображаются в Application Insights.
Ведение логирования из фоновых потоков
Если функция запускает новый поток и нужно выполнить логирование из этого потока, убедитесь, что аргумент передан в этот поток. содержит локальное хранилище потока и текущее , которые должны быть установлены на рабочем потоке, чтобы логи корректно ассоциировались с выполнением функции.
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) для получения инструкций по настройке и примеров кода.
Модульное тестирование
Пишите и запускайте модульные тесты для своих функций, используя . Вы можете протестировать функции Python, такие как другие Python код, с помощью стандартных платформ тестирования. Для большинства привязок можно создать макет входного объекта, создав экземпляр соответствующего класса из пакета.
Используя в качестве примера, следующий пример является макетным тестом функции, активируемой HTTP:
Сначала создайте файл project_root/function_app.py и реализуйте функцию в качестве триггера 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
Вы видите результаты в терминале следующим образом:
============================================================================================================ test session starts ============================================================================================================
collected 1 item
test_my_function.py . [100%]
============================================================================================================= 1 passed in 0.24s =============================================================================================================
Оптимизация и более сложные темы
Дополнительные сведения о оптимизации приложений функций Python см. в следующих статьях:
- Масштабирование и производительность
- Использование Flask Framework с Функции Azure
- Устойчивые функции
- Потоковая передача HTTP
Связанные статьи
Дополнительные сведения о функциях см. в следующих статьях:
- документация по API пакетов Функции Azure
- Лучшие практики для Функции Azure
- Функции Azure триггеры и привязки
- привязки Хранилище BLOB-объектов
- Привязки HTTP и вебхуков
- Привязки хранилища очередей
- Триггеры таймера
Проблемы с использованием Python? Сообщите нам и создайте запрос.