Funciones Serverless en PHP: AWS Lambda de la A a la Z

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

Introducción: ¿por qué Serverless y PHP?

\n\n

Durante 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.

\n\n

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\n

Al final de la guía, podrá ejecutar su primer endpoint PHP en la nube sin un solo servidor dedicado.

\n\n

1. Arquitectura de PHP Serverless en AWS Lambda

\n\n

1.1. ¿Cómo ejecuta AWS Lambda PHP?

\n\n

El 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\n

La 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\n

El proceso básico es el siguiente:

\n
    \n
  1. El cliente envía una solicitud HTTP a API Gateway.
  2. \n
  3. API Gateway convierte la solicitud en un evento JSON y lo pasa a Lambda.
  4. \n
  5. Lambda inicia el Custom Runtime, que inicializa PHP-FPM.
  6. \n
  7. El script PHP procesa el evento y devuelve una respuesta.
  8. \n
\n\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
\n\n

2. Configuración paso a paso: del proyecto al despliegue

\n\n

2.1. Instalación de herramientas

\n

Para 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
\n\n

Instale Serverless Framework de forma global:

\n
npm install -g serverless
\n\n

2.2. Creación del proyecto con Bref

\n

Cree un directorio para el proyecto e inicialícelo:

\n
mkdir php-lambda-demo\ncd php-lambda-demo\ncomposer require bref/bref
\n\n

Cree el archivo index.php — esta será nuestra función:

\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\n

Tenga 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.

\n\n

2.3. Configuración de serverless.yml

\n

Cree el archivo serverless.yml en la raíz del proyecto:

\n
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                

Blogs

Book Recommendations