БэкендDevOpsPython

Yandex Cloud Functions на Python: публикуем первое API без сервера

Публикуем первое API в Yandex Cloud Functions на Python 3.14: пишем handler, разбираем query-параметры, возвращаем JSON и читаем логи.

Кодик

Автор

6 мин чтения

Yandex Cloud Functions можно освоить на одном небольшом проекте, если сразу видеть вход, действие и результат. Cloud Functions запускает Python handler по HTTPS-запросу, поэтому для первого API не нужно самостоятельно администрировать сервер. Ниже вы соберёте работающий пример и проверите обычный и граничный сценарии.

Функция может успешно сохраниться, но возвращать 500 из-за неверной точки входа, структуры ответа или отсутствующего queryStringParameters. Поэтому отделим настройку, входные данные, основное действие и проверку. В этой статье вы соберёте HTTPS API /hello?name=Кодик, которое проверяет имя и возвращает JSON с request id. Проверка: валидное имя получает statusCode 200, пустое имя 400, Content-Type равен application/json, а лог содержит request id без персональных данных.

1Соберите минимум

создать index.py с handler(event, context). Не расширяйте проект до первого успешного запуска.

2Увидьте данные

версия функции активна. Проверяйте значение, а не отсутствие ошибки.

3Измените правило

После успеха добавьте POST-сценарий и локальные unit-тесты без облака. Так копирование станет практикой.

Как устроен учебный проект Yandex Cloud Functions

Cloud Functions передаёт event и context в handler, функция валидирует queryStringParameters и возвращает словарь HTTP-ответа. Держите ввод, логику и отображение раздельно: тогда каждый этап можно проверить отдельно.

ЭтапДействиеПроверяемый результат
Кодсоздать index.py с handler(event, context)локальный вызов возвращает словарь
Версиявыбрать Python 3.14 и index.handlerверсия функции активна
Доступразрешить публичный вызов учебного endpointHTTPS URL отвечает без токена
Проверкавызвать корректный и пустой nameстатусы 200 и 400 различаются

Контрольные точки: код, версия, доступ и проверка. Следующий шаг начинается после совпадения с ожидаемым результатом.

Путь данных в проекте Yandex Cloud Functions
От входных данных до видимого результата. Сначала проверяется вход, затем действие и только потом интерфейс.

Зафиксируйте первый успех Вызовите handler локально с event, где queryStringParameters отсутствует. Функция должна вернуть 400, а не KeyError. Сохраните команду запуска и ожидаемый вывод.

Собираем рабочий пример шаг за шагом

Материал сверялся с быстрым стартом Yandex Cloud Functions для Python 3.14 2 ноября 2026 года. Создайте функцию, выберите runtime Python 3.14, точку входа index.handler, память 128 МБ и тайм-аут 3 секунды. Проверьте текущую папку через pwd или Get-Location. Вставьте пример целиком, выполните один раз, затем разбирайте по частям.

import json
import re

NAME = re.compile(r"^[A-Za-zА-Яа-яЁё -]{1,40}$")

def response(status: int, payload: dict) -> dict:
    return {
        "statusCode": status,
        "headers": {"Content-Type": "application/json; charset=utf-8"},
        "isBase64Encoded": False,
        "body": json.dumps(payload, ensure_ascii=False),
    }

def handler(event, context):
    params = event.get("queryStringParameters") or {}
    name = str(params.get("name", "")).strip()
    request_id = getattr(context, "request_id", "local")
    if not NAME.fullmatch(name):
        return response(400, {"error": "name должен содержать от 1 до 40 букв"})
    return response(200, {"message": f"Привет, {name}!", "requestId": request_id})
Что должно произойти после запуска
  • URL с name=Кодик возвращает JSON и HTTP 200.
  • Запрос без name возвращает понятный JSON и HTTP 400, функция не падает.
  • Повторный запуск даёт тот же предсказуемый результат.
  • Пустой ввод получает понятное сообщение вместо падения.

Главная функция принимает явный вход и возвращает результат, который можно проверить отдельно от интерфейса. Найдите в примере вход, проверку и место формирования результата.

Хрупкий и проверяемый вариант Yandex Cloud Functions
Что отличает устойчивый проект от случайного запуска. Явные границы делают ошибку локальной и понятной.

Что происходит внутри и почему это работает

