https://d226lax1qjow5r.cloudfront.net/blog/blogposts/aws-lambda-with-php-using-bref-and-serverless-framework-dr/E_AWS-Lambda_1200x600.png

AWS Lambda Con PHP Usando Bref Y Serverless Framework

Publicado el March 16, 2020

Tiempo de lectura: 9 minutos

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:

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.

npm install -g serverless

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.

composer require bref/bref

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.

vendor/bin/bref init

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.

serverless deploy

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 DashboardAWS 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 ExampleLambda Function Create Test Example

Para probar el esqueleto creado, añade un nombre y altera ligeramente el JSON en el cuerpo.

Configure Lambda Test EventsConfigure 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 ResultsLambda 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:

serverless invoke -f function --data='{"name": "Adam"}'

Ejemplo de resultado:

Serverless Lambda Function ExecutionServerless 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.

Compartir:

https://a.storyblok.com/f/270183/384x384/b3c7ffaf85/adamculp.png
Adam CulpAntiguos alumnos de Vonage

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.