Ejecución de funciones PHP en AWS Lambda y API Gateway

by Luigi Nori Date: 02-06-2022 amazon webservices lambda aws php

¿Qué es AWS Lambda?

AWS Lambda es un servicio de procesamiento sin servidor que puede ejecutar código en respuesta a eventos o condiciones predeterminados y administrar automáticamente todos los recursos de procesamiento necesarios para esos procesos.

¿Cómo funciona AWS Lambda?

AWS Lambda genera contenedores que contienen el código de su aplicación. Un disparador ejecuta su contenedor hasta que alcanza un periodo de inactividad, el final de la tarea. El contenedor pasa a estar inactivo hasta que se vuelva a activar. Las funciones Lambda pueden ser invocadas por infinidad de eventos o servicios, pero el que más nos interesa es el AWS API Gateway.
No se ha proporcionado ningún texto alternativo para esta imagen
API Gateway funciona como un servidor web Apache o Nginx y se encarga de procesar todas las llamadas a la API enviándolas a la función Lambda en forma de eventos.

¿Cuál es la ventaja de utilizar AWS Lambda y API Gateway para nuestros microservicios?

Imagina que quieres crear un microservicio que tiene que devolver una simple respuesta JSON, o parsear un correo electrónico, pero no quieres asumir la gestión de un servidor web, y mucho menos perder un tiempo valioso en actualizaciones de seguridad y configuraciones complejas. Pues bien, con AWS Lambda todo esto es posible, de hecho el modo Serverless nos permite estar en marcha en cuestión de minutos y concentrarnos únicamente en el aspecto del código.

¿es AWS Lambda bueno para cualquier aplicación?

Desmontemos el mito de que el Serverless es la solución a todos los problemas: En primer lugar, hay que decir que API Gateway fue diseñado principalmente como un servicio para gestionar APIs REST y como tal no permite la ejecución de llamadas con tiempos de ejecución largos, de hecho el límite de tiempo de espera de 29 segundos lo hace inadecuado para tareas más complejas como la generación de PDFs o servicios de reporting. También tenemos en cuenta que el modelo de precios de Lambda se basa en el consumo real de recursos y el tiempo de ejecución, por lo que es mejor evitar la ejecución de eventos muy largos.

AWS Lambda ofrece soporte nativo para Java, Go, PowerShell, Node.js, C#, Python y Ruby

¿cómo consigo que PHP se ejecute en Lambda si no está soportado?

AWS Lambda proporciona una API de tiempo de ejecución que permite utilizar cualquier otro lenguaje. Un tiempo de ejecución es responsable de leer los eventos, las variables de entorno y ejecutar el código del manejador de funciones. El tiempo de ejecución pasa los datos del evento al manejador de la función y finalmente envía la respuesta del manejador a Lambda, que luego es procesada por API Gateway y proporcionada como respuesta al usuario.
Para crear nuestro propio runtime para subirlo a Lambda, tendríamos que compilar una versión de PHP en un entorno AMI Linux con las librerías necesarias para ejecutar nuestro código. El proceso es muy largo y a menudo la tentación de incluir más bibliotecas de las necesarias produce tiempos de ejecución muy pesados.
El código Lambda, incluido el tiempo de ejecución, no puede superar el límite de 250 MB
¿existe entonces una solución sencilla? Ciertamente, podemos utilizar la biblioteca de compositores Bref, que hará todo el trabajo "sucio" por nosotros.

Como primer paso, debemos instalar Serverless y configurarlo introduciendo las claves de acceso de AWS especialmente creadas por nuestro AWS IAM Manager

npm install -g serverless
serverless config credentials --provider aws --key <key> --secret <secret>  

A continuación, nos trasladamos a la carpeta de nuestro proyecto PHP e instalamos Bref

compositor requiere bref/bref

Si la instalación se ha realizado con éxito, sólo queda inicializar bref

vendor/bin/bref init

Una vez completada la configuración, Bref habrá creado un archivo index.php que contiene el código a ejecutar en Lambda y un archivo serverless.yml que contiene la configuración para desplegar nuestra función. Llegados a este punto sólo tienes que ejecutar el comando deploy y esperar a que se cree la Lambda, verás en la pantalla la url que API Gateway ha asignado a tu función.

¿Puedo ejecutar mi marco favorito en AWS Lambda?

Bref te permite aprovechar Laravel o Simfony para crear microservicios servidos en modo Serverless pero te aseguro que con algunos trucos puedes usar cualquier framework. Personalmente, lo he probado con Lumen pero también he 'resucitado' una vieja aplicación monolítica basada en CodeIgniter y la he hecho funcionar perfectamente en Lambda.
Si tu aplicación contiene activos o artefactos, puedes utilizar plugins serverless para subirlos a S3 en lugar de incluirlos en Lambda, de esta manera no tendrás problemas de espacio.
¡Buena experimentación para todos!

 
by Luigi Nori Date: 02-06-2022 amazon webservices lambda aws php visitas : 1765  
 
 
 
 

Artículos relacionados

Los mejores y más asombrosos Hacks de Alexa que deberías conocer

Alexa, la Inteligencia Artificial hablante de Amazon contenida en el Echo, puede entretenerte a ti y a tu familia si conoces las palabras adecuadas. Alexa es una asistente versátil, pero…

Clicky