An open API service indexing awesome lists of open source software.

https://github.com/iliangithub/Proyecto_AWS_IaC-monitoring-Web-PaaS-

🔵PART 2
https://github.com/iliangithub/Proyecto_AWS_IaC-monitoring-Web-PaaS-

aws boostrap centreon containers docker docker-compose flask grafana prometheus terraform

Last synced: about 1 month ago
JSON representation

🔵PART 2

Awesome Lists containing this project

README

        

# Project AWS, Terraform, Web, PaaS y Monitorización.
# 1.0 Introduction.

The intention of this project, is the simulate a real life, enterprise situation, what a DevOps could be doing on a Daily Basis, aswell as applying as much tools and technology as posible, making special enphasis
on automating as much as I possibly can, and to make it rigurous.

Consistirá en desplegar en AWS, la página web que el cliente nos ha pedido hacer. Está pagina Web ha sido previamente creada, gracias a nuestro entorno de desarrollo que he creado en: https://github.com/iliangithub/Proyecto_entorno_desarrollo_docker-compose .El despliegue de la página Web, será realizado utilizando Terraform como IaaC, de hecho toda la infraestructura, será hecha usando Terraform, la página será monitrizada utilizando, Grafana, Centreon y Prometheus, estas herramientas, se encontrarán en instancias EC2, gracias a Terraform. La aplicación en sí deberá de ser desplegada en contenedores y orquestrada por Kubernetes.

## 1.1 Resumen + Arquitectura:

El primer paso es montar la Infraestructura, para ello, vamos a utilizar Terraform.

![Proyecto full cosas y herramientas (2)](https://github.com/user-attachments/assets/0608a855-c462-4de0-abd7-90eb652d4cf8)

Entonces, sabiendo esto, ahora la estructura de directorios es la siguiente:

```
📂 terraform-eks/
│── main.tf # Archivo principal
│── variables.tf # Variables reutilizables
│── versions.tf # Versiones de Terraform
│── providers.tf # Configuración de AWS
│── 📂 sub/ # Carpeta con los módulos
│ ├── 📂 vpc/ # Módulo de VPC
│ │ ├── main.tf
│ │ ├── variables.tf
│ │ ├── outputs.tf
│ ├── 📂 eks/ # Módulo de EKS
│ │ ├── main.tf
│ │ ├── variables.tf
│ │ ├── outputs.tf
│ ├── 📂 database/ # Módulo de la Base de Datos
│ │ ├── main.tf
│ │ ├── variables.tf
│ │ ├── outputs.tf
│ ├── 📂 webapp/ # Módulo de la WebApp PHP
│ │ ├── main.tf
│ │ ├── variables.tf
│ │ ├── outputs.tf
│ ├── 📂 monitoring/ # Módulo de Monitoreo
│ ├── main.tf
│ ├── variables.tf
│ ├── outputs.tf
```

El clúster en sí, va a tener la siguiente arquitectura:

## 1.2 ¿Por qué he usado el Stack que he usado para este proyecto?

### 1.2.1 AWS

### 1.2.2 Terraform:
- ✅ Automatización: Provisión de infraestructura de manera repetible y automatizada.
- ✅ Infraestructura como Código: Control de versiones, revisiones y modularidad.
- ✅ Gestión de Estado: Mantiene un archivo de estado (terraform.tfstate) para rastrear recursos creados.
- ✅ Multi-nube: Puede usarse con otras nubes (Azure, Google Cloud, etc.).

### 1.2.3 Clúster de Kubernetes, EKS (AWS):

### 1.2.4 RDS (Relational Database Service):

Partiendo de la base de que la base de datos, NO puede estar dentro del clúster de Kubernetes. Por la simple razón de que Kubernetes puede perfectamente, matar/destruir Pods, y si tenemos la base de datos en el clúster y encima la BD tiene datos, pues lo perderíamos y eso es grave.

### 1.2.5 Prometheus, Centreon, Grafana:

### 1.2.6 Balanceador de Carga NGINX:

- ✅ Más control sobre el tráfico (puedes definir reglas avanzadas).
- ✅ Evitas costos de ELB (porque ELB cobra por tráfico y horas activas).
- ✅ Puedes configurar rate limiting, redirecciones, etc.

### 1.2.7 AWS Cognito.

Para autenticar:
En arquitecturas de microservicios, por ejemplo, se utiliza autenticación (a través de herramientas como AWS Cognito o Keycloak) para asegurar que cada servicio interactúe de manera segura y que los usuarios tengan acceso solo a las partes del sistema que les corresponden.

### 1.2.8 AWS SQS.

### 1.2.9 Backend: NodeJS or Java (Springboot).

En mi caso, voy a utilizar NodeJS. Ya que en LinkedIn, veo constantemente ofertas de NodeJS o Java, en este caso, como manejo JavaScript, aunque sea un poco, pues quiero hacerla así.
Java sin embargo, pues es un lenguaje que no he utilizado jamás.

### 1.2.10 Frontend, Nginx + React:

Estoy prácticamente obligado a usar entonces React, debido a que estoy usando NodeJS, el stack LAMP, aquí ya no puedo utilizarlo.

No voy a utilizar Apache.

### 1.2.11 AWS API Gateway.

## 1.3 Prerequisitos.

- Tener el AWS CLI instalado: https://awscli.amazonaws.com/AWSCLIV2.msi
- Tener Terraform.
- Cuenta de AWS.

# 2.0 Infraestructura con Terraform: