Yandex Cloud
  • Сервисы
  • Решения
  • Почему Yandex Cloud
  • Сообщество
  • Тарифы
  • Документация
  • Связаться с нами
Подключиться
Language / Region
Проект Яндекса
© 2023 ООО «Яндекс.Облако»
Yandex Cloud Functions
  • Сопоставление с другими сервисами Yandex Cloud
  • Начало работы
    • Обзор
    • Создание функции
      • Обзор
      • Node.js
      • Python
      • Go
      • PHP
      • Bash
      • Java
  • Пошаговые инструкции
    • Все инструкции
    • Получение IAM-токена сервисного аккаунта с помощью функции
    • Подключение к управляемым БД из функции
    • Получение информации о функции
      • Получить список функций
      • Получить список версий функции
      • Получить информацию о функции
      • Получить информацию о версии функции
    • Управление правами доступа к функции
      • Сделать функцию публичной
      • Сделать функцию приватной
      • Посмотреть роли, назначенные на функцию
      • Назначить роли на функцию
      • Отозвать роли, назначенные на функцию
    • Создание функции
      • Создать функцию
      • Создать версию функции
    • Вызов функции
      • Вызвать функцию
      • Аутентифицироваться при вызове приватной функции через HTTPS
    • Управление функцией
      • Изменить функцию
        • Изменить имя
        • Изменить описание
      • Масштабировать функцию
        • Посмотреть настройки масштабирования
        • Добавить настройки масштабирования
        • Удалить настройки масштабирования
      • Добавить переменные окружения
      • Указать облачную сеть
      • Передать секреты Yandex Lockbox
      • Управлять тегами
        • Добавить тег
        • Удалить тег
      • Управлять метками
        • Добавить метку
        • Изменить метку
        • Удалить метку
      • Посмотреть графики мониторинга
      • Управлять логами
        • Посмотреть логи
        • Записать логи
      • Удалить функцию
    • Получение информации о триггере
      • Получить список триггеров
      • Получить информацию о триггере
    • Создание триггера
      • Создать таймер
      • Создать триггер для Message Queue
      • Создать триггер для Object Storage
      • Создать триггер для Container Registry
      • Создать триггер для Cloud Logs
      • Создать триггер для Cloud Logging
      • Создать триггер для Yandex IoT Core
      • Создать триггер для бюджетов
      • Создать триггер для Data Streams
      • Создать триггер для почты
    • Управление триггером
      • Изменить триггер
        • Изменить имя
        • Изменить описание
      • Управлять метками
        • Добавить метку
        • Изменить метку
        • Удалить метку
      • Посмотреть графики мониторинга
      • Удалить триггер
  • Концепции
    • Обзор
    • Функция
    • Вызов функции
    • Сетевое взаимодействие
    • Среда выполнения
      • Обзор
      • Окружение
      • Контекст выполнения
      • Предзагружаемая среда выполнения
    • Сборщик
    • Триггер
      • Обзор
      • Таймер
      • Триггер для Message Queue
      • Триггер для Object Storage
      • Триггер для Container Registry
      • Триггер для Cloud Logs
      • Триггер для Cloud Logging
      • Триггер для Yandex IoT Core
      • Триггер для бюджетов
      • Триггер для Data Streams
      • Триггер для почты
    • Dead Letter Queue
    • Логи функции
    • Резервное копирование
    • Квоты и лимиты
  • Разработка на Node.js
    • Обзор
    • Управление зависимостями
    • Обработчик запросов
    • Контекст вызова
    • Журналирование
    • Обработка ошибок
    • Использование SDK
  • Разработка на Python
    • Обзор
    • Управление зависимостями
    • Обработчик запросов
    • Контекст вызова
    • Журналирование
    • Обработка ошибок
    • Использование SDK
  • Разработка на Go
    • Обзор
    • Управление зависимостями
    • Обработчик запросов
    • Контекст вызова
    • Журналирование
    • Обработка ошибок
    • Использование SDK
  • Разработка на PHP
    • Обзор
    • Управление зависимостями
    • Обработчик запросов
    • Контекст вызова
    • Журналирование
    • Обработка ошибок
  • Разработка на Bash
    • Обзор
    • Обработчик запросов
    • Журналирование
    • Обработка ошибок
    • Использование SDK
  • Разработка на Java
    • Обзор
    • Модель программирования
      • Обзор
      • Интерфейс Function
      • Интерфейс YcFunction
      • Класс HttpServlet
      • Spring Boot
    • Управление зависимостями
    • Обработчик запросов
    • Контекст вызова
    • Журналирование
    • Обработка ошибок
    • Использование SDK
  • Разработка на R
    • Обзор
    • Модель программирования
    • Управление зависимостями
    • Обработчик запросов
    • Контекст вызова
    • Журналирование
    • Обработка ошибок
  • Разработка на C#
    • Обзор
    • Модель программирования
      • Обзор
      • Интерфейс Function
      • Интерфейс YcFunction
    • Управление зависимостями
    • Обработчик запросов
    • Контекст вызова
    • Журналирование
    • Обработка ошибок
    • Использование SDK
  • Практические руководства
    • Все практические руководства
    • Создание навыка Алисы
    • Развертывание веб-приложения
    • Разработка навыка Алисы и сайта с авторизацией
    • Запись данных с устройства в Managed Service for PostgreSQL
    • Разработка Slack-бота
    • Разработка Telegram-бота
    • Подключение к базе данных YDB из функции на Python
    • Подключение к базе данных YDB из функции на Node.js
    • Конвертация видео в GIF на Python
    • Создание функции Node.js с помощью TypeScript
    • Разработка пользовательской интеграции
    • Создание триггера для бюджетов, который вызывает функцию для остановки ВМ
  • Правила тарификации
  • Управление доступом
  • Справочник API Functions
    • Аутентификация в API
    • gRPC (англ.)
      • Overview
      • FunctionService
      • OperationService
    • REST (англ.)
      • Overview
      • Function
        • Overview
        • create
        • createVersion
        • delete
        • get
        • getVersion
        • getVersionByTag
        • list
        • listAccessBindings
        • listOperations
        • listRuntimes
        • listScalingPolicies
        • listTagHistory
        • listVersions
        • removeScalingPolicy
        • removeTag
        • setAccessBindings
        • setScalingPolicy
        • setTag
        • update
        • updateAccessBindings
  • Справочник API Triggers
    • Аутентификация в API
    • gRPC (англ.)
      • Overview
      • TriggerService
      • OperationService
    • REST (англ.)
      • Overview
      • Trigger
        • Overview
        • create
        • delete
        • get
        • list
        • listOperations
        • pause
        • resume
        • update
  • Вопросы и ответы
  1. Разработка на Python
  2. Обработчик запросов

