[vc_row el_class=”blog-info”][vc_column][vc_single_image source=”featured_image” img_size=”full” style=”vc_box_rounded”][vc_empty_space height=”40px”][vc_row_inner][vc_column_inner width=”1/6″][/vc_column_inner][vc_column_inner width=”2/3″][vc_column_text el_class=”font-weight-bold”]
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.
[/vc_column_text][vc_empty_space height=”40px”][/vc_column_inner][vc_column_inner width=”1/6″][/vc_column_inner][/vc_row_inner][vc_row_inner][vc_column_inner width=”1/6″][/vc_column_inner][vc_column_inner width=”2/3″][vc_column_text]
¿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
serverlessa través del administrador de paquetes de Nodenpm:npm install serverless - instalar la biblioteca
bref/brefa 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:
[/vc_column_text][/vc_column_inner][vc_column_inner width=”1/6″][/vc_column_inner][/vc_row_inner][/vc_column][/vc_row][vc_row el_class=”social-info”][vc_column width=”1/6″][/vc_column][vc_column width=”2/3″][vc_row_inner][vc_column_inner width=”1/2″][vc_column_text][social_share_button themes=’theme1′][/vc_column_text][/vc_column_inner][vc_column_inner el_class=”youtube-inner-col” width=”1/2″][vc_column_text][likebtn theme=”youtube” lang=”auto” show_like_label=”0″ white_label=”1″ alignment=”right”][/vc_column_text][/vc_column_inner][/vc_row_inner][vc_row_inner el_class=”social-info-inner”][vc_column_inner width=”1/4″][vc_single_image image=”921″][/vc_column_inner][vc_column_inner width=”3/4″][vc_column_text]
Diego Pacheco
Ingeniero en Sitemas, MBA (Babson College). Desarrollador PHP/Java/JavaScript. Fundador & CEO de EpicStudio. Entusiasta de las tecnologías web (JavaScript, Vue, Laravel, AWS, Docker) Viajes, Negocios, Surf y Growth.[/vc_column_text][asvc_list_item icon_fontawesome=”fa fa-calendar-o” icon_size=”14px”]Programar una reunión[/asvc_list_item][/vc_column_inner][/vc_row_inner][/vc_column][vc_column width=”1/6″][/vc_column][/vc_row][vc_row][vc_column][vc_column_text]
Recent Post
[/vc_column_text][lvca_posts_carousel posts_query=”size:3|order_by:rand|post_type:post” image_linkable=”true” image_size=”full” taxonomy_chosen=”post_tag” display_title=”true” display_post_date=”true” display_summary=”true” autoplay_speed=”3000″ animation_speed=”300″ display_columns=”3″ scroll_columns=”3″ gutter=”3″ tablet_display_columns=”2″ tablet_scroll_columns=”2″ tablet_gutter=”3″ tablet_width=”800″ mobile_display_columns=”1″ mobile_scroll_columns=”1″ mobile_gutter=”3″ mobile_width=”480″][vc_empty_space height=”20px”][/vc_column][/vc_row]
