You are on page 1of 9

Development Strategy and Resource Plan

February 19th, 2024

Subject: TC3004B.101 - Software Development

Name ID

Andrea San Martin Vital A00833676

David Santiago Vieyra García A01656030

Dulce Daniela García Ruiz A01748013

Emilia Salazar Leipen A01781931

Fernanda Osorio Arroyo A01026502

Francisco Martinez Gallardo Lascurain A01782250

Gabriel Rodríguez De Los Reyes A01027384

Ian Holender Mariaca A01026295

Jose Daniel Rodríguez Cruz A01781933

Luis Carlos Rico Almada A01252831

Mariel Gómez Gutiérrez A01275607

Pablo Banzo Prida A01782031

Paula Verdugo Márquez A01026218

Santiago Rodríguez Palomo A01025232


Instituto Tecnológico y de Estudios
Superiores de Monterrey

1. Development Strategy

Based on the client’s requirements, both functional and restrictions, a cloud architecture was
designed that achieves both the purpose of the project, and facilitates a viable development
roadmap. The objective of defining the architecture and describing the services that will be used
is to have a clear and unified vision of how all of the individual components come together to
achieve all requirements. The main guidelines for the project is to utilize the architecture already
available through AWS, and using a serverless approach since it offers scalability and is cost
efficient for a project this size.

1.1 Architecture Design

TC3004B.101 - Team #1
1
Instituto Tecnológico y de Estudios
Superiores de Monterrey

TC3004B.101 - Team #1
2
Instituto Tecnológico y de Estudios
Superiores de Monterrey

1.2 Description of Services


The proposed architecture incorporates a variety of services, some managed by AWS Amplify
and others by Amazon Connect, to create a robust and scalable web application. The frontend,
developed with NextJS, will be deployed via AWS Amplify Hosting. This service provides
automatic hosting on a domain, using a CloudFront Reverse Proxy with SSL for secure, global
distribution. Additionally, Amplify Hosting facilitates CI/CD by integrating with GitHub,
streamlining the deployment process.

User authentication and role management will be handled by AWS Cognito, utilizing "user
groups" to differentiate access levels. Cognito also uses Amazon SES (Simple Email Service) to
send transactional emails necessary for account ownership validation and password resets. The
frontend will interact with backend services through a GraphQL API, deployed and authenticated
via AWS AppSync and the Cognito User pool, respectively. This API connects to a DynamoDB
database, also deployed by Amplify, serving as the application's No-SQL internal storage
solution.

For non-database storage needs, such as documents or user profile pictures, an


Amplify-generated S3 bucket will be used. This bucket enforces the access levels and protections
defined by Cognito, ensuring secure storage.

Serverless functions for the NextJS project’s API routes will be automatically deployed as AWS
Lambda functions. These functions, managed via API Gateway, provide cost-effective, serverless
computation, eliminating the need for a traditional server. These Lambda functions will securely
interact with the Amazon Connect instance's API to fetch real-time data for dashboard insights.

AWS SNS (Simple Notification Service) will be utilized to publish notifications from the
backend, which are then subscribed to and received in real-time on the frontend. This system
enables the tracking of issue information through metadata included in the notifications.

TC3004B.101 - Team #1
3
Instituto Tecnológico y de Estudios
Superiores de Monterrey

Some of the backend services that will emit alerts are automatically deployed by Amazon
Connect, including a data lake in which we can analyze call data and another (Connect Managed)
S3 bucket for call transcripts and call recordings, along with Lambdas that will be called on
relevant moments of the calls to emit alerts into SNS.

2. Resource Plan

This section will outline the technological resources that will be used for the development
process. It is crucial that all of the developers are aligned on this topic, to avoid having issues
with versions or tools used, and to facilitate the process of finding an error with incompatible
resources. Furthermore, information resources will be outlined, more specifically, how the API
will be documented. Since our architecture is mostly a consumer of endpoints, and Amazon
Amplify generates the endpoints, it is hard to define the endpoints before the development
process. Given this, an example of how to document the endpoints will be presented, with the
goal of unifying how the API will be documented during the development process.

2.1 Technological Resources


