Skip to content

Microservicio para la gestión de magnitudes climáticas de diversas estaciones meteorológicas implementado con JWT, NodeJS, DynamoDB, Systems Manager Parameter Store, Bucket S3, Api-Gateway, Serverless-Framework, Lambda, etc

License

Notifications You must be signed in to change notification settings

andresWeitzel/Microservicio_EstadisticasClimaticas_SMN_AWS

Repository files navigation

Index app

Microservicio_EstadisticasClimaticas_SMN_AWS

Api Rest para la gestión de magnitudes climáticas del SMN como lo son temperatura, humedad, nubosidad, precipitación, etc de diversas estaciones meteorológicas implementado con JWT, NodeJS, DynamoDB, Systems Manager Parameter Store, Bucket S3, Api-Gateway, Serverless-Framework, Lambda, etc. Los servicios de aws se prueban en local. El código del proyecto y la documentación de este (menos doc técnica), ha sido desarrollado/a en inglés.


Índice 📜

Ver

Sección 1) Descripción, configuración y tecnologías

Sección 2) Endpoints y Ejemplos

Sección 3) Prueba de funcionalidad y Referencias



Sección 1) Descripción, configuración y tecnologías

1.0) Descripción 🔝

Ver

1.0.0) Descripción General

1.0.1) Descripción Arquitectura y Funcionamiento


1.1) Ejecución del Proyecto 🔝

Ver
  • Una vez creado un entorno de trabajo a través de algún ide, clonamos el proyecto
git clone https://github.com/andresWeitzel/Microservicio_EstadisticasClimaticas_SMN_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
  • Instalamos dynamodb con la configuración de librerias que se encuentran dentro de .dynamodb. Procedemos a instalar dicho servicio
sls dynamodb install
  • Creamos un archivo para almacenar las variables ssm utilizadas en el proyecto (Más allá que sea un proyecto con fines no comerciales es una buena práctica utilizar variables de entorno).
    • Click der sobre la raíz del proyecto
    • New file
    • Creamos el archivo con el name serverless_ssm.yml. Este deberá estar a la misma altura que el serverless.yml
    • Añadimos las ssm necesarias dentro del archivo.
    
        # AUTHENTICATION
        X_API_KEY : 'f98d8cd98h73s204e3456998ecl9427j'
    
        BEARER_TOKEN : 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c'
    
        # API VALUES
        API_VERSION : 'v1'
    
        # DYNAMODB VALUES
        BIOET_PRECIOS_TABLE_NAME : 'estadisticas-climaticas'
        REGION : 'us-east-1'
        ACCESS_KEY_RANDOM_VALUE: 'access_key_random_value'
        SECRET_KEY_RANDOM_VALUE: 'secret_key_random_value'
        ENDPOINT: "http://localhost:8000"
    
    
  • Instalamos el sdk client de dynamodb para las operaciones de db necesarias
npm install @aws-sdk/client-dynamodb
  • Instalamos el sdk lib de dynamodb para las operaciones de db necesarias
npm i @aws-sdk/lib-dynamodb
  • Configuramos las credenciales de aws seteadas en el proyecto (Verificar ssm).
aws configure
AWS Access Key ID .... : access_key_random_value
AWS Secret Key ID .... : secret_key_random_value
Default.... [us-east-1] : us-east-1
Default outpu..... : json
  • Visualizamos que se hayan seteado las credenciales
aws configure list
  • Los siguientes scripts configurados en el package.json del proyecto son los encargados de
    • Ejecutar el servicio de dynamoDB en memoria (script dynamodb-service)
    • Realizar la migración de las tablas (script dynamodb-migrate)
    • Levantar serverless-offline (serverless-offline)
 "scripts": {
   "dynamodb-service": "java -Djava.library.path=.dynamodb/DynamoDBLocal_lib -jar .dynamodb/DynamoDBLocal.jar -sharedDb -inMemory",
   "dynamodb-migrate": "sls dynamodb start --migrate",
   "serverless-offline": "sls offline start",
   "start": "concurrently --kill-others \"npm run dynamodb-service\" \"npm run dynamodb-migrate\" \"npm run serverless-offline\""
 },
  • Ejecutamos los scripts configurados
npm start
  • Si se ha realizado la migración de tablas previamente (ejecutado el comando anterior), al momento de una nueva ejecución con el mismo, surgiran errores en consola. Esto esta contemplado ya que la migración levanta el servicio de dynamodb, pero se podrá ejecutar el servicio sin problemas. Una alternativa es usar directamente el comando sls offline start ya que se corrió inicialmente y al menos una vez dicha migración.

1.2) Configuración del proyecto desde cero 🔝

Ver
  • Creamos un entorno de trabajo a través de algún ide, luego de crear una carpeta nos posicionamos sobre la misma
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 dentro del serverless.yml
plugins:
  - serverless-offlline
  • Instalamos serverless ssm
npm i serverless-offline-ssm --save-dev
  • Agregamos el plugin dentro del serverless.yml
plugins:
  - serverless-offlline-ssm
  • Instalamos serverless-dynamoDB-local (No dynamoDB). Importante que sea --save y NO --save-dev
npm install serverless-dynamodb-local --save
  • Agregamos el plugin dentro del serverless.yml
plugins:
  - serverless-dynamodb-local
  • Reemplazamos la plantila serverless.yml inicial por la siguiente como modelo base (cambiar nombre, etc)...
service: nombre

frameworkVersion: '3'

provider:
  name: aws
  runtime: nodejs12.x
  stage: dev
  region : us-west-1
  memorySize: 512
  timeout : 10

