Un curso intensivo sobre Serverless con Node.js by@adnanrahic
79,960 lecturas

Un curso intensivo sobre Serverless con Node.js

2020/03/08
11 min
por @adnanrahic 79,960 lecturas
tldt arrow
ES
Read on Terminal Reader

Demasiado Largo; Para Leer

Un curso intensivo sobre Serverless con Node.js es una guía sobre cómo escribir aplicaciones Serverless. Revisaremos los puntos increíbles y dolorosos del uso de la tecnología. El objetivo es abstraer completamente los servidores del desarrollador y solo facturar en función de la cantidad de veces que se han invocado las funciones. Continuaremos y saltaremos directamente a un código y escribiremos nuestras propias funciones sin servidor, emularemos el entorno localmente y monitorearemos el rendimiento. Necesitará una cuenta de AWS para seguir los ejemplos de código.

People Mentioned

Mention Thumbnail

Companies Mentioned

Mention Thumbnail
Mention Thumbnail
featured image - Un curso intensivo sobre Serverless con Node.js
Adnan Rahić HackerNoon profile picture

@adnanrahic

Adnan Rahić

Senior Developer Advocate @ Cube Dev. Book/Course Author. Failed startup...

Sobre @adnanrahic
LEARN MORE ABOUT @ADNANRAHIC'S EXPERTISE AND PLACE ON THE INTERNET.
react to story with heart
Zeet patrocina esta entrada de blog para el próximo mes. Lo probé el otro día. Es como sin servidor pero para ejecutar back-ends completos. Puede alojar y escalar aplicaciones de forma automática. Con buena pinta.

Independientemente de su experiencia como desarrollador, es inevitable que haya escuchado el término Serverless durante el último año. La palabra ha estado zumbando en mis oídos por más tiempo del que me atrevo a decir. Durante demasiado tiempo he estado postergando investigarlo con más detalle. Bueno, aquí no pasa nada.

¿Listo? Hoy repasaremos las maravillas y los puntos débiles del uso de Serverless. También definiremos las palabras clave principales y los temas que son cruciales para comenzar con la tecnología. Por último, seguiremos adelante y saltaremos directamente a un código y escribiremos nuestras propias funciones sin servidor , emularemos el entorno localmente y monitorearemos el rendimiento . Tenga en cuenta que necesitará una cuenta de AWS para seguir los ejemplos de código. Afortunadamente, tienen increíbles niveles gratuitos, por lo que no debe preocuparse por romper el banco cuando juega con cosas nuevas.

¿Estabas diciendo?

¿Cómo es que ir sin servidor es tan genial de repente? ¿Es bueno no usar más servidores? Me encantan los servidores, ¿por qué no usarlos? Los servidores son increíbles. Utiliza la línea de comando para decirles qué hacer. ¿Por qué alguien querría renunciar a eso? Yo estaba genuinamente estupefacto. Pero bueno, dando un paso atrás, me doy cuenta de que no son óptimos. Son un dolor de manejar en grupos. No escalan con gracia. Estas son solo las primeras cosas que vienen a la mente.

Cambiemos de mentalidad por completo. Piensa en usar solo funciones. No más servidores de gestión. Solo te importa el código. Suena bastante bien. Nosotros, como desarrolladores, no deberíamos necesitar hacer el tedioso trabajo en la línea de comandos. Deja que los chicos de operaciones se encarguen de eso. ¿Cómo llamamos a este tipo de arquitectura? ¿Solo usando funciones? ¿Pequeñas funciones? ¿Pequeños servicios?

Funciones como servicio (FaaS)

Se llama funciones como servicio, y es asombroso. El concepto se basa en la computación sin servidor. Nos da la capacidad de implementar cualquier pieza de código o función individual. El código se ejecuta y devuelve un valor, finalizando a su vez el proceso. Suena simple, ¿verdad? Bueno, lo es. Si alguna vez ha escrito una API REST, se sentirá como en casa. Todos los servicios y terminales que normalmente mantendría en un solo lugar ahora se dividen en pequeños fragmentos, microservicios. El objetivo es abstraer completamente los servidores del desarrollador y solo facturar en función de la cantidad de veces que se han invocado las funciones. Lo que significa que servicios como estos son fáciles de escalar.

