# BSMSapp Best Stock Management System application. ## Descripción de los módulos ### Api gateway Recibe pedidos HTTPS. Pueden ser POST o GET. EN el caso de GET, va directo a la lambda de lectura de la tabla. En el caso de POST, se encola en el SQS para luego ir a la lambda. ### Cloudfront Realiza cache de la API y del S3. ### Dynamo DB Guarda los datos de los stocks de los usuarios. ### Lambda Definimos 2 lambdas. Una se encarga de realizar escrituras al DynamoDB y la otra de realizar lecturas. ### S3 Definimos 3 buckets. Uno para logs y dos para front. ### SQS Se encarga de encolar POSTs recibidos por la API. Luego dispara la lambda correspondiente ### VPC Este módulo es [externo](https://registry.terraform.io/modules/terraform-aws-modules/vpc/aws/latest). ## Descripción y referencia de funciones y meta-argumentos *Los links solo hacen referencia a la primera aparición en cada archivo.* ### Funciones Junto a cada función se especifica para qué se usa. - **file**: devuelve como string el contenido del archivo `index.html`. Esto es utilizado para luego poder modificarlo (pues actúa como un template ya que tiene la variable `ENDPOINT` parametrizada) y usarlo. + [organization/datasources.tf](terraform/organization/datasources.tf#L14) - **flatten**: retorna una lista de una dimensión con los elementos de una lista de listas pues así lo espera el módulo. + [organization/vpc.tf](terraform/organization/vpc.tf#L78) - **format**: arma el `path` para un filename dado. + [modules/s3/main.tf](terraform/modules/s3/main.tf#L39) - **jsonencode**: arma un string con un objeto JSON. + [modules/apigw/main.tf](terraform/modules/apigw/main.tf#L89) - **length**: calcula el largo de `custom_origin_config` para saber si debe hacer un `for_each` sobre sus elementos, es decir, para saber si se lo definieron en el archivo que usa el módulo en cuestión. + [modules/cloudfront/main.tf](terraform/modules/cloudfront/main.tf#L20) - **lookup**: obtiene el valor de un mapa para una key. + [modules/cloudfront/main.tf](terraform/modules/cloudfront/main.tf#L16) - **replace**: modifica el `path` para hacerlo válido. + [modules/s3/main.tf](terraform/modules/s3/main.tf#L38) + [organization/cloudfront.tf](terraform/organization/cloudfront.tf#L13) - **sha1**: computa el `SHA1` del string de la configuración del apigw para saber si se necesita forzar el redeploy del módulo. + [modules/apigw/main.tf](terraform/modules/apigw/main.tf#L103) - **try**: en caso de que no haya objetos, se utiliza un objeto vacío. + [modules/s3/main.tf](terraform/modules/s3/main.tf#L35) + [organization/s3.tf](terraform/organization/s3.tf#L10) ### Meta-argumentos - **count** + [modules/s3/main.tf](terraform/modules/s3/main.tf#L18) - **depends_on** + [modules/apigw/main.tf](terraform/modules/apigw/main.tf#L78) + [organization/apigw.tf](terraform/organization/apigw.tf#L8) + [organization/cloudfront.tf](terraform/organization/cloudfront.tf#L3) + [organization/lambda.tf](terraform/organization/lambda.tf#L9) + [organization/sqs.tf](terraform/organization/sqs.tf#L8) - **for_each** + [modules/cloudfront/main.tf](terraform/modules/cloudfront/main.tf#L12) + [modules/dynamodb/main.tf](terraform/modules/dynamodb/main.tf#L12) + [modules/lambda/main.tf](terraform/modules/lambda/main.tf#L15) + [modules/s3/main.tf](terraform/modules/s3/main.tf#L35) + [organization/lambda.tf](terraform/organization/lambda.tf#L2) + [organization/s3.tf](terraform/organization/s3.tf#L2) - **lifecycle** + [modules/apigw/main.tf](terraform/modules/apigw/main.tf#L114) ## Diagrama de arquitectura deployada architecture ## Rúbrica
Alumno Legajo Participación
Bellver, Ezequiel 61268 25%
Burgos, Satiago Eduardo 55193 25%
Lo Coco, Santiago 61301 25%
Oillataguerre, Amparo 58714 25%
## Autores - Bellver, Ezequiel (61268) - Burgos, Santiago Eduardo (55193) - Lo Coco, Santiago (61301) - Oillataguerre, Amparo (58714)