Introducción: ¿por qué Serverless y PHP?
\n\nDurante mucho tiempo se consideró que PHP y la computación serverless eran incompatibles. Sin embargo, con la aparición de los runtimes personalizados de AWS Lambda y el desarrollo de herramientas como Bref, la situación ha cambiado drásticamente. Hoy en día, puede ejecutar aplicaciones PHP en la infraestructura completamente administrada de AWS Lambda, pagando solo por el tiempo de ejecución real del código.
En este artículo, analizaremos cómo crear, configurar y desplegar una función Serverless en PHP utilizando AWS Lambda. Conocerá los conceptos clave, los problemas típicos y las mejores prácticas. El material está dirigido a desarrolladores PHP familiarizados con los fundamentos de AWS, pero intentaremos explicarlo todo con el mayor detalle posible.
\n\nAl final de la guía, podrá ejecutar su primer endpoint PHP en la nube sin un solo servidor dedicado.
\n\n1. Arquitectura de PHP Serverless en AWS Lambda
\n\n1.1. ¿Cómo ejecuta AWS Lambda PHP?
\n\nEl entorno nativo de Lambda no admite PHP directamente. Para ejecutar código PHP se utiliza una capa especial: el Custom Runtime. Se trata de un archivo ejecutable (generalmente en Python o Bash) que inicia el intérprete de PHP, le pasa el evento (event) y devuelve el resultado.
\n\nLa herramienta más popular para esto es Bref (Bare-metal PHP for AWS Lambda). Proporciona una imagen PHP lista para usar con configuraciones optimizadas para el entorno serverless.
\n\nEl proceso básico es el siguiente:
\n- \n
- El cliente envía una solicitud HTTP a API Gateway. \n
- API Gateway convierte la solicitud en un evento JSON y lo pasa a Lambda. \n
- Lambda inicia el Custom Runtime, que inicializa PHP-FPM. \n
- El script PHP procesa el evento y devuelve una respuesta. \n
1.2. Componentes clave del stack
\n- \n
- AWS Lambda — unidad de cómputo. \n
- API Gateway — interfaz HTTP para invocar la función. \n
- Bref — runtime PHP para Lambda. \n
- Serverless Framework (opcional) — herramienta de despliegue. \n
- Amazon S3 / DynamoDB — almacenamiento de datos (si es necesario). \n
2. Configuración paso a paso: del proyecto al despliegue
\n\n2.1. Instalación de herramientas
\nPara trabajar necesitará:
\n- \n
- PHP 8.1+ con las extensiones
mbstring,curl,json. \n - Composer — gestor de dependencias. \n
- Node.js y npm (para Serverless Framework). \n
- Una cuenta de AWS con un usuario IAM configurado. \n
Instale Serverless Framework de forma global:
\nnpm install -g serverless\n\n2.2. Creación del proyecto con Bref
\nCree un directorio para el proyecto e inicialícelo:
\nmkdir php-lambda-demo\ncd php-lambda-demo\ncomposer require bref/bref\n\nCree el archivo index.php — esta será nuestra función:
<?php\nrequire __DIR__ . '/vendor/autoload.php';\n\nreturn function ($event) {\n $name = $event['queryStringParameters']['name'] ?? 'World';\n \n return [\n 'statusCode' => 200,\n 'headers' => ['Content-Type' => 'text/plain'],\n 'body' => "Hello, {$name}! This is Serverless PHP on AWS Lambda."\n ];\n};\n\nTenga en cuenta: la función debe devolver un array con las claves statusCode, headers y body. Este es el formato de respuesta estándar para la integración con API Gateway.
2.3. Configuración de serverless.yml
\nCree el archivo serverless.yml en la raíz del proyecto:
service: php-lambda-demo\n\nprovider:\n name: aws\n region: eu-central-1\n runtime: provided.al2\n\nplugins:\n - ./vendor/bref/bref\n\nfunction