Pero, no todo es tan soleado en este lado de la valla. FaaS ha estado pasando por algunos problemas iniciales. ¿Cómo crees que se manejan los errores? No tener un servidor físico para monitorear es una experiencia un poco alucinante. Tener una idea de su sistema es razonablemente difícil. Sobre todo a mayor escala.

Vadeando en aguas poco profundas

Para comprender cómo escribir aplicaciones sin servidor, primero debemos tocar el tema de lo que hay detrás de todo esto. Las herramientas y servicios a nuestra disposición que lo hacen todo posible.

AWSLambda

AWS Lambda es un servicio informático que le permite ejecutar código sin aprovisionar ni administrar servidores.
— Documentación de AWS

Lambda es un sistema basado en eventos para ejecutar código en la nube. No te preocupas por los servidores, solo por el código que escribes. Se escala automáticamente y solo le cobra por el tiempo que realmente está ejecutando el código, el tiempo de cómputo . Pero, lo más importante, ¡se escala automáticamente! Qué asombroso es eso. No se preocupe más por si la instancia EC2 que creó es lo suficientemente grande como para atender a todos sus usuarios.

Puerta de enlace API de AWS

Lambda estaría incompleto sin API Gateway . Todas las funciones lambda requieren que se active un evento para invocarlas. Gateway proporciona los puntos finales REST que activan las funciones. Imagina que tienes la aplicación Express promedio. Por lo general, crearía un

 app.get()
método para una ruta en particular, así:

 app.get('/', function(req, res, next) { /* execute some code */ });

Cuando un usuario toca la

 '/'
enrutar un evento activará la función de devolución de llamada. Gateway es la ruta, Lambda es la función de devolución de llamada.

El marco sin servidor

Manejar todo esto es un dolor. La primera vez que lo probé, me tomó la mayor parte del día descubrir qué hace qué. Con buena razón. Los documentos son demasiado complejos, no aptos para principiantes en absoluto. Sin servidor al rescate!

Serverless es su conjunto de herramientas para implementar y operar arquitecturas sin servidor. Concéntrese en su aplicación, no en su infraestructura.
Serverless.com

El marco sin servidor reúne todas las herramientas que necesita en un paquete manejable, lo que hace que sea simple y sencillo crear e implementar aplicaciones sin servidor. Es tan increíble que abstrae todas las tareas tediosas que debe realizar en la consola de AWS, como crear funciones y conectarlas a eventos. El único inconveniente es que tiene que enviar código a AWS cada vez que desea probar sus funciones, mientras que emular el entorno localmente es un poco molesto.

Los casos de uso en los que Serverless es la mejor opción son amplios. Debido a la facilidad de escalado y el bajo mantenimiento, cualquier aplicación que tenga en producción en la que el rendimiento del usuario varíe rápidamente es un competidor válido para usar la arquitectura sin servidor. Por último, si apesta en el shell de Linux, y si DevOps no es lo suyo, tiene todas las razones para probar Serverless.

Una nueva mentalidad

La arquitectura sin servidor no perdona. Es un hecho. Solo configurarlo requiere una parte justa de poder mental. No cuento con emularlo localmente. Esa es otra bestia completamente diferente.

La hostilidad nos obliga a cambiar nuestro enfoque. Tenemos que vivir con el hecho de que no tenemos una visión general de todo nuestro sistema. Pero, los humanos se adaptan y superan. Llega el marco Serverless como un caballero de brillante armadura.

Saltemos y creemos una función sin servidor simple.

Configurar Serverless es simple. Debe instalarlo a través de npm y conectar su cuenta de AWS. No se preocupe, si se siente intimidado por la consola de AWS, está perfectamente bien. Desglosaré el proceso y repasaremos todo paso a paso.

