Modelo CRUD para la comunicación entre lambdas a través de amazon simple notification service (SNS) implementado con Systems Manager Parameter Store, Api-Gateway, Amazon SNS, Serverless-Framework, Lambda, NodeJs, aws sdk-v3, entre otros.
Ver
- 1.0) Descripción del Proyecto.
- 1.1) Ejecución del Proyecto.
- 1.2) Configurar el proyecto serverless desde cero
- 1.3) Tecnologías.
1.0) Descripción 🔝
1.1) Ejecución del Proyecto 🔝
Ver
- Creamos un entorno de trabajo a través de algún ide, podemos o no crear una carpeta raíz para el proyecto, nos posicionamos sobre la misma
cd 'projectRootName'
- Una vez creado un entorno de trabajo a través de algún ide, clonamos el proyecto
git clone https://github.com/andresWeitzel/SNS_NodeJS_AWS
- Nos posicionamos sobre el proyecto
cd 'projectName'
- Instalamos la última versión LTS de Nodejs(v18)
- Instalamos Serverless Framework de forma global si es que aún no lo hemos realizado
npm install -g serverless
- Verificamos la versión de Serverless instalada
sls -v
- Instalamos todos los paquetes necesarios
npm i
- Las variables ssm utilizadas en el proyecto se mantienen para simplificar el proceso de configuración del mismo. Es recomendado agregar el archivo correspondiente (serverless_ssm.yml) al .gitignore.
- El siguiente script configurado en el package.json del proyecto es el encargado de
- Levantar serverless-offline (serverless-offline)
"scripts": {
"serverless-offline": "sls offline start",
"start": "npm run serverless-offline"
},
- Ejecutamos la app desde terminal.
npm start
- Si se presenta algún mensaje indicando qué el puerto 4567 ya está en uso, podemos terminar todos los procesos dependientes y volver a ejecutar la app
npx kill-port 4567
npm start
1.2) Configurar el proyecto serverless desde cero 🔝
Ver
- Creamos un entorno de trabajo a través de algún ide, podemos o no crear una carpeta raíz para el proyecto, nos posicionamos sobre la misma
cd 'projectRootName'
- Una vez creado un entorno de trabajo a través de algún ide, clonamos el proyecto
git clone https://github.com/andresWeitzel/SNS_NodeJS_AWS
- Nos posicionamos sobre el proyecto
cd 'projectName'
- Instalamos la última versión LTS de Nodejs(v18)
- Instalamos Serverless Framework de forma global si es que aún no lo hemos realizado
npm install -g serverless
- Verificamos la versión de Serverless instalada
sls -v
- Inicializamos un template de serverles
serverless create --template aws-nodejs
- Inicializamos un proyecto npm
npm init -y
- Instalamos serverless offline
npm i serverless-offline --save-dev
- Agregamos el plugin al .yml
plugins:
- serverless-offline
- Instalamos serverless ssm
npm i serverless-offline-ssm --save-dev
- Agregamos el plugin al .yml
plugins:
- serverless-offline-ssm
- serverless-offline
- Instalamos serverless sns
npm i serverless-offline-sns --save-dev
- Agregamos el plugin al .yml
plugins:
- serverless-offline-sns
- serverless-offline-ssm
- serverless-offline
- Instalamos serverless, este deberá ser necesario para el uso de SNS
npm i serverless --save-dev
- Instalamos el plugin para el uso de sns (aws-sdk-v3)
npm i @aws-sdk/client-sns --save-dev
- Para la configuración de puertos, topics, etc, (de este plugin) dirigirse a la página de serverless, sección plugins y para los recursos SNS página de serverless, sección eventos sns
- Las variables ssm utilizadas en el proyecto se mantienen para simplificar el proceso de configuración del mismo. Es recomendado agregar el archivo correspondiente (serverless_ssm.yml) al .gitignore.
- Instalamos la dependencia para la ejecución de scripts en paralelo
npm i concurrently
- El siguiente script configurado en el package.json del proyecto es el encargado de
- Levantar serverless-offline (serverless-offline)
"scripts": {
"serverless-offline": "sls offline start",
"start": "npm run serverless-offline"
},
- Ejecutamos la app desde terminal.
npm start
- Si se presenta algún mensaje indicando qué el puerto 4567 ya está en uso, podemos terminar todos los procesos dependientes y volver a ejecutar la app
npx kill-port 4567
npm start
Importante:
Esta es una configuración inicial, se omiten pasos para simplificar la documentación. Para más información al respecto, dirigirse a la página oficial de serverless, sección plugins
1.3) Tecnologías 🔝
Ver
Tecnologías | Versión | Finalidad |
---|---|---|
SDK | 4.3.2 | Inyección Automática de Módulos para Lambdas |
Serverless Framework Core v3 | 3.23.0 | Core Servicios AWS |
Serverless Plugin | 6.2.2 | Librerías para la Definición Modular |
Systems Manager Parameter Store (SSM) | 3.0 | Manejo de Variables de Entorno |
Amazon Simple Queue Service (SQS) | 7.0 | Servicio de colas de mensajes distribuidos |
Elastic MQ | 1.3 | Interfaz compatible con SQS (msg memory) |
Amazon Api Gateway | 2.0 | Gestor, Autenticación, Control y Procesamiento de la Api |
NodeJS | 14.18.1 | Librería JS |
VSC | 1.72.2 | IDE |
Postman | 10.11 | Cliente Http |
CMD | 10 | Símbolo del Sistema para linea de comandos |
Git | 2.29.1 | Control de Versiones |
Plugin | Descarga |
---|---|
serverless-offline | https://www.serverless.com/plugins/serverless-offline |
serverless-offline-ssm | https://www.npmjs.com/package/serverless-offline-ssm |
serverless-offline-sqs | https://www.npmjs.com/package/serverless-offline-sqs |
Extensión |
---|
Prettier - Code formatter |
YAML - Autoformatter .yml (alt+shift+f) |
DotENV |
2.0) Endpoints y recursos 🔝
Ver
Variable | Initial value | Current value |
---|---|---|
base_url | http://localhost:4000/dev | http://localhost:4000/dev |
x-api-key | f98d8cd98h73s204e3456998ecl9427j | f98d8cd98h73s204e3456998ecl9427j |
bearer_token | Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c | Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c |