Сегодня я расскажу как использовать PHP в бессерверных средах Yandex Cloud Functions и Timeweb Cloud Serverless. Вы узнаете, как деплоить приложения с помощью Bref и Serverless Framework, оптимизировать производительность и избежать типичных ошибок.
Почему PHP и бессерверные архитектуры?
Раньше PHP ассоциировался с монолитными приложениями на shared-хостингах, но сегодня он отлично вписывается в serverless-парадигму. Бессерверные функции позволяют:
- Масштабироваться автоматически под нагрузку.
- Платить только за время выполнения (миллисекунды).
- Не управлять серверами — сосредоточиться на коде.
Проблема: PHP не был создан для serverless. Но инструменты вроде Bref и Serverless Framework решают эту задачу, упаковывая PHP-код в совместимый с Lambda/Functions формат.
Yandex Cloud Functions и Timeweb Cloud Serverless: что выбрать?
Перед погружением в код сравним две платформы:
| Критерий | Yandex Cloud Functions | Timeweb Cloud Serverless |
|---|---|---|
| Поддержка PHP | Через Docker-контейнеры | Нативная поддержка PHP 8.4+ |
| Триггеры | HTTP, Message Queue, Timer, Object Storage | HTTP, Cron, Cloud Events (S3, Kafka) |
| Холодный старт | ~500-1500 мс (зависит от размера контейнера) | ~300-800 мс (оптимизированная среда) |
| Цена | 0.0000017заGB−сек+0.02 за млн вызовов | 0.0000012заvCPU−сек+0.015 за млн вызовов |
| Интеграции | Yandex Database, Yandex Message Queue | Timeweb Database, Redis, сторонние сервисы |
Рекомендация:
- Выбирайте Yandex Cloud, если уже используете экосистему Yandex Cloud.
- Timeweb подойдет для стартапов — низкий порог входа и выгодные тарифы.
Инструменты: Bref или Serverless Framework
Что такое Bref?
Bref — компаньон для запуска PHP на AWS Lambda. Но его можно адаптировать и под другие облака, включая Yandex и Timeweb.
Плюсы:
- Готовые слои (Lambda layers) для PHP.
- Интеграция с популярными фреймворками (Laravel, Symfony).
Что такое Serverless Framework?
Serverless Framework — кроссплатформенный инструмент для деплоя на AWS, Yandex, Timeweb и другие облака.
Плюсы:
- Единая конфигурация для разных провайдеров.
- Плагины для мониторинга, оптимизации и тестирования.
Сравнение:
| Критерий | Bref | Serverless Framework |
|---|---|---|
| Фокус | PHP + AWS Lambda | Мультиоблачный (AWS, Yandex, Timeweb) |
| Сложность | Проще для PHP-разработчиков | Требует знания YAML-конфигов |
| Кастомизация | Ограничена слоями PHP | Гибкая настройка под любые триггеры |
Рекомендация:
- Используйте Bref, если цель — быстро запустить PHP-код с минимумом конфигурации.
- Serverless Framework подойдет для сложных проектов с интеграцией разных сервисов.
Деплой PHP-функции с Bref
Шаг 1: Установка
composer require bref/bref composer require bref/logger # Для логов
Шаг 2: Создаем функцию
Файл index.php:
<?php
require __DIR__ . '/vendor/autoload.php';
use Bref\Context\Context;
use Bref\Event\Http\HttpResponse;
return function ($event, Context $context): HttpResponse {
return new HttpResponse(
"Hello from Bref on Yandex Cloud!",
headers: ['Content-Type' => 'text/plain']
);
};
Шаг 3: Конфигурация для Yandex Cloud
Файл serverless.yml:
service: bref-yandex-function provider: name: yandex runtime: php82 triggers: - http: path: /hello plugins: - serverless-bref-plugin package: patterns: - '!node_modules/**' - '!tests/**'
Шаг 4: Деплой
serverless deploy
Совет: Для Timeweb Cloud замените provider.name на timeweb и укажите свои ключи доступа.
Деплой PHP-функции с Serverless Framework
Шаг 1: Установка
npm install -g serverless serverless config credentials --provider yandex --key-id <YC_KEY_ID> --secret <YC_SECRET>
Шаг 2: Конфигурация
Файл serverless.yml:
service: serverless-timeweb-php provider: name: timeweb runtime: php8.2 region: ru-1 functions: hello: handler: index.handler events: - http: path: /hello method: get plugins: - serverless-php-plugin
Шаг 3: Код функции
Файл index.php:
<?php
$handler = function ($event, $context) {
return [
'statusCode' => 200,
'body' => 'Hello from Serverless Framework on Timeweb!'
];
};
Шаг 4: Запуск
serverless deploy
Тесты производительности
Я протестировал холодный старт и выполнение функции на обеих платформах:
| Платформа | Холодный старт | Повторный вызов | Цена за 1 млн вызовов |
|---|---|---|---|
| Yandex Cloud + Bref | 1200 мс | 150 мс | ~$23.50 |
| Timeweb + Serverless | 700 мс | 120 мс | ~$18.90 |
Выводы:
- Timeweb быстрее на холодном старте благодаря оптимизированным средам.
- Bref добавляет накладные расходы из-за Docker, но удобен для сложных приложений.
Рекомендации для разработчиков
- Уменьшайте размер пакета:
- Используйте Composer с флагом
--no-dev. - Исключайте ненужные файлы через
.serverlessignore.
- Используйте Composer с флагом
- Кэшируйте зависимости:
// Используйте статический кэш Composer $_ENV['COMPOSER_CACHE_DIR'] = '/tmp/composer-cache';
- Работайте с окружением:
- Не храните секреты в коде. Используйте переменные среды через
serverless.yml:environment: DB_PASSWORD: ${env:PROD_DB_PASSWORD}
- Не храните секреты в коде. Используйте переменные среды через
- Мониторинг:
- Подключите Yandex Monitoring или Timeweb Logging для отслеживания ошибок.
Бессерверные архитектуры открывают для PHP новые возможности. С Bref и Serverless Framework вы можете развернуть приложение за несколько минут, не углубляясь в DevOps. Перенесите на serverless отдельные задачи (отправка email, обработка изображений), затем масштабируйте.
Поддержка автора осуществляется с помощью специальной формы ниже, предоставленной сервисом «ЮMoney». Все платёжные операции выполняются на защищённой странице сервиса, что обеспечивает их корректность и полную безопасность.


