
Compartir:
Adam es un desarrollador y consultor al que le gusta correr a toda velocidad, bloguear y ayudar a otros a domar la tecnología para conseguir cosas increíbles, con un deseo insaciable de servir de mentor y ayudar.
AWS Lambda Con PHP Usando Bref Y Serverless Framework
El uso de PHP en entornos sin servidor ha sido anteriormente un reto debido a la falta de tiempos de ejecución predeterminados proporcionados por los diversos proveedores de la nube. Sin embargo, esto ha cambiado recientemente con la incorporación de bibliotecas y funcionalidades que hacen que el uso de PHP sea más accesible.
Este ejemplo creará un AWS Lambda para PHP utilizando Bref. La adición de API de tiempo de ejecución de AWS Lambda y la capacidad de añadir capas de AWS Lambda ha facilitado la creación de un tiempo de ejecución personalizado de PHP. Por lo tanto, han surgido paquetes como Bref para facilitar la vida de los desarrolladores de PHP.
Requisitos previos
Estas son las cosas que necesitarás para este ejemplo:
PHP instalado localmente (preferiblemente versión 7.3+)
Cuenta AWS y claves de acceso para un usuario con acceso a AWS S3 así como a AWS Lambda
Framework sin servidor
En Bref aprovecha el Framework sin servidor que es una "solución completa para construir y operar aplicaciones sin servidor". Por lo tanto, nuestro primer paso es instalar este framework en el sistema de desarrollo que estés utilizando. Recomendamos instalarlo globalmente, para permitir el uso desde cualquier lugar a través de CLI.
Credenciales de AWS
Con Serverless instalado, asegúrate de que también has configurado las credenciales de AWS necesarias para que Serverless interactúe con los distintos servicios de AWS. (S3, Lambda, y potencialmente EC2 o bases de datos según sea necesario) En este ejemplo, sólo vamos a utilizar S3 y Lambda. Puedes leer más sobre esto en serverless.com y bref.sh por lo que no entraremos en detalles aquí.
Instalar Bref
También debe instalar Bref como una dependencia dentro de cada proyecto dado usarlo. Con esto en mente, utilizaremos Composer para instalarlo utilizando la CLI desde el directorio del proyecto.
Proyecto Init Bref
Después de que Composer haya finalizado la adición de Bref al proyecto, la mejor manera de empezar es init Bref para su uso. Al hacer clic en init se le preguntará si desea una función Function, HTTP o Console, lo que dará lugar a la creación de serverless.yml y posiblemente index.php dependiendo de su selección, que podrá editar para ajustarse a las necesidades de la aplicación.
Ejemplo de archivo YML
Como ejemplo, a continuación se muestra un serverless.yml archivo:
service: app
provider:
name: aws
region: us-east-1
runtime: provided
plugins:
- ./vendor/bref/bref
functions:
function:
handler: index.php
description: ''
layers:
- ${bref:layer.php-73}
# Exclude files from deployment
package:
exclude:
- 'tests/**'En el archivo, observe el nombre del servicio, que puede modificar para adaptarlo a las convenciones de nomenclatura de sus funciones. Por defecto, se llama app.
A continuación, podemos ver la información del proveedor de AWS Lambda.
Hay una sección para cualquier plugin y la inclusión de Bref.
A continuación, está la sección que describe los detalles de la función. Se incluye el manejador, la descripción deseada que se añadirá a AWS y cualquier capa necesaria, como PHP. Tenga en cuenta que en el ejemplo anterior php-73 se especifica. Si en su lugar seleccionara HTTP, se especificaría php-73-fpm y proporcionaría un servidor web en la capa en lugar de una versión sólo CLI de PHP. La imagen a utilizar es por lo que el init es esencial para asegurar que Lambda crea la capa correcta.
Implementación en AWS Lambda
Para casos de uso de Function o HTTP, el valor predeterminado init proporciona un esqueleto suficiente para desplegar directamente en AWS Lambda y realizar pruebas con Serverless. Aprovechando la configuración de credenciales de AWS añadida anteriormente, Serverless desplegará directamente en Lambda utilizando el contenido de serverless.yml como criterio.
IMPORTANTE: La aplicación de ejemplo, tal cual, no lleva ningún tipo de autenticación o verificación. Cualquiera con acceso a la URL proporcionada tras la implementación puede acceder a ella. Hacerlo podría causar cargos inesperados en sus cuentas. Por lo tanto, asegure la aplicación si tiene intención de dejarla activa.
Probar la función
En el caso de una función, hay dos maneras de probar. Una forma es utilizar la consola de AWS, mientras que la segunda es utilizar Serverless a través de CLI desde el sistema utilizado para el despliegue.
Consola AWS
Navegando por la consola de AWS, seleccione el elemento Lambda de la lista de servicios informáticos.
AWS Console-Lambda Dashboard
En el panel Lambda, puede seleccionar la función creada y crear una nueva prueba haciendo clic en Configure test events. También puede hacer clic en el botón Test para recibir el mismo mensaje.
Lambda Function Create Test Example
Para probar el esqueleto creado, añade un nombre y altera ligeramente el JSON en el cuerpo.
Configure Lambda Test Events
Al hacer clic en el botón Create en la parte inferior del cuadro de diálogo, puede hacer clic en el botón Test para ejecutar la prueba. La ejecución debería dar lugar a un área de diálogo verde que puede ampliar para mostrar los resultados.
Lambda Test Results
Ejecución de funciones sin servidor
Como se indicó anteriormente, también puede utilizar la CLI sin servidor para probar también la función mediante el siguiente comando desde dentro de la raíz de la aplicación local:
Ejemplo de resultado:
Serverless Lambda Function Execution
Prueba de una función HTTP
Si desplegara una función HTTP en su lugar, los dos métodos de prueba anteriores no funcionarían. En su lugar, puede utilizar un cliente HTTP o un navegador estándar para probar mediante la URL proporcionada por los resultados de salida de despliegue.
¿Qué sigue?
Con una función de AWS Lambda creada, puede seguir añadiendo más código y creando aplicaciones PHP más sólidas aprovechando las tecnologías sin servidor disponibles en la actualidad. Esté atento a futuras publicaciones que muestren cómo crear funciones útiles para aprovechar las API y los servicios de Vonage con AWS Lambda.