Serverless en PHP: AWS Lambda y alternativas para backend sin servidor

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

PHP sin servidor: ¿mito o realidad?

\n\n

Cuando se escucha la frase "Funciones Serverless", la primera asociación suele ser Node.js o Python. PHP parece un monolito que vive en un eterno Apache o Nginx. Pero los tiempos cambian. Hoy en día, PHP en arquitectura serverless no es una excentricidad, sino una herramienta de trabajo para miles de proyectos. Puede escribir microservicios, procesar webhooks, redimensionar imágenes e incluso ejecutar APIs completas, sin preocuparse por servidores, escalado o pagar por recursos inactivos.

\n\n

En este artículo, analizaremos cómo funciona PHP en AWS Lambda, qué alternativas existen (Bref, OpenFaaS, Vercel) y, lo más importante, escribiremos código real que se pueda ejecutar de inmediato. Si es desarrollador PHP y quiere dar el salto al desarrollo moderno cloud-native, está en el lugar correcto.

\n\n

¿Qué es Serverless y por qué un desarrollador PHP lo necesita?

\n\n

Serverless (o FaaS — Functions as a Service) es un modelo donde usted sube su código y el proveedor decide cuándo y cómo ejecutarlo. Solo paga por el tiempo de ejecución real. Nada de máquinas virtuales, ni un "Apache" consumiendo memoria 24/7. Para PHP, que durante mucho tiempo fue considerado "el lenguaje del hosting con FTP", esto es un soplo de aire fresco.

\n\n

Ventajas para proyectos PHP:

\n
    \n
  • Ahorro — no necesita mantener un servidor completo para un solo script.
  • \n
  • Autoescalado — Lambda crea copias de la función automáticamente cuando aumenta la carga.
  • \n
  • Simplicidad de despliegue — sube el código y funciona.
  • \n
  • Enfoque de microservicios — puede dividir un monolito en funciones pequeñas.
  • \n
\n\n

El problema: PHP de serie no sabe ser Serverless

\n\n

El PHP clásico no es un demonio. Se inicia, ejecuta el script y termina. Para Lambda esto es un problema: la función debe ser "fría" y arrancar en milisegundos. El PHP normal arranca lentamente (carga del framework, autocarga, configuraciones). La solución es Bref.

\n\n

Bref — la herramienta principal para Serverless PHP

\n\n

Bref es un SDK y runtime de código abierto que convierte a PHP en una función Lambda nativa. Compila PHP en un binario estático (a través de bref/bref), lo que proporciona un arranque en frío instantáneo. Bref es compatible con Laravel, Symfony, Slim y cualquier código personalizado.

\n\n

¿Cómo funciona Bref?

\n

Escribe una clase PHP normal, implementa la interfaz Bref\\Context\\Context, y Bref se encarga del manejo HTTP. Para una API, basta con una función.

\n\n

Ejemplo: API Serverless en PHP para generar códigos QR

\n

Supongamos que necesitamos recibir una solicitud POST con texto y devolver un código QR en formato PNG. Escribimos la función:

\n\n
<?php\n// handler.php\nrequire __DIR__ . '/vendor/autoload.php';\n\nuse Bref\\Context\\Context;\nuse Bref\\Event\\Http\\HttpHandler;\nuse chillerlan\\QRCode\\QRCode;\nuse chillerlan\\QRCode\\QROptions;\n\nclass QrGenerator extends HttpHandler\n{\n    public function handleRequest($request, Context $context): array\n    {\n        $body = json_decode($request->getBody()->getContents(), true);\n        $text = $body['text'] ?? 'Hello, Serverless!';\n        \n        $options = new QROptions([\n            'outputType' => QRCode::OUTPUT_IMAGE_PNG,\n            'imageBase64' => false,\n        ]);\n        \n        $qrcode = new QRCode($options);\n        $imageData = $qrcode->render($text);\n        \n        return [\n            'headers' => ['Content-Type' => 'image/png'],\n            'statusCode' => 200,\n            'body' => base64_encode($imageData),\n            'isBase64Encoded' => true,\n        ];\n    }\n}\n\nreturn new QrGenerator();
\n\n

Despliegue en AWS Lambda con Bref

\n

Instale Bref CLI y ejecute:

\n
composer require bref/bref\n./vendor/bin/bref init\n./vendor/bin/bref deploy
\n

Todo listo. En un minuto tendrá un endpoint HTTPS,

Blogs

Book Recommendations