Обработчик запросов функции на Python

Статья создана
Yandex Cloud
,
улучшена
Dmitry A.
  • Виды обработчика
  • Синхронный обработчик
  • Асинхронный обработчик
  • Примеры
    • Вывод структуры HTTP-запроса

Обработчик запросов — это метод, который используется для обработки каждого вызова функции на Python. При создании версии функции необходимо указать точку входа, которая состоит из имени файла и имени обработчика запросов (например, main.handler).

Примечание

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

При вызове обработчика среда выполнения передает следующие аргументы:

  1. Тело запроса (параметр event):

    • Если тело запроса — JSON-документ, то оно будет преобразовано в dict с помощью метода json.loads.
    • Если функция была вызвана с параметром строки запроса integration=raw, тело HTTP-запроса передается в функцию как есть, без обработки.
  2. Контекст вызова (параметр context).

    Контекст содержит необходимую информацию о версии функции. Структура этого объекта описана в разделе Контекст вызова функции на Python.

Виды обработчика

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

Синхронный обработчик

Чтобы вернуть результат выполнения, используйте оператор return или сигнализируйте об исключении с помощью оператора raise. Синхронная функция обязана возвращать результат или завершаться исключением.

Асинхронный обработчик

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

  • return — возвращает ответ функции.
  • raise — сообщает среде выполнения об ошибке.
  • await — отслеживает выполнение вызова асинхронных функций.

