Sin servidor (serverless) con Laravel y AWS Lambda
Sin servidor (serverless) es un modelo de desarrollo que permite a los desarrolladores crear y ejecutar aplicaciones sin tener que administrar servidores físicamente. No más servidores básicos, no más instancias virtuales. Usted se concentra en el código y deja la infraestructura al proveedor.
¿Qué tal empujar su aplicación Laravel a la nube y escalar sin límites? Los beneficios y las posibilidades son infinitos. Existen numerosos estudios de casos de empresas que implementan con éxito sus soluciones sin servidor.
Uno de los mayores proveedores sin servidor es AWS de Amazon y su producto llamado Lambda. AWS escribe:
Lambda es un servicio informático que le permite ejecutar código sin aprovisionar ni administrar servidores. Lambda ejecuta su código en una infraestructura informática de alta disponibilidad y realiza toda la administración de los recursos informáticos, incluido el mantenimiento del servidor y del sistema operativo, el aprovisionamiento de capacidad y el escalado automático, la supervisión y el registro del código. Con Lambda, puede ejecutar código para prácticamente cualquier tipo de aplicación o servicio de backend…
En lugar de servir una aplicación usando una instancia EC2, vamos a crear una aplicación API de Laravel Lumen simple, que servirá al precio y volumen de criptomonedas actuales de Ethereum.
Ofreceremos una única ruta:
$router->get('/eth-eur', 'CryptoEthEurController');
Y un controlador de ejemplo único que obtendrá los datos del servicio API gratuito de Binance:
<?php namespace App\Http\Controllers; use Laravel\Lumen\Routing\Controller; use Symfony\Component\HttpFoundation\Response; final class CryptoEthEurController extends Controller { public function __invoke(): Response { $response = \json_decode( (string) \file_get_contents('https://api2.binance.com/api/v3/ticker/24hr?symbol=ETHEUR'), true ); if (empty($response)) { return \response(['error' => 'no response from the remote API'], 400); } return \response([ 'price' => $response['weightedAvgPrice'], 'change => $response['priceChangePercent'], 'volume' => \number_format($response['quoteVolume']), ]); } }
Nada lujoso hasta ahora. Ahora la parte mágica, usaremos la excelente biblioteca llamada Bref. Para usarlo necesitamos:
- instale el comando sin
serverless
a través del administrador de paquetes de Nodenpm
:npm install serverless
- instalar la biblioteca
bref/bref
a través de Composer:composer req bref/bref
configurar una cuenta de AWS y agregar un usuario con acceso a la API permitido - configurar las credenciales de AWS una vez que se crea el usuario de AWS
El manual de instalación detallado está disponible en el sitio web de Bref. Una vez que todo esté configurado, vamos a definir una configuración sin servidor simple:
service: app-crypto-serverless provider: name: aws region: eu-central-1 runtime: provided.al2 lambdaHashingVersion: 20201221 plugins: - ./vendor/bref/bref functions: api: handler: 'public/index.php' description: '' timeout: 28 layers: - ${bref:layer.php-74-fpm} events: - httpApi: '*' package: patterns: - '!node_modules/**'
Y simplemente ejecute serverless deploy
Serverless: Packaging service... Serverless: Excluding development dependencies... Serverless: Creating Stack... Serverless: Checking Stack create progress... ........ Serverless: Stack create finished... Serverless: Uploading CloudFormation file to S3... Serverless: Uploading artifacts... Serverless: Uploading service app-crypto-serverless.zip file to S3 (4.78 MB)... Serverless: Validating template... Serverless: Updating Stack... Serverless: Checking Stack update progress... .............................. Serverless: Stack update finished...
Efectivamente, después de aproximadamente un minuto, la consola informa que el lambda está disponible en: https://6re7zhw2f2.execute-api.eu-central-1.amazonaws.com
curl https://6re7zhw2f2.execute-api.eu-central-1.amazonaws.com/eth-eur
Produce una rápida respuesta JSON:
{"price":"4088.45967758","change":"2.285","volume":"101,627,328"}
Lo cual es realmente genial. Desde una aplicación simple hasta una aplicación sin servidor en la nube en menos de 5 minutos. Eliminar su aplicación es tan simple como eliminar sin servidor
Tenga en cuenta que implementé una aplicación que aún no está lista para producción. En la vida real, la aplicación debería tener las dependencias de desarrollo eliminadas y la caché precompilada antes de implementarla.
La aplicación está disponible en GitHub en https://github.com/mikemix/medium-lumen-serverless
Puede encontrar más información en: