Funciones Serverless en PHP: AWS Lambda de la A a la Z — guía completa

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 no son un oxímoron



Durante mucho tiempo se consideró que PHP y la arquitectura serverless eran incompatibles. PHP se asociaba con procesos eternos de Apache o Nginx, y serverless con Node.js o Python. Sin embargo, con la aparición de herramientas como Bref y el soporte oficial de entornos de ejecución personalizados (Custom Runtimes) en AWS Lambda, PHP ha cobrado un segundo aire.



Las funciones serverless permiten ejecutar código PHP sin gestionar un servidor. Solo paga por el tiempo de ejecución real (con precisión de milisegundos). Es la solución ideal para:

  • Manejadores de webhooks (Telegram, Stripe, Slack);
  • Microservicios con baja carga;
  • Tareas periódicas (cron) mediante CloudWatch Events;
  • API proxy y backends ligeros.


En este artículo, analizaremos cómo poner PHP en AWS Lambda desde cero: desde la creación de roles IAM hasta el despliegue de una función funcional.



1. Arquitectura de PHP en AWS Lambda



Cómo funciona Custom Runtime

AWS Lambda solo admite de forma nativa Java, Go, PowerShell, Node.js, C#, Python y Ruby. Para ejecutar PHP, utilizamos un Custom Runtime — un archivo ejecutable especial (bootstrap) que se comunica con la API de Lambda Runtime.



La forma más popular es el framework Bref. Viene con una capa (Layer) predefinida que contiene PHP 8.x, Composer y un conjunto de extensiones estándar.



// Estructura del proyecto para Brefproject/├── index.php          // Punto de entrada├── composer.json├── serverless.yml     // Configuración de despliegue└── vendor/


Tres formas de desplegar

  1. Bref (recomendado) — la más sencilla. Usa serverless.yml y capas predefinidas.
  2. Compilación manual — compila PHP para Amazon Linux 2 y lo empaqueta en un ZIP.
  3. Imagen Docker — usa Lambda Container Image (compatible desde 2020).


Analizaremos la primera opción, que es adecuada para el 90% de las tareas.



2. Configuración paso a paso: desde la instalación hasta la primera solicitud



Paso 1. Preparación del entorno

Asegúrese de tener instalado:

  • PHP 8.0+ (localmente)
  • Composer
  • Node.js y npm (para Serverless Framework)
  • La utilidad aws-cli con credenciales configuradas


Instalamos Serverless Framework globalmente:

npm install -g serverless


Paso 2. Creamos el proyecto

composer create-project bref/bref my-php-lambdacd my-php-lambda


Después de la inicialización, verá el archivo serverless.yml. Lo editamos:



service: my-php-app

provider: name: aws region: eu-central-1 # Elija la región más cercana runtime: provided.al2 # Amazon Linux 2

plugins: - ./vendor/bref/bref

functions: hello: handler: index.php description: 'Función PHP simple' layers: - ${bref:layer.php-80} # Capa con PHP 8.0


Paso 3. Escribimos la función

Abra index.php:



<?php

require __DIR__ . '/vendor/autoload.php';

/** * Manejador de la función Lambda * @param array $event Datos de entrada de AWS (API Gateway, SQS, etc.) * @return array Respuesta en formato JSON */function handler(array $event): array{ // Registramos en CloudWatch error_log('Solicitud recibida: ' . json_encode($event));

$name = $event['queryStringParameters']['name'] ?? 'Invitado';

return [ 'statusCode' => 200, 'headers' => [ 'Content-Type' => 'application/json', ], 'body' => json_encode([ 'message' => "¡Hola, {$name}!", 'timestamp' => time(), ]), ];}


Blogs

Book Recommendations