PHP на бессерверных архитектурах: полное руководство по работе с Yandex Cloud Functions и Timeweb Cloud Serverless

Сегодня я расскажу как использовать 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: Установка

bash
composer require bref/bref 
composer require bref/logger # Для логов

Шаг 2: Создаем функцию

Файл index.php:

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:

yaml
service: bref-yandex-function 

provider: 
  name: yandex 
  runtime: php82 
  triggers: 
    - http: 
        path: /hello 

plugins: 
  - serverless-bref-plugin 

package: 
  patterns: 
    - '!node_modules/**' 
    - '!tests/**'

Шаг 4: Деплой

bash
serverless deploy

Совет: Для Timeweb Cloud замените provider.name на timeweb и укажите свои ключи доступа.

Деплой PHP-функции с Serverless Framework

Шаг 1: Установка

bash
npm install -g serverless 
serverless config credentials --provider yandex --key-id <YC_KEY_ID> --secret <YC_SECRET>

Шаг 2: Конфигурация

Файл serverless.yml:

yaml
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
<?php 

$handler = function ($event, $context) { 
    return [ 
        'statusCode' => 200, 
        'body' => 'Hello from Serverless Framework on Timeweb!' 
    ]; 
}; 

Шаг 4: Запуск

bash
serverless deploy

Тесты производительности

Я протестировал холодный старт и выполнение функции на обеих платформах:

Платформа Холодный старт Повторный вызов Цена за 1 млн вызовов
Yandex Cloud + Bref 1200 мс 150 мс ~$23.50
Timeweb + Serverless 700 мс 120 мс ~$18.90

Выводы:

  • Timeweb быстрее на холодном старте благодаря оптимизированным средам.
  • Bref добавляет накладные расходы из-за Docker, но удобен для сложных приложений.

Рекомендации для разработчиков

  1. Уменьшайте размер пакета:
    • Используйте Composer с флагом --no-dev.
    • Исключайте ненужные файлы через .serverlessignore.
  2. Кэшируйте зависимости:
    php
    // Используйте статический кэш Composer 
    $_ENV['COMPOSER_CACHE_DIR'] = '/tmp/composer-cache';
  3. Работайте с окружением:
    • Не храните секреты в коде. Используйте переменные среды через serverless.yml:
      yaml
      environment: 
        DB_PASSWORD: ${env:PROD_DB_PASSWORD}
  4. Мониторинг:
    • Подключите Yandex Monitoring или Timeweb Logging для отслеживания ошибок.

Бессерверные архитектуры открывают для PHP новые возможности. С Bref и Serverless Framework вы можете развернуть приложение за несколько минут, не углубляясь в DevOps. Перенесите на serverless отдельные задачи (отправка email, обработка изображений), затем масштабируйте.

Поделиться статьей:
Поддержать автора блога

Поддержка автора осуществляется с помощью специальной формы ниже, предоставленной сервисом «ЮMoney». Все платёжные операции выполняются на защищённой странице сервиса, что обеспечивает их корректность и полную безопасность.

Персональные рекомендации
Оставить комментарий