● Software:
○ Javascript ES6: Language that will be used for the frontend. This language was
chosen since it is one of the most widely used for web development, so it avoids
compatibility issues on different environments.
○ Node JS 18: Javascript runtime environment.
○ NPM 10.5.0: Default package manager for Node JS. Using NPM means that
everyone will be able to have the same dependencies and the same versions,
unifying the environments and avoiding compatibility issues.
○ Next JS 14: React framework for the frontend. It offers advantages such as server
side rendering, static site generation improving performance, enhanced developer
experience because of hot reloading and ease of deployment.

TC3004B.101 - Team #1
4
Instituto Tecnológico y de Estudios
Superiores de Monterrey
○ Tailwind CSS v3: CSS framework that simplifies frontend design by styling
directly in the React component, and using global design choices. This will be
paired with Amplify UI components.
○ Python 3.10: Python is a language that works well to develop using AWS services
when paired with Boto3. As well as offering a shorter invocation time, reducing
latency compared to other runtimes.
○ Boto3 1.34: AWS SDK for Python: Boto3 is the AWS SDK for Python. It enables
Python developers to create, configure, and manage AWS services directly from
Python scripts.
○ Cypress 13.6.6: Testing framework: Cypress is a modern, front-end testing
framework designed for web applications. Its main use is to write and automate
end-to-end tests in a user-friendly and efficient manner.
○ Amplify generated GitHub actions for CI/CD: GitHub Actions are automation
tools that can be configured to automate software workflows. Amplify generated
GitHub Actions refers to workflows specifically created for AWS Amplify
applications. In your project, these actions would be used for continuous
integration and continuous deployment (CI/CD)
○ Git 2.44.0 for version control, paired with GitHub: Git is a distributed version
control system. In the project, it's used for tracking changes in source code during
software development, facilitating collaboration between several developers.
○ Amplify-CLI 12.10: The Amplify Command Line Interface (CLI) is a tool chain
for simplifying serverless web development with AWS. Amplify-CLI will be used
to create, configure, and manage the AWS backend for the application.

TC3004B.101 - Team #1
5
Instituto Tecnológico y de Estudios
Superiores de Monterrey
2.2 Information Resources
Nombre del PreSignUp()
Servicio

Descripción Comprueba la validez de las credenciales verificando su existencia en la


base de datos

- Se ingrese un usuario que sea un correo electrónico “@”


- Se verifica que el correo proporcionado este dentro de la lista
de usuarios autorizados

Método HTTP POST

URL arn:aws:lambda:us-east-1:123456789:function:amplify123456PreSignup-pr
odu

Input (JSON) {
"request": {
"userAttributes": {
"string": "string",
. . .
},
"validationData": {
"string": "string",
. . .
},
"clientMetadata": {
"string": "string",
. . .
}
},
"response": {
"autoVerifyEmail": "boolean"
},

Descripción Input userAttributes: One or more name-value pairs representing user


attributes. The attribute names are the keys.

TC3004B.101 - Team #1
6
Instituto Tecnológico y de Estudios
Superiores de Monterrey

validationData: One or more key-value pairs with user attribute


data that your app passed to Amazon Cognito in the request to
create a new user.

clientMetadata: One or more key-value pairs that you can provide


as custom input to the Lambda function that you specify for the pre
sign-up trigger.

Respuesta (JSON) {
"request": {
"userAttributes": {
"string": "string",
. . .
},
"validationData": {
"string": "string",
. . .
},
"clientMetadata": {
"string": "string",
. . .
}
},
"response": {
"autoVerifyEmail": "boolean"
},
"error": {
"message": "string",
"code": "int"
}
}

TC3004B.101 - Team #1
7
Instituto Tecnológico y de Estudios
Superiores de Monterrey

Descripción La respuesta se divide en dos sub documentos como se describen a


Respuesta continuación:

data: Si el usuario se encuentra en la lista de acceso se responde el


mismo event dado que este se usará para dar de alta al usuario dentro
de cognito.

response: Se utiliza para definir si un usuario específico ya fue pre


autenticado

error: Código y mensaje de error.


● message - Mensaje de error o información.
● code - Código del error o la información.

Códigos de error HTTP RESPONSE STATUS CODES.

Informational responses: 100-199


Successful responses: 200-299
Redirection messages: 300-399
Client error responses: 400-499
Server error responses: 500-599

TC3004B.101 - Team #1
8

You might also like