1. En primer lugar, debe instalar Serverless globalmente.

Abra una ventana de terminal y ejecute:

 $ npm install -g serverless

Ahora ha instalado el marco Serverless globalmente en su máquina. Los comandos sin servidor ahora están disponibles para usted desde cualquier lugar de la terminal.

Nota: si está utilizando Linux, es posible que deba ejecutar el comando como sudo.

2. Cree un usuario de IAM en su consola de AWS

Abra su consola de AWS y presione el menú desplegable de servicios en la esquina superior izquierda. Verá aparecer un montón de servicios. Continúe y escriba IAM en el cuadro de búsqueda y presione sobre él.

image

Se le redirigirá a la página principal de IAM de su cuenta. Proceda a agregar un nuevo usuario.

image

Elija un nombre original para su nuevo usuario de IAM y otorgue al usuario acceso programático . Continúe con el siguiente paso.

image

Ahora puede agregar un conjunto de permisos al usuario. Debido a que vamos a permitir que Serverless cree y elimine varios activos en nuestra cuenta de AWS, continúe y verifique AdministratorAccess.

image

Al continuar con el siguiente paso, verá que se creó el usuario. Ahora, y solo ahora, tendrá acceso a la ID de la clave de acceso y la clave de acceso secreta de los usuarios. Asegúrese de anotarlos o descargar el archivo .csv. Mantenlos a salvo, nunca se los muestres a nadie. Los pixeleé a pesar de que se trata de una demostración, para asegurarme de que comprende la severidad de mantenerlos a salvo.

image

Una vez hecho esto, finalmente podemos pasar a ingresar las claves en la configuración sin servidor.

3. Introduzca las claves de IAM en la configuración sin servidor

¡Impresionante! Con las claves guardadas, puede configurar Serverless para acceder a su cuenta de AWS. Vuelva a su terminal y escriba todo esto en una sola línea:

 $ serverless config credentials --provider aws --key xxxxxxxxxxxxxx --secret xxxxxxxxxxxxxx

¡Presione enter! Ahora su instalación sin servidor sabe a qué cuenta conectarse cuando ejecuta cualquier comando de terminal. Entremos y veámoslo en acción.

4. Crea tu primer servicio

Cree un nuevo directorio para albergar sus servicios de aplicaciones sin servidor. Enciende una terminal allí. Ahora está listo para crear un nuevo servicio. ¿Qué es un servicio que pides? Véalo como un proyecto. Pero no realmente. Es donde define las funciones de AWS Lambda, los eventos que las desencadenan y los recursos de infraestructura de AWS que requieren, todo en un archivo llamado serverless.yml .

De vuelta en su tipo de terminal:

 $ serverless create - - template aws - nodejs - - path my - service

El comando crear creará un nuevo servicio . ¡Sorpresa desagradable! Pero aquí está la parte divertida. Necesitamos elegir un tiempo de ejecución para la función. Esto se llama la plantilla . pasando en

 aws-node
establecerá el tiempo de ejecución en Node.js. Justo lo que queremos. La ruta creará una carpeta para el servicio. En este ejemplo, nombrándolo my-service.

5. Explore el directorio de servicios con un editor de código

Abra la carpeta my-service con su editor de código favorito. Debería haber tres archivos allí. El serverless.yml contiene todos los ajustes de configuración para este servicio. Aquí se especifican tanto los ajustes de configuración generales como los ajustes por función. Su serverless.yml se ve así, solo que con una gran cantidad de comentarios.

 # serverless.yml service: my-service provider: name: aws runtime: nodejs6 .10 functions: hello: handler: handler.hello

los

 functions
La propiedad enumera todas las funciones del servicio. Puedes ver
 hello
es la única función actualmente en el archivo handler.js . los
 handler
La propiedad apunta al archivo y módulo que contiene el código que desea ejecutar en su función. De forma predeterminada, este archivo de controlador se llama handler.js . Muy conveniente de hecho.

