We detected you are likely not from a Russian-speaking region. Would you like to switch to the international version of the site?

К списку статей

Бессерверные функции в PHP и Python: практический гид

10 фев 2026 в 11:30 Усачёв Денис Евгеньевич

Термин start в английском языке означает начало или запуск действия. В контексте разработки это «запустить» код без необходимости управлять серверной инфраструктурой. Бессерверные (serverless) функции позволяют сосредоточиться на бизнес‑логике, а облако берёт на себя масштабирование, мониторинг и оплату только за фактическое время выполнения.

Что такое бессерверные функции?

Бессерверные функции – это небольшие независимые куски кода, которые вызываются в ответ на событие (HTTP‑запрос, запись в очередь, изменение в базе данных и т.д.). Платформы автоматически выделяют ресурсы, исполняют функцию и освобождают их сразу после завершения.

Ключевые платформы для PHP и Python

  • AWS Lambda – поддерживает PHP через слой Bref и нативно Python.
  • Google Cloud Functions – нативный Python, PHP через контейнеры.
  • Azure Functions – поддерживает Python, PHP можно запустить в Linux‑контейнере.
  • Cloudflare Workers – ориентированы на JavaScript, но позволяют запускать WASM‑модули, что открывает путь для PHP‑runtime.

Как подготовить PHP‑функцию для AWS Lambda (пример с Bref)

Самый популярный способ – использовать Bref, который упаковывает ваш код в Docker‑образ совместимый с Lambda.

# composer.json
{
    "require": {
        "bref/bref": "^2.0",
        "laminas/laminas-diactoros": "^2.13"
    }
}

Создаём обработчик:

// src/Handler.php
getQueryParams()['name'] ?? 'World';
    $body = "Hello, {$name}!";
    return new Response('php://memory', 200, ['Content-Type' => 'text/plain'])
        ->withBody(
            (new \Laminas\Diactoros\Stream('php://temp', 'r+'))
                ->write($body)
        );
};

Файл serverless.yml для деплоя:

service: php-start
provider:
  name: aws
  runtime: provided.al2
plugins:
  - ./vendor/bref/bref
functions:
  hello:
    handler: src/Handler.php
    events:
      - httpApi:
          path: /hello
          method: GET

Деплой командой sls deploy. После публикации вы получаете URL, по которому функция доступна сразу же – без настройки EC2‑инстансов.

Сравнительный пример: Python‑функция в AWS Lambda

# handler.py
import json

def lambda_handler(event, context):
    name = event.get('queryStringParameters', {}).get('name', 'World')
    return {
        'statusCode': 200,
        'headers': {'Content-Type': 'text/plain'},
        'body': f'Hello, {name}!'
    }

Для Python достаточно разместить файл handler.py и указать в конфигурации handler: handler.lambda_handler. Сравнительно простая настройка, но в случае PHP требуется дополнительный слой (Bref), что подчёркивает важность выбора правильного инструмента.

Архитектурные паттерны для бессерверных функций

  • Event‑driven (событийно‑ориентированная) – функции реагируют на SNS/SQS, CloudWatch Events, Pub/Sub.
  • API‑gateway – функции выступают как микросервисы, обслуживая REST/GraphQL запросы.
  • Batch processing – обработка файлов из S3, трансформирование данных в Athena/BigQuery.
  • Background jobs – запуск длительных задач через Step Functions или Cloud Tasks.

Плюсы и минусы использования PHP в serverless

ПлюсыМинусы
‑ Возможность использовать существующий код‑базу на PHP.
‑ Хорошая поддержка Composer и автолоадеров.
‑ Библиотеки Bref упрощают деплой.
‑ Холодный старт (cold start) выше, чем у нативных рантаймов.
‑ Требуется слой/контейнер, что увеличивает размер артефакта.
‑ Ограниченная поддержка некоторых расширений.

Лучшие практики

  1. Минимизируйте размер зависимостей – используйте composer install --no-dev --optimize-autoloader.
  2. Разделяйте функции по ответственности (single‑purpose).
  3. Внедряйте логирование через stderr или сервисы CloudWatch/Stackdriver.
  4. Обрабатывайте ошибки и тайм‑ауты – возвращайте корректные HTTP‑коды.
  5. Тестируйте локально с sam local invoke (для AWS) или functions-framework (для GCP).

Отладка и мониторинг

Для PHP‑функций Bref автоматически интегрируется с CloudWatch Logs. Для более глубокого анализа используйте X‑Ray (AWS) или OpenTelemetry. В Python‑окружении аналогичные инструменты доступны из коробки.

Когда стоит выбирать серверный подход вместо бессерверного

Если ваш код требует длительного выполнения (>15 минут), сложных сетевых соединений или специфических системных библиотек, традиционный сервер (Docker, Kubernetes) будет более надёжным.

Заключение

Бессерверные функции позволяют быстро «запустить» (start) новые возможности без лишних затрат на инфраструктуру. PHP, хотя и не является нативным рантаймом, успешно интегрируется через инструменты вроде Bref, открывая путь к модернизации существующих проектов. Python остаётся самым простым вариантом для новых serverless‑сервисов, но правильный выбор зависит от вашего стека и бизнес‑требований.

Услуги RybinskLab

RybinskLab предлагает полный спектр разработки и поддержки бессерверных решений: от архитектурного проектирования и миграции legacy‑кода на PHP‑serverless до создания масштабируемых микросервисов на Python. Свяжитесь с нами, чтобы ускорить вывод продукта на рынок и снизить операционные расходы.

* Материал подготовлен с использованием ИИ-ассистента, проверен и отредактирован экспертом RybinskLab.

Поделиться материалом:

Нужна сложная разработка?

Усачёв Денис Евгеньевич — проектирование архитектуры, бэкенд на PHP/Python, интеграции API и базы данных.

Обсудить проект