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.
- Dataset Servicio Meteorológico Nacional (Estadísticas Climáticas)
- Proyecto base para Microfrontend
- Playlist prueba de funcionalidad
Ver
- 1.0) Descripción del Proyecto.
- 1.1) Ejecución del Proyecto.
- 1.2) Configuración del proyecto desde cero
- 1.3) Tecnologías.
1.0) Descripción 🔝
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 comandosls 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 comandosls 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) |