Cómo reutilizar paquetes de Node.js con funciones de AWS Lambda mediante capas Amplify y Lambda

En este artículo, aprenderá a inyectar paquetes personalizados en el tiempo de ejecución de AWS Lambda Functions mediante AWS Lambda Layers. También utilizará Amplify para desarrollar, implementar y distribuir sus aplicaciones.

Las aplicaciones sin servidor son excelentes para aquellos que no quieren pagar por máquinas inactivas o incluso administrar infraestructuras en la nube. Este post se centrará en una suave introducción a la Marco de amplificación usando Node.js .Instalará un paquete Node.js personalizado una vez y lo inyectará en todas sus funciones mediante AWS Lambda Layers .

Al final de esta publicación, habrá aprendido cómo implementar funciones sin servidor en AWS al:

  • Creación de una API web de Node.js utilizando Express.js como una función sin servidor utilizando Amplify Framework
  • Inyección de un paquete personalizado en el tiempo de ejecución de las funciones de AWS Lambda mediante AWS Lambda Layers para monitorear y extender las solicitudes HTTP.

Requisitos

En los siguientes pasos, creará una aplicación real y la publicará en la infraestructura de AWS. Antes de comenzar a codificar, asegúrese de tener los siguientes requisitos configurados en su entorno:

  • Una cuenta activa de AWS
  • AWS CLI
  • Node.js v14

Introducción

Una de mis plataformas en la nube favoritas que proporciona infraestructura sin servidor es Amazon Web Services. Llevan mucho tiempo desarrollando y distribuyendo plataformas que permiten a las empresas lanzar software más rápido que si tuvieran que configurar y manejar configuraciones repetitivas.

Si está familiarizado con las aplicaciones sin servidor, es posible que haya oído hablar del marco sin servidor. Es un marco de múltiples nubes para administrar arquitecturas sin servidor mediante el uso de archivos de configuración, la implementación y ejecución de aplicaciones con un solo comando.

Aun así, los desarrolladores todavía necesitan instalar complementos y administrar los archivos de configuración por sí mismos, y podría llevar un tiempo crear un flujo de trabajo complejo.

Entonces, ¿qué tipo de CLI te gusta más? ¿Una CLI que le preguntará qué desea, como conexiones externas (base de datos, almacenamiento, cola, etc.), flujo de autenticación, permisos externos, etc.? Sí, amigo mío, bienvenido a AWS Amplify.

AWS Amplify

AWS Amplify es un ecosistema que ayuda a los desarrolladores de back-end, front-end e integración. Si echas un vistazo a sus documentos oficiales, verás la enorme lista de posibles bibliotecas y ejemplos para trabajar tanto en back-end como en front y aplicaciones.

Cuando tenga su AWS CLI configurada y su entorno configurado, ejecute el siguiente comando para instalar AWS Amplify globalmente en su máquina:

npm install -g amplify-cli

A continuación, inicialicemos un directorio de trabajo creando una carpeta:

mkdir app && cd app

Ahora, inicializará un proyecto de amplificación ejecutando el siguiente comando. Para hacerlo, deberá verificar algunas opciones en el asistente de CLI. Tenga en cuenta que cuando se le solicite, puede presionar Enter en su teclado para elegir los valores predeterminados.

amplify init

Elija las opciones según el texto en negritaabajo:

  • Ingrese un nombre para la aplicación del proyecto
  • Ingrese un nombre para el entorno dev
  • Elija su editor predeterminado: Visual Studio Code
  • Elija el tipo de aplicación que está creando javascript

Por favor, cuéntanos sobre tu proyecto

  • ¿Qué marco de javascript estás usando ninguno
  • Ruta del directorio de origen:   src
  • Ruta del directorio de distribución: dist
  • Comando de compilación:   npm run-script build
  • Comando de inicio: npm run-script start

Inicializando el proyecto compartido

A través de los siguientes pasos, creará una función. Esta función se utilizará para almacenar dependencias que se inyectarán más adelante en funciones del ecosistema de AWS Lambda Functions.

La ejecución del siguiente comando lo guiará hacia los pasos para crear su capa Lambda:

amplify function add

Elija las opciones según el texto en negritaopciones a continuación. Tenga en cuenta que para los tiempos de ejecución compatibles, deberá presionar la tecla de espacio en su teclado para seleccionar el tiempo de ejecución.

  • Seleccione la capacidad que desea agregar: Capa Lambda (código y recurso compartido utilizados en todas las funciones)
  • Proporcione un nombre para su capa Lambda: apmAgentLayer
  • Seleccione hasta 2 tiempos de ejecución compatibles: NodeJS
  • La cuenta de AWS actual siempre tendrá acceso a esta capa.
  • Opcionalmente, configure quién más puede acceder a esta capa. (Presiona para saltar) Público

✅ Carpetas de capa Lambda y archivos creados: amplify / backend / function / apmAgentLayer

Instalación de módulos personalizados

Al ir a la ruta de la capa amplify / backend / function / apmAgentLayer, es posible que haya visto algunas carpetas creadas por Amplify. Como estamos trabajando en un proyecto de Node.js, todos los módulos de nodo deben estar instalados en lib / nodejs .