Al abrir handler.js , verá el módulo del controlador y la función llamada hello. La función toma tres parámetros. El parámetro de evento representa los datos de evento pasados a la función. El contexto nos informa sobre el contexto de la función, su tiempo de ejecución, estado y otra información importante. El último parámetro es una función de devolución de llamada que devolverá los datos. En este ejemplo, la respuesta se devuelve como el segundo parámetro de la función de devolución de llamada. El primero siempre representa un error. si no hay error

 null
se transmite.

 // handler.js module .exports.hello = ( event, context, callback ) => { const response = { statusCode : 200 , body : 'Go Serverless!' }; callback( null , response); };

Todo esto es genial, pero todavía no podemos activar la función. No hay ningún evento conectado a él, por lo tanto, no hay forma de activar la función. Arreglemos esto. Vuelva a serverless.yml y descomente las líneas donde ve

 events:
.

 # serverless.yml service: my-service provider: name: aws runtime: nodejs6 .10 functions: hello: handler: handler.hello events: # uncomment these lines - http: path: hello/get method: get

Tenga cuidado para no estropear la sangría del archivo,

 events
debe estar directamente debajo
 handler
. Genial, una vez hecho esto, finalmente podemos implementar la función en AWS.

6. Implementación en AWS

El proceso de implementación es muy sencillo. Dentro del directorio de servicios, ejecute este comando en su terminal:

 $ serverless deploy -v

Verás que la terminal se ilumina con una tonelada de mensajes. Esa es la -v haciendo su magia. ¡Tengo que amar esos registros detallados!

image

Pero, lo más importante para nosotros es que registrará el punto final. Serverless creó automáticamente un punto final de API Gateway y lo conectó a la función Lambda. ¡¿Qué tan genial es eso?! Al presionar el punto final en el navegador, se devolverá el texto.

 Go Serverless!

Nota: si desea probar la función a través de la línea de comando, puede ejecutar:

 $ serverless invoke -f hello -l

Esto devolverá el objeto de respuesta completo, así como información sobre el estado de la función Lambda, como la duración y el uso de la memoria.

Aliviando el dolor

Apesta tener que implementar la función en AWS cada vez que quiero probarla. ¿No sería increíble si hubiera una forma de emular el entorno localmente?

Con esa incómoda digresión, voilà, Serverless Offline ! Ahora finalmente puedo probar todo el código localmente antes de enviarlo a AWS. Eso alivia mucho el estrés en mi espalda.

Es sorprendentemente fácil agregar Serverless Offline a sus servicios. Instalar un módulo npm y agregar dos líneas a serverless.yml es todo lo que necesita.

No hay mejor forma de demostrártelo que mostrándote.

1. Inicializar npm en el directorio de servicios

Ahora debe ingresar al directorio my-service y abrir una ventana de terminal allí. Una vez dentro puedes ejecutar:

 $ npm init

2. Instalar sin servidor sin conexión

Con npm inicializado, no hay nada más que hacer que simplemente ejecutar la instalación.

 $ npm install serverless- offline --save-dev

los

 --save-dev
flag guardará el paquete como una dependencia de desarrollo.

Antes de continuar, primero debe informar al terminal que tiene un nuevo comando disponible. Entonces, dentro del archivo serverless.yml , agregue dos líneas nuevas.

 # serverless.yml service: my-service provider: name: aws runtime: nodejs6 .10 functions: hello: handler: handler.hello events: - http: path: hello/get method: get # adding these two lines plugins: - serverless-offline

3. Ejecutarlo localmente

Para asegurarse de haber instalado todo correctamente, ejecute:

 $ serverless

Deberías ver una opción llamada

 offline
entre las diversas opciones enumeradas. Si lo haces, estás listo para irte.

Nota: si desea ver más información útil sobre Serverless Offline, ejecute

 serverless offline --help
en la ventana de tu terminal.

Con todo eso fuera del camino, continúe y active la emulación local de Lambda y API Gateway.

 $ serverless offline start

Verás todas tus rutas listadas en la terminal. Sus Lambdas ahora se están ejecutando en su servidor local. El puerto predeterminado es

 3000
