Usando el framework sin servidor

AWS Lambda es un servicio informático proporcionado por Amazon Web Services (AWS). Lo que lo hace específico es que nos permite ejecutar código sin aprovisionar ni administrar ningún servidor. Las características de autoescalado le permiten soportar miles de solicitudes por segundo. Con un beneficio adicional de los precios de pago por ejecución, este servicio atrajo cierta tracción entre los desarrolladores. Con el tiempo, el marco sin servidor se desarrolló para facilitar el uso del servicio AWS Lambda.

El framework sin servidor está disponible en https://serverless.com.

Suponiendo que tengamos una cuenta de AWS creada y una instalación limpia del servidor Ubuntu a la mano, avancemos y describamos los pasos necesarios para configurar y utilizar el framework sin servidor.
Antes de que podamos implementar aplicaciones en AWS Lambda, debemos asegurarnos de tener un usuario con el conjunto correcto de permisos. Los permisos de AWS son bastante robustos, ya que podemos ajustarlos por recurso. El framework sin servidor utiliza otros recursos de AWS aparte de AWS Lambda, como S3, API Gateway y algunos otros. Para simplificar nuestra demostración, primero crearemos un usuario de IAM con acceso de administrador:

1. Comenzamos iniciando sesión en la consola de AWS en https://aws.amazon.1.com/console/. Una vez que hayamos iniciado sesión, debemos proceder a las credenciales de Mi seguridad | Pantalla de usuarios:

2. Para agregar un nuevo usuario, hacemos clic en el botón Agregar usuario. Esto desencadena un proceso de cuatro pasos, como se muestra en la siguiente captura de pantalla:

3. Aquí proporcionamos dos datos, nombre de usuario y tipo de acceso. El tipo de acceso programático es lo que necesitamos para nuestra integración sin servidor.
Al hacer clic en el botón Siguiente: Permisos nos lleva a la siguiente pantalla:

4. Hay algunas formas en que podemos adjuntar permisos al usuario aquí. Para simplificar las cosas, hacemos clic en el cuadro Adjuntar políticas existentes directamente y escribimos AdministratorAccess en el filtro de campo Tipo de política. Luego simplemente verificamos la política de acceso de administrador y hacemos clic en el botón Siguiente: Revisar, que nos lleva a la siguiente pantalla:

5. Aquí, simplemente revisamos el progreso actual y finalmente hacemos clic en el botón Crear usuario, que nos lleva a la siguiente pantalla:

6. Ahora tenemos ID de clave de acceso y clave de acceso secreta, las dos piezas de información requeridas por el framework sin servidor.

Crear usuarios con permisos administrativos completos es generalmente considerado una mala práctica de seguridad. Normalmente, crearíamos usuarios con un mínimo de permisos necesarios.

Con estos pasos fuera del camino, podemos avanzar con la configuración del propio framework sin servidor.
El framework sin servidor se ejecuta sobre Node.js. Suponiendo que tenemos una instancia de un servidor Ubuntu limpio, podemos configurarla siguiendo estos pasos:

1. Instala Node.js con los siguientes comandos de consola:

curl -sL https://deb.nodesource.com/setup_7.x | sudo -E bash -
sudo apt-get install -y nodejs

2. Una vez que Node.js está instalado, la herramienta de consola npm está disponible. El framework sin servidor está disponible como un paquete npm en https://www.npmjs.com/package/serverless. La ejecución de los siguientes comandos de consola debería instalarlo en nuestro servidor:

sudo npm install -g serverless
serverless --version

3. Con el framework sin servidor ahora instalado, necesitamos establecer las variables de entorno de la consola: AWS_ACCESS_KEY_ID y AWS_SECRET_ACCESS_KEY.
Estos son utilizados por serverless durante la implementación:

export AWS_ACCESS_KEY_ID=<--AWS_ACCESS_KEY_ID-->
export AWS_SECRET_ACCESS_KEY=<--AWS_SECRET_ACCESS_KEY-->

4. Ahora podemos abordar los bits y piezas relacionadas con PHP. El ejemplo oficial de framework sin servidor utiliza un AWS lambda que ejecuta una función PHP, que se puede encontrar en https://github.com/ZeroSharp/serverless-php. Podemos instalarlo mediante el siguiente comando de consola:

serverless install --url
https://github.com/ZeroSharp/serverless-php

Esto debería darnos una salida muy similar a la siguiente captura de pantalla:

El comando de instalación sin servidor simplemente extrae el contenido del repositorio de Git en un directorio local. Dentro del directorio recientemente creado serverless-php, hay un archivo index.php dentro del cual reside el código de nuestra aplicación PHP. Por extraño que parezca, hay pedacitos aquí que, al principio, parece que no tienen nada que ver con PHP, como handler.js. Una mirada rápida a handler.js revela algo interesante, que es que el servicio AWS Lambda en realidad no ejecuta el código PHP directamente. La forma en que funciona es que handler.js, que es una aplicación Node.js, genera un proceso con un archivo binario php incluido. En pocas palabras, index.php es nuestro archivo de aplicación, el resto es una plantilla necesaria.
Como una comprobación rápida, activemos los siguientes dos comandos:

php index.php
serverless invoke local --function hello

Estos deberían darnos la siguiente salida, indicando que serverless puede ver y ejecutar nuestra función:

Finalmente, estamos listos para implementar nuestra aplicación PHP en el servicio AWS Lambda. Hacemos esto ejecutando el siguiente comando:

serverless deploy

Este comando simple pone en marcha una serie de eventos que dan como resultado que se utilicen varios servicios de AWS diferentes dentro de la consola de AWS.
Al abrir el enlace que figura en los puntos finales, se muestra que nuestra aplicación está disponible públicamente:

Esto fue posible gracias a la entrada de API creada automáticamente en el servicio Amazon API Gateway, como se muestra en la siguiente captura de pantalla:

API Gateway une la acción de GET/hello URL con AWS Aplicación lambda serverless-php-dev-hello. Una mirada debajo de la pantalla de AWS Lambda que revela esta aplicación:

La pila de CloudFormation también se ha creado, como se muestra en la siguiente captura de pantalla:

El cubo S3 también se ha creado, como se muestra aquí:

El grupo de registro de CloudWatch también se ha creado, como se muestra en la siguiente captura de pantalla:

En pocas palabras, la implementación sin servidor lanzó algunos servicios para nosotros, dándonos tiempo para centrarnos más en el desarrollo de aplicaciones reales. Aunque AWS Lambda solo cobra una tarifa cuando se ejecuta un código, algunos de los otros servicios en la combinación pueden ser diferentes.
Por eso es importante vigilar todo lo que se activa automáticamente para nosotros.
Afortunadamente para nosotros, serverless también proporciona un comando de limpieza, que se escribe de la siguiente manera:

serverless remove

Este comando realiza una limpieza general al eliminar todos los servicios y recursos que creó anteriormente.

Comparte