Introducci贸n a AWS Lambda y Node.js

    脡rase una vez, no hace tanto tiempo, una palabra que me llam贸 la atenci贸n. Lambda. Eso toc贸 una fibra sensible, recordando los buenos tiempos de jugar Half-Life cuando era ni帽o. Poco sab铆a yo qu茅 era AWS Lambda y lo incre铆blemente asombroso que es. Si est谩 intrigado, qu茅dese. Solo tomar茅 unos minutos de su ya ajetreado d铆a, y seguramente no le importar谩.

    Funcionar como un servicio

    Vamos a entrar de inmediato. La arquitectura a la que pertenece AWS Lambda se llama Computaci贸n sin servidor o Funcionar como un servicio. Es innovador debido a la falta de servidores. Eso suena extra帽o. Bueno, el c贸digo no se ejecuta en patatas, 驴verdad? De acuerdo, eso es solo un dicho. Lo que realmente est谩 sucediendo es que usted, el desarrollador, no necesita preocuparse por la infraestructura en la que se ejecuta su c贸digo. Implementa el c贸digo en la nube y 茅l mismo maneja la creaci贸n de todos los recursos necesarios. 驴Pero c贸mo? 隆Contenedores!

    No, esos no. 隆Estas!

     

    Estibador

    Docker es la plataforma de contenedores de software l铆der en el mundo. Los desarrolladores usan Docker para eliminar los problemas de “funciona en mi m谩quina” cuando colaboran en el c贸digo con sus compa帽eros de trabajo. Los operadores usan Docker para ejecutar y administrar aplicaciones una al lado de la otra en contenedores aislados para obtener una mejor densidad inform谩tica. Las empresas utilizan Docker para crear canales de entrega de software 谩giles para ofrecer nuevas funciones de forma m谩s r谩pida, m谩s segura y con confianza para las aplicaciones Linux, Windows Server y Linux en mainframe.

    Cada vez que se crea una funci贸n de AWS Lambda, se activa un contenedor para servirla. El c贸digo se implementa en el contenedor y luego se ejecuta. Por lo tanto, cada solicitud posterior es m谩s r谩pida porque AWS omite la creaci贸n inicial del contenedor si ya existe.

    Creando tu primera funci贸n

    Antes de que pueda ver el c贸digo, debe crear una nueva funci贸n en la consola de AWS. Lo que significa que necesita una cuenta de AWS. Si no tiene una cuenta, no dude en crear una, tienen incre铆bles niveles gratuitos que incluyen varios servicios y duran hasta 12 meses.

    Continuando, inicie un navegador y navegue hasta su cuenta. Desde all铆, debe encontrar Lambda. Presione el men煤 desplegable de servicios y seleccione Lambda.

    Llegar谩 a la p谩gina de inicio de Lambda con un gran bot贸n naranja que le indicar谩 que cree una nueva funci贸n. Bueno, no lo dejes esperando m谩s, presi贸nalo.

    Esto lo llevar谩 al selector de planos de funciones. Como este ejemplo cubrir谩 una funci贸n b谩sica que simular谩 un lanzamiento de dados, olvid茅monos de los planos y creemos uno desde cero.

    隆Incre铆ble! Ahora solo necesita agregar un nombre y papel para la funci贸n y finalmente empezar a escribir c贸digo. Con respecto al rol, si茅ntase libre de elegir un rol existente como lambda_basic_execution. Ser谩 m谩s que suficiente para este sencillo ejemplo. Finalmente, contin煤e y cree la funci贸n.

    隆Excelente! Ahora finalmente est谩 viendo un c贸digo. Mucho mejor. Vamos a sumergirnos. Hay varias opciones a tener en cuenta. La opci贸n de tipo de entrada de c贸digo establece c贸mo agregar谩 c贸digo a la funci贸n. Puede estar en l铆nea, cargar un archivo .zip o cargar desde S3. Usaremos la primera opci贸n, editando en l铆nea. Para funciones peque帽as, est谩 totalmente bien escribir c贸digo en l铆nea. Pero cuando tienes m谩s c贸digo, se vuelve muy tedioso. Es por eso que hay una opci贸n de carga .zip que tambi茅n veremos m谩s adelante.

    Deje el tiempo de ejecuci贸n como Node.js 6.10, que es la 煤ltima versi贸n compatible de Node.js para Lambda en el momento de escribir este art铆culo. El manejador tambi茅n puede permanecer igual. “铆ndice” representa el nombre del archivo, mientras que handler es el nombre de la funci贸n.

    Consulte los par谩metros que toma la funci贸n. Un poco extra帽os, 驴no? Vamos a analizarlo.

    • los event El par谩metro contiene la informaci贸n del evento actual. Eso significa que el evento que activa la funci贸n enviar谩 informaci贸n a la funci贸n que se utilizar谩. Un ejemplo ser铆an los datos que una solicitud HTTP env铆a al punto final, como si tiene par谩metros de solicitud o un cuerpo.
    • los context contiene toda la informaci贸n sobre la funci贸n en s铆. Cu谩nto tiempo ha estado funcionando, cu谩nta memoria est谩 consumiendo, entre otras cosas. Esto se ve como informaci贸n de tiempo de ejecuci贸n.
    • los callback es bastante autoexplicativo. Cuando desee decirle a la funci贸n que finalice su ejecuci贸n, invoca la devoluci贸n de llamada. Se necesitan dos par谩metros, el primero es un error, el segundo son los datos que desea enviar como respuesta de la funci贸n Lambda.

    Escribiendo algo de l贸gica

    Eso es suficiente con la configuraci贸n por ahora. Codifiquemos algo.

    Empezamos con este fragmento de c贸digo. El objetivo es escribir un fragmento de c贸digo que imite el lanzamiento de un dado.

    exports.handler = (event, context, callback) => {
      // TODO implement
      callback(null, 'Hello from Lambda');
    };
    

    Aqu铆 va nada.

    exports.handler = (event, context, callback) => {
        var min = 1;
        var max = 6;    
        var randomNumber = Math.floor(Math.random() * (max - min + 1)) + min;
        var message="Your dice throw resulted in: " + randomNumber;
        callback(null, message);    
    };
    

    隆Agradable! Eso hace el truco. Ahora la funci贸n devolver谩 un n煤mero aleatorio entre 1 y 6. Con eso fuera del camino, prob茅moslo. Presione el bot贸n de prueba naranja y proceda a crear un evento de prueba “Hello World”. Dale un nombre original sin ninguna raz贸n en particular. Solo por la diversi贸n de tener un evento de prueba llamado FunkyName. Ahora puede continuar y probar la funci贸n. Despu茅s de presionar el bot贸n de prueba, ver谩 algo como esto.

    La secci贸n bordeada con el contorno punteado muestra la salida de la funci贸n, m谩s precisamente el valor que fue devuelto por la funci贸n de devoluci贸n de llamada.

    隆Eso fue divertido! Ahora tienes un rodar un dado funci贸n, pero no hay forma de activarlo fuera de AWS, todav铆a.

    Conectando una API

    Aqu铆 viene la parte crucial. 驴C贸mo crees que las funciones Lambda saben c贸mo iniciar su ejecuci贸n? 驴Vud煤? 驴Magia? No, lamentablemente no. Cada invocaci贸n de funci贸n se activa mediante un evento. Puede ser cuando una imagen se carga en S3, puede ser una habilidad de Amazon Alexa o simplemente una solicitud HTTP normal.

    Creemos un evento HTTP y le digamos que invoque nuestra funci贸n. Para poder hacer esto, primero debe saltar a Puerta de enlace API en la consola de AWS. En el men煤 desplegable de servicios, seleccione API Gateway y aterrizar谩 aqu铆.

    Inmediatamente se le pedir谩 que cree una API. Ignore todas las sugerencias y elija Nueva API e ingrese un nombre para su API. Me voy a quedar con FunkyApi, simplemente suena bien. Contin煤e y presione crear.

    Ahora viene la parte divertida. Finalmente, conecte la API a la funci贸n. Primero presione el Comportamiento desplegable y elegir Crear m茅todo. Ver谩 aparecer otro men煤 desplegable m谩s peque帽o. Presi贸nelo y elija OBTENER. Establezca el tipo de integraci贸n en Funci贸n Lambda, seleccione la regi贸n donde cre贸 la funci贸n y escriba el nombre de su funci贸n.

    隆Presiona guardar y regoc铆jate!

    La API est谩 configurada y lista. Ahora solo necesita implementarlo. presione el Comportamiento men煤 desplegable una vez m谩s y pulsa Implementar API. Elija una nueva etapa de implementaci贸n, anote dev como nombre de la etapa y estar谩 listo para implementar la API.

    隆Finalmente! El punto final de la API est谩 listo. Ahora tiene acceso al Invocar URL sobre el dev Stage Editor.

    No dude en abrir el punto final de la API en una ventana del navegador y comprobar el resultado. 驴Que ves? No realmente, 驴qu茅 ves? Se debe devolver un n煤mero aleatorio entre 1 y 6. 驴隆Qu茅 asombroso es esto !? En menos de 5 minutos, ha creado una funci贸n Lambda, la ha conectado a API Gateway y ha creado un punto final para consumir cuando lo desee.

    Subiendo c贸digo con un ZIP

    驴Qu茅 sucede si necesita utilizar algunos m贸dulos de npm? No puede agregarlos en l铆nea. Tiene que haber una forma de ejecutar c贸digo con dependencias. Bueno, lo hay, pero es un poco complicado hacerlo bien. Sin embargo, 隆sigamos adelante!

    En primer lugar, cree un directorio e inicialice npm.

    $ mkdir roll-a-dice && npm init
    

    Una vez que haya hecho esto, contin煤e e instale moment, una biblioteca de fecha y hora simple.

    $ npm install moment --save
    

    Esto crear谩 una carpeta node_modules con las dependencias requeridas. Para incluirlos, debe comprimir todos los archivos y cargar el archivo .ZIP en Lambda.

    Nota IMPORTANTE: Comprima 煤nicamente los archivos y carpetas dentro del directorio del proyecto. Hacer NO zip toda la carpeta. Si lo hace, se romper谩 la configuraci贸n y la funci贸n Lambda fallar谩.

    Antes de continuar y comprimir los archivos, agregue algo de c贸digo con el nuevo m贸dulo npm que acaba de instalar para asegurarse de que la funci贸n Lambda lo usa.

    Cree un nuevo archivo en el directorio del proyecto y as铆gnele un nombre index.js. Pegue la funci贸n Lambda existente de AWS en el archivo y ed铆tela ligeramente.

    var moment = require('moment');
    
    exports.handler = (event, context, callback) => {
      var min = 1;
      var max = 6;
      
      var randomNumber = Math.floor(Math.random() * (max - min + 1)) + min;
      var now = moment().format();
      
      var message="Your dice throw resulted in " + 
      randomNumber + ' and was issued at ' + now;
      
      callback(null, message);
    };
    

    Guarde todos los archivos y ci茅rrelos. Recuerde, solo los archivos y carpetas dentro del rodar un dado directorio.

    Ahora tiene un archivo .ZIP. Contin煤e y vuelva a la consola de AWS.

    Cambiar el Tipo de entrada de c贸digo a Cargar un archivo .ZIP y cargue el archivo que acaba de comprimir. 隆Excelente! Ahora, vuelva a la parte superior de la p谩gina y presione el bot贸n naranja grande una vez m谩s para Guardar y probar la funci贸n.

    隆Agradable! Funciona y muestra la fecha y hora actuales. Comprimi贸 correctamente la funci贸n y el m贸dulo npm. Por si acaso, vuelva a la ventana del navegador y pruebe el punto final una vez m谩s. Ahora deber铆a mostrar el mensaje actualizado.

     

    API y aplicaciones sin servidor de AWS: una introducci贸n completa

    驴Desea obtener m谩s informaci贸n sobre Lambda, API Gateway y otros servicios de AWS? Intente realizar un curso de formaci贸n paso a paso para ense帽arle c贸mo crear r谩pidamente servicios web r谩pidos, econ贸micos y escalables.

     

    驴Ahora que? 隆Empiece a codificar!

    Lambda es una herramienta incre铆ble que funciona bien con una gran cantidad de otros servicios en AWS. Las funciones de Lambda se pueden invocar en respuesta a un evento como la carga de archivos, se pueden usar para chatbots, API REST y mucho, mucho m谩s.

    Este simple ejemplo de API que codificamos anteriormente es solo el comienzo. Pero puedes ver el punto. Se evita tanta sobrecarga con solo preocuparse por el c贸digo, sin preocuparse por la infraestructura subyacente. Les insto a que sigan jugando con esta tecnolog铆a, ya que solo se volver谩 m谩s popular en el futuro. Simplemente comience a codificar. Sea lo que sea, no importa. Simplemente comience a escribir c贸digo, porque aprender谩 m谩s haci茅ndolo usted mismo.

    Si omiti贸 alguno de los pasos anteriores, aqu铆 est谩 el repositorio con todo el codigo.

    Espero que hayan disfrutado leyendo esto tanto como yo disfrut茅 escribi茅ndolo. Hasta la pr贸xima, ten curiosidad y divi茅rtete.

    驴Crees que este tutorial ser谩 de ayuda para alguien? No dudes en compartir. Si te gust贸, h谩zmelo saber en los comentarios a continuaci贸n.

     

    Etiquetas:

    Deja una respuesta

    Tu direcci贸n de correo electr贸nico no ser谩 publicada. Los campos obligatorios est谩n marcados con *