. Siéntete libre de abrir un navegador y comprobarlo. Llegar al punto final
 http://localhost:3000/hello/get
devolverá el mismo texto que en el ejemplo anterior con la función implementada.

Qué genial es esto. Ahora no necesitamos enviar constantemente código a AWS para ver si funciona. Podemos probarlo localmente y solo enviarlo cuando estemos seguros de que funciona.

cuidando mi espalda

En las aplicaciones tradicionales, cuando algo se rompe, lo sabes. También sabes dónde se rompió. ¡Tienes que amar esos rastros de pila! De todos modos, el proceso de monitoreo de tales aplicaciones es bastante sencillo. ¿Cómo se relaciona esto con el uso de Serverless? Los registros en AWS CloudWatch son horribles. Me tomó una eternidad encontrar funciones fallidas para aplicaciones simples, imagina el horror con aplicaciones a gran escala.

Lo que encontré como una gran alternativa es Dashbird . Es gratis y parece prometedor . Tampoco están pidiendo una tarjeta de crédito, por lo que es una situación de "¿por qué no intentarlo?".

Se tarda 5 minutos en poner en marcha el servicio, principalmente debido al gran tutorial de introducción que tienen.

Conectar Dashbird con Serverless finalmente me permite ver qué está pasando en mi aplicación. Genial tener a alguien cuidándote las espaldas.

image

Los errores se resaltan y puedo ver el estado general de mi sistema. Qué alivio. También rastrea el costo. No te preocupes por arruinar el presupuesto. Incluso se incluye monitoreo en tiempo real. Eso es genial.

image

Herramientas como esta hacen que sea un paseo por el parque para administrar aplicaciones a gran escala.

Terminando

¡Qué viaje! Ahora ha sido testigo de la transición del desarrollo web tradicional a la revolución sin servidor. Con estas sencillas herramientas, ahora tenemos todo lo que necesitamos para crear aplicaciones asombrosas, escalables y confiables.

Lo único que nos detiene es nuestra propia mentalidad. Darse cuenta de que las funciones no son iguales a los servidores será el punto de inflexión. Pero, vamos en la dirección correcta. Herramientas como Serverless y Dashbird facilitan increíblemente bien la dolorosa transición. Me han ayudado mucho en mi camino hacia el gran desconocido de la arquitectura serverless.

Te insto a que sigas jugando con estas herramientas. Intente incluirlos en su proceso de desarrollo existente. Te sentirás aliviado con la cantidad de apoyo que tienes de repente. También hace maravillas con los nervios.

Si desea echar un vistazo a todo el código que escribimos anteriormente, aquí está el repositorio . O si quieres leer mis últimos artículos, dirígete aquí.

Últimas historias escritas por Adnan Rahić - Medium
Lee las últimas historias escritas por Adnan Rahić en Medium. Ingeniero de software @bookvar_co. Educador de codificación @ACADEMY387... medium.com

Editar : el 22 de diciembre publiqué un curso en video sobre el tema de JavaScript sin servidor. Siéntase libre de echar un vistazo a continuación.

Ejemplo de JavaScript sin servidor [Video] | PACKT Libros
Hágase hábil con demostraciones en vivo sobre desarrollo web sin servidor www.packtpub.com

Editar : El 2 de enero publiqué el seguimiento de este tutorial. Puedes echarle un vistazo a continuación.

Creación de una API REST sin servidor con Node.js y MongoDB
El movimiento Serverless ha ganado un poco de impulso en los últimos meses. Todo el mundo parece estar hablando de ello… hackernoon.com

Espero que hayan disfrutado leyendo esto tanto como yo disfruté escribiéndolo.
¿Crees que este tutorial será de ayuda para alguien? No dudes en compartir. Si te gustó, rompe el aplauso de abajo para que otras personas lo vean aquí en Medium.

HISTORIAS RELACIONADAS

L O A D I N G
. . . comments & more!
Hackernoon hq - po box 2206, edwards, colorado 81632, usa