Примечание

В качестве среды исполнения асинхронных функций поддерживается только библиотека asyncio.

Подробнее о разработке с помощью async/await читайте в соответствующем разделе документации.

Примеры

Вывод структуры HTTP-запроса

Следующая функция выводит структуру запроса и контекста вызова одновременно и в журнал выполнения, и в ответ функции:

import json


def handler(event, context):
    return {
        'statusCode': 200,
        'body': json.dumps(
            {
                'event': event,
                'context': context,
            }, 
            default=vars,
        ),
    }

Пример вызова функции:

curl --data '{"hello": "world"}' -H 'Content-Type: application/json' https://functions.yandexcloud.net/d4eo2faf62**********?param=one

Результат:

{
    "context": {
        "aws_request_id": "6e8356f9-489b-4c7b-8ba6-c8cd74f25455",
        "deadline_ms": 1657713543198,
        "function_name": "d4eo2faf62**********",
        "function_version": "d4e3vrugh3**********",
        "invoked_function_arn": "d4eo2faf62**********",
        "log_group_name": "ckgjmanjlh**********",
        "log_stream_name": "d4e3vrugh3**********",
        "memory_limit_in_mb": 128,
        "request_id": "6e8356f9-489b-4c7b-8ba6-c8cd74f25455",
        "token": {
            "access_token": "<IAM-токен>",
            "expires_in": 42299,
            "token_type": "Bearer"
        }
    },
    "event": {
        "body": "{\"hello\": \"world\"}",
        "headers": {
            "Accept": "*/*",
            "Content-Length": "18",
            "Content-Type": "application/json",
            "Host": "functions.yandexcloud.net",
            "User-Agent": "curl/7.64.1",
            "X-Forwarded-For": "109.252.148.209",
            "X-Real-Remote-Address": "[109.252.148.209]:2816",
            "X-Request-Id": "6e8356f9-489b-4c7b-8ba6-c8cd74f25455",
            "X-Trace-Id": "e9fe9b05-c1aa-4fb8-94d8-a514fd6f3ff7"
        },
        "httpMethod": "POST",
        "isBase64Encoded": false,
        "multiValueHeaders": {
            "Accept": [
                "*/*"
            ],
            "Content-Length": [
                "18"
            ],
            "Content-Type": [
                "application/json"
            ],
            "Host": [
                "functions.yandexcloud.net"
            ],
            "User-Agent": [
                "curl/7.64.1"
            ],
            "X-Forwarded-For": [
                "109.252.148.209"
            ],
            "X-Real-Remote-Address": [
                "[109.252.148.209]:2816"
            ],
            "X-Request-Id": [
                "6e8356f9-489b-4c7b-8ba6-c8cd74f25455"
            ],
            "X-Trace-Id": [
                "e9fe9b05-c1aa-4fb8-94d8-a514fd6f3ff7"
            ]
        },
        "multiValueParams": {},
        "multiValueQueryStringParameters": {
            "param": [
                "one"
            ]
        },
        "params": {},
        "pathParams": {},
        "queryStringParameters": {
            "param": "one"
        },
        "requestContext": {
            "httpMethod": "POST",
            "identity": {
                "sourceIp": "109.252.148.209",
                "userAgent": "curl/7.64.1"
            },
            "requestId": "6e8356f9-489b-4c7b-8ba6-c8cd74f25455",
            "requestTime": "13/Jul/2022:11:58:59 +0000",
            "requestTimeEpoch": 1657713539
        },
        "url": ""
    }
}

Была ли статья полезна?

Language / Region
Проект Яндекса
© 2023 ООО «Яндекс.Облако»
В этой статье:
  • Виды обработчика
  • Синхронный обработчик
  • Асинхронный обработчик
  • Примеры
  • Вывод структуры HTTP-запроса