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 без персональных данных.
создать index.py с handler(event, context). Не расширяйте проект до первого успешного запуска.
версия функции активна. Проверяйте значение, а не отсутствие ошибки.
После успеха добавьте POST-сценарий и локальные unit-тесты без облака. Так копирование станет практикой.
Как устроен учебный проект Yandex Cloud Functions
Cloud Functions передаёт event и context в handler, функция валидирует queryStringParameters и возвращает словарь HTTP-ответа. Держите ввод, логику и отображение раздельно: тогда каждый этап можно проверить отдельно.
| Этап | Действие | Проверяемый результат |
|---|---|---|
| Код | создать index.py с handler(event, context) | локальный вызов возвращает словарь |
| Версия | выбрать Python 3.14 и index.handler | версия функции активна |
| Доступ | разрешить публичный вызов учебного endpoint | HTTPS URL отвечает без токена |
| Проверка | вызвать корректный и пустой name | статусы 200 и 400 различаются |
Контрольные точки: код, версия, доступ и проверка. Следующий шаг начинается после совпадения с ожидаемым результатом.

От входных данных до видимого результата. Сначала проверяется вход, затем действие и только потом интерфейс.
Собираем рабочий пример шаг за шагом
Материал сверялся с быстрым стартом 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, функция не падает.
- Повторный запуск даёт тот же предсказуемый результат.
- Пустой ввод получает понятное сообщение вместо падения.
Главная функция принимает явный вход и возвращает результат, который можно проверить отдельно от интерфейса. Найдите в примере вход, проверку и место формирования результата.

Что отличает устойчивый проект от случайного запуска. Явные границы делают ошибку локальной и понятной.
Что происходит внутри и почему это работает
Runtime импортирует модуль index, находит handler и передаёт нормализованное событие HTTP-шлюза. Возвращаемый statusCode управляет реальным ответом клиенту. Логику держите отдельно от вывода: функция получает аргумент и возвращает значение, а интерфейс показывает его. Публичный endpoint подходит для учебного hello, но операции с данными требуют авторизации, лимитов и сервисного аккаунта с минимальными правами.
| Часть | За что отвечает | Что проверить |
|---|---|---|
| Event | содержит HTTP-параметры и тело | отсутствующие поля не вызывают KeyError |
| Handler | проверяет ввод и собирает payload | логика тестируется локально |
| Response | задаёт statusCode, headers и body | клиент получает JSON |
Serverless не отменяет стоимость ошибок. Бесконечный цикл, большой ответ или публичный endpoint без лимитов могут создать нагрузку. Задайте короткий тайм-аут и наблюдайте количество вызовов. Не прячьте поток в одном обработчике: сохраните вход, проверьте его, вызовите операцию и только затем обновите интерфейс.
Проверяем проект и добавляем свою функцию
Добавьте POST /sum с JSON-массивом чисел, ограничьте длину и напишите три локальных теста для handler. До правки запишите ожидаемое поведение одним предложением. После граничного теста повторите обычный сценарий.
- Сохраните ожидаемый результат: валидное имя получает statusCode 200, пустое имя 400, Content-Type равен application/json, а лог содержит request id без персональных данных.
- Измените правило: добавьте POST-сценарий и локальные unit-тесты без облака. Сначала предскажите итог.
- Передайте граничное значение и убедитесь, что приложение не падает.
- Верните корректные данные и объясните роли трёх основных частей.
- локальный вызов возвращает словарь
- версия функции активна
- HTTPS URL отвечает без токена
- статусы 200 и 400 различаются
После изменения повторите основной и ошибочный сценарии, чтобы новое поведение не сломало исходный результат. Полезная правка проходит от нового ввода до видимого результата.

Четыре проверки перед следующим шагом. Каждый следующий этап начинается после наблюдаемого результата.
Что запомнить и куда двигаться дальше
После первого 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. Имя функции чувствительно к регистру.
Поле может быть null. Используйте event.get и пустой словарь.
Клиент не отличает ошибку ввода. Возвращайте 400.
Функция получает лишние права. Выдавайте минимальную роль.
Что получится в итоге

Финальный экран показывает результат, состояние операции и понятное сообщение об ошибке без раскрытия секретов.
Что означает index.handler?
Модуль index.py и функция handler внутри него.
Почему body кодируется через json.dumps?
HTTP-ответ ожидает строку, а ensure_ascii=False сохраняет читаемый русский текст.
Что проверять первым, если Yandex Cloud Functions не запускается?
Версию среды, текущую папку, команду запуска и первую строку ошибки.
Как понять, что проект Yandex Cloud Functions работает?
Проверьте основной сценарий, неверный ввод, повторный запуск и один граничный случай.
Можно ли начать с готового кода?
Да. Добейтесь результата, измените одно правило и восстановите ключевую функцию без копирования.
Выберите одно улучшение и проведите его от ввода до результата.
Если не хватает основы, перейдите курс Python, затем восстановите ключевую функцию без подсказки.