Creé un ejemplo de un Monitor de rendimiento de aplicaciones para mostrar cómo usar la función de enlaces de rendimiento de Node.js para medir la duración entre solicitudes y cambiar los lectores de respuesta HTTP. Le ayudará a mostrar otras posibilidades para implementar código compartido y extender el comportamiento de Node.js.

El primer paso aquí es instalar las dependencias compartidas y cargarlas en AWS. Vaya a la ruta generada por la CLI amplify / backend / function / apmAgentLayer / lib / nodejs y luego instale el paquete usando los siguientes comandos:

cd amplify/backend/function/apmAgentLayer/lib/nodejs npm i @erickwendel/ew-agent

Implementar

Una vez que haya instalado su paquete, puede implementarlo e inspeccionarlo más tarde a través de la consola de AWS. Tenga en cuenta que aún no hemos agregado ningún código. El objetivo en este punto es simplemente preparar esta biblioteca para su uso posterior.

Ejecute el siguiente comando para cargar su capa Lambda:

amplify push

Creación de la función API web

En este punto, ya tiene un proyecto de infraestructura local de Amplify listo para agregar rutas API, rutinas, vínculos con servicios de AWS, etc.

El siguiente comando será útil para generar un proyecto basado en ExpressJS y una función AWS Lambda. También vinculará la función en su capa de AWS Lambda casi creada y la expondrá en AWS API Gateway.

amplify api add

Elija las opciones según el texto en negritaabajo:

  • Seleccione uno de los servicios mencionados a continuación: DESCANSO
  • Proporcione un nombre descriptivo para su recurso que se utilizará como etiqueta para esta categoría en el proyecto: myApi
  • Proporcione una ruta (p. Ej., / Book / {isbn}): / hi
  • Elija una fuente Lambda Cree una nueva función Lambda
  • Proporcione un nombre descriptivo para su recurso que se utilizará como etiqueta para esta categoría en el proyecto: myApi
  • Proporcione el nombre de la función de AWS Lambda: myApi
  • Elija el tiempo de ejecución que desea utilizar: NodeJS
  • Elija la plantilla de función que desea utilizar: Función Serverless ExpressJS (Integración con API Gateway)
  • ¿Desea acceder a otros recursos de este proyecto desde su función Lambda? No
  • ¿Desea invocar esta función de forma periódica? No
  • ¿Quieres configurar capas Lambda para esta función? si
  • Proporcione capas existentes o seleccione capas en este proyecto para acceder desde esta función (elija

    hasta 5): apmAgentLayer

  • Seleccione una versión para apmAgentLayer: 1
  • ¿Quiere editar la función lambda local ahora? si

Como estoy usando VSCode, la respuesta del último asistente abrirá el app.jsarchivo en mi editor para que pueda editar. Ahora, sin agregar otras dependencias, importemos el módulo compartido Lambda Layer en la primera línea de este archivo usando el siguiente código:

require('@erickwendel/ew-agent').start()

Después de editar el archivo, vaya a la terminal y presione Enter y elija las respuestas que se muestran en negrita a continuación:

  • Restringir el acceso a la API No
  • ¿Quieres agregar otra ruta? No

En el momento de redactar este artículo, no podemos probar las capas Lambda de forma local con AWS Amplify. Pero vas implementar su proyecto de AWS y la prueba de que en la producción deejecutando el amplify pushcomando de nuevo.

Tenga en cuenta que imprimirá qué recursos deben actualizarse y qué recursos se crearán en esta implementación. Llevaría un tiempo realizar todas las operaciones y su salida debería verse como la siguiente:

Como puede haber mostrado su terminal, su API ahora tiene una URL. Mi URL generada es //nlq7x7onj0.execute-api.us-east-1.amazonaws.com/dev y la ruta será la hique creamos juntos en los pasos anteriores.

Activemos una solicitud usando la cURL (o incluso su navegador) para ver qué sucede:

curl -i //nlq7x7onj0.execute-api.us-east-1.amazonaws.com/dev/hi

Después de ejecutarlo, la API debería responder con una respuesta JSON con el siguiente contenido {"success":"get call succeed!","url":"/hi"}. Se inyectó la capa Lambda y debería haber cambiado sus encabezados de respuesta agregando las claves x-instrumented-byy x-request-idcomo esta:

x-instrumented-by: ErickWendel x-request-id: 5ddf1343-e42e-4e33-b1e1-936c303c14c8

Si tiene curiosidad acerca de lo que Amplify ha logrado para usted durante este tutorial, ejecute amplify consoley navegue en el tablero. Puedes ver el mío a continuación:

Limpiar

Para eliminar todos los recursos creados por Amplify, ejecute amplify delete.

Conclusión

Hay muchas formas de mejorar su experiencia en aplicaciones sin servidor. Amplify Framework puede ayudarlo a crear aplicaciones de próxima generación y evitar tareas repetitivas.

Consulte los documentos oficiales para ver otras posibilidades de crear API potentes utilizando tecnologías de vanguardia como GraphQL y AWS AppSync. ¡Seguro que te ayudará mucho!

Gracias por leer

Realmente aprecio el tiempo que pasamos juntos. Espero que este contenido sea más que solo texto. Espero que te haya convertido en un mejor pensador y también en un mejor programador. Sígueme en Twitter y echa un vistazo a mi blog personal donde comparto todo mi contenido valioso.

¡Nos vemos! ?