Runtime импортирует модуль index, находит handler и передаёт нормализованное событие HTTP-шлюза. Возвращаемый statusCode управляет реальным ответом клиенту. Логику держите отдельно от вывода: функция получает аргумент и возвращает значение, а интерфейс показывает его. Публичный endpoint подходит для учебного hello, но операции с данными требуют авторизации, лимитов и сервисного аккаунта с минимальными правами.

ЧастьЗа что отвечаетЧто проверить
Eventсодержит HTTP-параметры и телоотсутствующие поля не вызывают KeyError
Handlerпроверяет ввод и собирает payloadлогика тестируется локально
Responseзадаёт statusCode, headers и bodyклиент получает JSON

Serverless не отменяет стоимость ошибок. Бесконечный цикл, большой ответ или публичный endpoint без лимитов могут создать нагрузку. Задайте короткий тайм-аут и наблюдайте количество вызовов. Не прячьте поток в одном обработчике: сохраните вход, проверьте его, вызовите операцию и только затем обновите интерфейс.

Проверьте границу Передайте пробелы, 41 символ и HTML-тег в name. Все варианты должны вернуть 400 без отражения опасной строки в HTML. Меняйте одно условие за прогон, чтобы видеть причину.

Проверяем проект и добавляем свою функцию

Добавьте POST /sum с JSON-массивом чисел, ограничьте длину и напишите три локальных теста для handler. До правки запишите ожидаемое поведение одним предложением. После граничного теста повторите обычный сценарий.

Проверка своими руками
  1. Сохраните ожидаемый результат: валидное имя получает statusCode 200, пустое имя 400, Content-Type равен application/json, а лог содержит request id без персональных данных.
  2. Измените правило: добавьте POST-сценарий и локальные unit-тесты без облака. Сначала предскажите итог.
  3. Передайте граничное значение и убедитесь, что приложение не падает.
  4. Верните корректные данные и объясните роли трёх основных частей.
Готово, если выполняются все пункты
  • локальный вызов возвращает словарь
  • версия функции активна
  • HTTPS URL отвечает без токена
  • статусы 200 и 400 различаются

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

Четыре контрольные точки Yandex Cloud Functions
Четыре проверки перед следующим шагом. Каждый следующий этап начинается после наблюдаемого результата.

Что запомнить и куда двигаться дальше

После первого API подключите API Gateway или авторизацию, переменные окружения и структурированные логи. Не выдавайте функции лишнюю роль editor. Для закрепления откройте в serverless API на Cloudflare Workers, в первом FastAPI и в Yandex Object Storage.

Как изучить тему в Кодике

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

ШагЧто разобратьМини-проверка
1. ОсноваФункции, JSON, regex и исключения PythonОбъясните вход и выход функции.
2. Инструментevent, context, handler и HTTP-ответ Cloud FunctionsПовторите команду по памяти.
3. ПроектВалидацию query-параметров и локальные тестыПроверьте два сценария.
4. РефакторингAPI Gateway, IAM, лимиты и наблюдаемостьРазделите ввод, логику и вывод.

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

Неверная точка входа

Файл index.py требует index.handler. Имя функции чувствительно к регистру.

Прямой доступ к queryStringParameters

Поле может быть null. Используйте event.get и пустой словарь.

Всегда status 200

Клиент не отличает ошибку ввода. Возвращайте 400.

Широкая роль сервисного аккаунта

Функция получает лишние права. Выдавайте минимальную роль.

Сверяйтесь с первичной документацией. Команды и ограничения примера проверены по быстрому старту Cloud Functions. Если версия инструмента изменилась, официальный источник важнее старого скриншота.

Что получится в итоге

Готовый результат проекта: Yandex Cloud Functions на Python: публикуем первое API без сервера
Финальный экран показывает результат, состояние операции и понятное сообщение об ошибке без раскрытия секретов.

Короткие ответы
Что означает index.handler?

Модуль index.py и функция handler внутри него.

Почему body кодируется через json.dumps?

HTTP-ответ ожидает строку, а ensure_ascii=False сохраняет читаемый русский текст.

Что проверять первым, если Yandex Cloud Functions не запускается?

Версию среды, текущую папку, команду запуска и первую строку ошибки.

Как понять, что проект Yandex Cloud Functions работает?

Проверьте основной сценарий, неверный ввод, повторный запуск и один граничный случай.

Можно ли начать с готового кода?

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

Сделайте один осознанный шаг дальше

Выберите одно улучшение и проведите его от ввода до результата.

Если не хватает основы, перейдите курс Python, затем восстановите ключевую функцию без подсказки.