Skip to content

Microservicio para la gestión de productos, ejemplificando parte de la arquitectura de desarrollo de ML implementada con Typescript, Amazon S3, Systems Manager Parameter Store, Api-Gateway, Serverless-Framework, Lambda, Sequelize, Mysql, Amazon RDS, entre otros.

License

Notifications You must be signed in to change notification settings

andresWeitzel/Microservice_Mercadolibre_Products_AWS

Repository files navigation

Microservice_Mercadolibre_Products_AWS

Microservicio para la gestión de productos, ejemplificando parte de la arquitectura de desarrollo de ML implementada con Typescript, Amazon S3, Systems Manager Parameter Store, Api-Gateway, Serverless-Framework, Lambda, Sequelize, Mysql, Amazon RDS, entre otros. 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/Microservice_Mercadolibre_Users_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 script start configurado en el package.json del proyecto, es el encargado de levantar

    • El plugin de serverless-offline
    • El plugin remark-lint para archivos .md (se aplica solo el --output para check and autoformat sin terminar el proceso y poder ejecutar el script de serverless)
  "scripts": {
    "check": "remark . --quiet --frail",
    "format": "remark . --quiet --frail --output",
    "format-md": "remark . --output",
    "serverless-offline": "sls offline start",
    "start": "npm run format-md && npm run serverless-offline"
  },
  • Ejecutamos la app desde terminal.
npm start
  • Si se presenta algún mensaje indicando qué el puerto 4000 ya está en uso, podemos terminar todos los procesos dependientes y volver a ejecutar la app
npx kill-port 4000
npm start


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 ts de serverles
serverless create --template aws-nodejs-typescript
  • Comprobamos la versión de typescript
tsc -v
  • Instalamos los paquetes necesarios
npm i
  • Para este caso vamos a utilizar la manera tradicional de configuración para los archivos del proyecto. (serverless.yml, src/helpers, src/resources, src/controllers, src/services , etc). Por ende se modifican los archivos de la plantilla base.
  • Instalamos serverless offline
npm i serverless-offline --save-dev
  • Instalamos serverless ssm
npm i serverless-offline-ssm --save-dev
  • Instalamos S3 local
npm install serverless-s3-local --save-dev
  • Instalamos el Cliente s3
npm install @aws-sdk/client-s3
  • Agregamos los plugins de serverless al .yml
plugins:
  - serverless-esbuild
  - serverless-s3-local
  - serverless-offline-ssm
  - serverless-offline
  • Instalamos sequelize
npm install sequelize  --save
npm install --save-dev @types/node @types/validator
npm install sequelize reflect-metadata sequelize-typescript
  • Luego agregamos la configuración en tsconfig.json, dentro de compilerOptions. Si existe un target eliminar uno.
"target": "es6", // or a more recent ecmascript version
"experimentalDecorators": true,
"emitDecoratorMetadata": true
  • Instalamos mysql2 para usar el sgdb mysql
npm i mysql2 --save
  • Usando ts se ha presentado problemas al intentar importar un módulo de conexión de postgres por parte de nodejs, más allá que nunca se usa. Instalamos el módulo de forma manual
npm i pg-hstore --save
  • Configuraremos un formato estándar de archivos markdown para el proyecto a través de remark-lint
npm install remark-cli remark-preset-lint-consistent remark-preset-lint-recommended remark-lint-list-item-indent --save-dev

npm install remark-lint-emphasis-marker remark-lint-strong-marker --save-dev

npm install remark-lint-table-cell-padding --save-dev
  • Luego agregamos la configuración para los scripts desde el package.json
  "scripts": {
    "check": "remark . --quiet --frail",
    "format": "remark . --quiet --frail --output",
  },
  • En mi caso, quiero que se aplique un autoformato por cada ejecución, aplico concurrently, quedando
  "scripts": {
    "check": "remark . --quiet --frail",
    "format": "remark . --quiet --frail --output",
    "format-md": "remark . --output",
    "serverless-offline": "sls offline start",
    "start": "npm run format-md && npm run serverless-offline"
  },
  • Luego agregamos los remark configs debajo de todo en el package.json
 "remarkConfig": {
    "settings": {
      "emphasis": "*",
      "strong": "*"
    },
    "plugins": [
      "remark-preset-lint-consistent",
      "remark-preset-lint-recommended",
      "remark-lint-table-cell-padding",
      [
        "remark-lint-list-item-indent",
        "tab-size"
      ],
      [
        "remark-lint-emphasis-marker",
        "*"
      ],
      [
        "remark-lint-strong-marker",
        "*"
      ]
    ]
  }
  • Para más información al respecto, visitar la página oficial

  • 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 (start), configurado en el package.json del proyecto, es el encargado de ejecutar

    • El plugin de serverless-offline
    • El plugin remark-lint para archivos .md
  "scripts": {
    "check": "remark . --quiet --frail",
    "format": "remark . --quiet --frail --output",
    "format-md": "remark . --output",
    "serverless-offline": "sls offline start",
    "start": "npm run format-md && npm run serverless-offline"
  },
  • Ejecutamos la app desde terminal.
npm start
  • Si se presenta algún mensaje indicando qué el puerto 4000 ya está en uso, podemos terminar todos los procesos dependientes y volver a ejecutar la app
npx kill-port 4000
npm start

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 | | Typescript | 3.8.3 | Lenguaje con alto tipado basado en JS | | Sequelize | ^6.11.0 | ORM | | Mysql | 10.1 | SGDB | | XAMPP | 3.2.2 | Paquete de servidores | | 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
Serverless Plugin
serverless-offline
serverless-offline-ssm
serverless-s3-local

| Extensión |
| ------------- | | Prettier - Code formatter | | YAML - Autoformatter .yml | | Typescript Toolbox - generate setters, getters, constrc, etc |



Sección 2) Endpoints y Ejemplos.

2.0) Endpoints y recursos 🔝

Ver

2.1) Ejemplos 🔝

Ver


Sección 3) Prueba de funcionalidad y Referencias.

3.0) Prueba de funcionalidad 🔝

Ver

3.1) Referencias 🔝

Ver

Configuración

Ejemplos proyectos typescript/serverless

Ejemplos proyectos typescript/serverless/sequelize

Herramientas

Sequelize

Api Gateway

Configuración buckets

Librerías


About

Microservicio para la gestión de productos, ejemplificando parte de la arquitectura de desarrollo de ML implementada con Typescript, Amazon S3, Systems Manager Parameter Store, Api-Gateway, Serverless-Framework, Lambda, Sequelize, Mysql, Amazon RDS, entre otros.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published