Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Функции 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 и регистрации их в основном приложении. Это разделение позволяет упорядочить код и повторно использовать его.
Чтобы определить и зарегистрировать схему:
Определите схему в другом файле 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!")Зарегистрируйте схему в главном
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 позволяют безопасно управлять значениями конфигурации, строками подключения и секретами приложений без их жесткого кода в коде функции.
Можно определить переменные среды:
- Локально: в файлеlocal.settings.json во время локальной разработки.
- В Azure: в качестве параметров приложения на странице конфигурации вашей функции в портале 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.
- Избегайте именования папок проекта после стандартных библиотек Python (например,
- Развертывание
- Чтобы предотвратить
ModuleNotFoundошибки, убедитесь, что в списке перечисленыrequirements.txtвсе необходимые зависимости. - При обновлении версии Python приложения перестройте и повторно разверните приложение в новой версии Python, чтобы избежать конфликтов зависимостей с ранее созданными пакетами.
- Чтобы предотвратить
- Зависимости, отличные от PyPI:
- Можно включить в приложение зависимости, недоступные в PyPI, такие как локальные пакеты, wheel-файлы или частные фиды. Инструкции по настройке см. в разделе Пользовательские зависимости в Python Azure Functions.
- Зависимости рабочего процесса 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).
Модульное тестирование
Пишите и запускайте модульные тесты для своих функций, используя 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 см. в следующих статьях:
- Масштабирование и производительность
- Использование Flask Framework с функциями Azure
- Цепочки функций в устойчивых функциях — пример последовательности Hello
- Потоковая передача HTTP
Связанные статьи
Дополнительные сведения о функциях см. в следующих статьях:
- Документация по API пакета Функций Azure
- Рекомендации по функциям Azure
- Azure Functions triggers and bindings (Триггеры и привязки в Функциях Azure)
- Привязки Хранилища BLOB-объектов
- Привязки HTTP и webhook
- Привязки хранилища очередей
- Триггеры таймера
Проблемы с использованием Python? Сообщите нам и создайте запрос.