plugins:
    - serverless-dynamodb-local
    - serverless-offline-ssm
    - serverless-offline  

functions:
  hello:
    handler: handler.hello

custom:
  serverless-offline:
    httpPort: 4000
    lambdaPort: 4002    
  serverless-offline-ssm:
    stages:
      - dev
  dynamodb:
    stages:
      - dev
  • Instalamos prettier para indentaciones
npm i prettier --save
  • Instalamos node-input-validator para para validaciones de atributos en request, objetos de clases, etc.
npm i node-input-validator --save
  • Instalamos el sdk client de dynamodb para las operaciones de db necesarias
npm install @aws-sdk/client-dynamodb
  • Instalamos el sdk lib de dynamodb para las operaciones de db necesarias
npm i @aws-sdk/lib-dynamodb
  • Descargamos la Java Runtime Engine (JRE) versión 6.x o posterior. Descargar desde aquí
  • Descargamos el .jar que contendrá toda la configuración para la instalación . Descargar desde aquí
  • Según el .jar que descarguemos tenemos que setear la región correspondiente para su zona de disponibilidad en las credenciales de conexión de dynamo (si descargamos US West (Oregon) Region será 'us-west-2').
  • Una vez descargado el .jar en formato .tar descomprimimos y copiamos todo su contenido dentro de la carpeta que se ha creado de dynamo en el proyecto (.dynamodb). Si esta carpeta no está, la creamos dentro de proyecto.
  • Procedemos a instalar el servicio de dynamodb
sls dynamodb install
  • Creamos un archivo para almacenar las variables ssm utilizadas en el proyecto (Más allá que sea un proyecto con fines no comerciales es una buena práctica utilizar variables de entorno).
    • Click der sobre la raíz del proyecto
    • New file
    • Creamos el archivo con el name serverless_ssm.yml. Este deberá estar a la misma altura que el serverless.yml
    • Añadimos las ssm necesarias dentro del archivo.
    
        # AUTHENTICATION
        X_API_KEY : 'f98d8cd98h73s204e3456998ecl9427j'
    
        BEARER_TOKEN : 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c'
    
        # API VALUES
        API_VERSION : 'v1'
    
        # DYNAMODB VALUES
        BIOET_PRECIOS_TABLE_NAME : 'estadisticas-climaticas'
        REGION : 'us-east-1'
        ACCESS_KEY_RANDOM_VALUE: 'access_key_random_value'
        SECRET_KEY_RANDOM_VALUE: 'secret_key_random_value'
        ENDPOINT: "http://localhost:8000"
    
    
  • Configuramos las credenciales de aws seteadas en el proyecto (Verificar ssm).
aws configure
AWS Access Key ID .... : access_key_random_value
AWS Secret Key ID .... : secret_key_random_value
Default.... [us-east-1] : us-east-1
Default outpu..... : json
  • Visualizamos que se hayan seteado las credenciales
aws configure list
  • Instalamos la dependencia para la ejecución de scripts en paralelo
npm i --save-dev concurrently
  • Los siguientes scripts configurados en el package.json del proyecto son los encargados de
    • Ejecutar el servicio de dynamoDB en memoria (script dynamodb-service)
    • Realizar la migración de las tablas (script dynamodb-migrate)
    • Levantar serverless-offline (serverless-offline)
 "scripts": {
   "dynamodb-service": "java -Djava.library.path=.dynamodb/DynamoDBLocal_lib -jar .dynamodb/DynamoDBLocal.jar -sharedDb -inMemory",
   "dynamodb-migrate": "sls dynamodb start --migrate",
   "serverless-offline": "sls offline start",
   "start": "concurrently --kill-others \"npm run dynamodb-service\" \"npm run dynamodb-migrate\" \"npm run serverless-offline\""
 },
  • Ejecutamos los scripts configurados
npm start
  • Si se ha realizado la migración de tablas previamente (ejecutado el comando anterior), al momento de una nueva ejecución con el mismo, surgiran errores en consola. Esto esta contemplado ya que la migración levanta el servicio de dynamodb, pero se podrá ejecutar el servicio sin problemas. Una alternativa es usar directamente el comando sls offline start ya que se corrió inicialmente y al menos una vez dicha migración.

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
Systems Manager Parameter Store (SSM) 3.0 Manejo de Variables de Entorno
Amazon Api Gateway 2.0 Gestor, Autenticación, Control y Procesamiento de la Api
Amazon S3 3.0 Contenedor de Objetos
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 Descripción
Serverless Plugin Librerías para la Definición Modular
serverless-offline Este complemento sin servidor emula AWS λ y API Gateway en entorno local
serverless-offline-ssm busca variables de entorno que cumplen los parámetros de SSM en el momento de la compilación y las sustituye desde un archivo
serverless-s3-local complemento sin servidor para ejecutar clones de S3 en local

Extensión
Prettier - Code formatter
YAML - Autoformatter .yml (alt+shift+f)


Sección 2) Endpoints y Ejemplos.

2.0) Endpoints y recursos 🔝

Ver


Sección 3) Prueba de funcionalidad y Referencias.

3.0) Prueba de funcionalidad 🔝

Ver

3.1) Referencias 🔝

Ver

Dynamodb installation

DynamoDB teoría

Dynamodb operations sdk v-3

Videotutoriales

Dynamodb examples

Dynamodb code

Herramientas

Api Gateway

Librerías

Package.json


About

Microservicio para la gestión de magnitudes climáticas de diversas estaciones meteorológicas implementado con JWT, NodeJS, DynamoDB, Systems Manager Parameter Store, Bucket S3, Api-Gateway, Serverless-Framework, Lambda, etc

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published