Skip to content

Infraestructura AWS con CloudFormation - VPC, subnets públicas/privadas, security groups y EC2 con Apache, PHP y MySQL client. Template listo para desplegar una aplicación web escalable en AWS.

Notifications You must be signed in to change notification settings

AnthonyGit1/CloudFormation

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 

Repository files navigation

AWS CloudFormation Infrastructure

AWS Infrastructure Diagram

Descripción

Este proyecto contiene un template de CloudFormation que despliega una infraestructura completa en AWS con los siguientes componentes:

  • VPC (Virtual Private Cloud) con CIDR 10.0.0.0/16
  • Subred Pública (10.0.0.0/24) para la aplicación web
  • Subred Privada (10.0.2.0/23) para la base de datos
  • Internet Gateway para acceso a internet
  • Security Groups configurados para web y base de datos
  • Instancia EC2 con servidor Apache, PHP y MySQL client
  • Tablas de Ruteo públicas y privadas

Arquitectura

La arquitectura implementa las mejores prácticas de seguridad de AWS:

  • La aplicación web se ejecuta en una instancia EC2 en la subred pública
  • La base de datos MySQL reside en la subred privada
  • Los security groups restringen el tráfico entre componentes
  • Solo el tráfico HTTP/SSH autorizado ingresa desde internet

Requisitos

  • Cuenta de AWS con permisos suficientes
  • Par de claves EC2 existente en la región donde despliegas el stack
  • Acceso a AWS Management Console o AWS CLI

Contenido del Repositorio

.
├── cloudinfrastructure.yaml    # Template de CloudFormation
├── imgCloud.png               # Diagrama de la arquitectura
└── README.md                  # Este archivo

Instrucciones de Despliegue

Opción 1: AWS Management Console

  1. Ve a CloudFormation en la consola de AWS
  2. Haz clic en Crear Stack
  3. Selecciona Cargar archivo de plantilla
  4. Carga el archivo cloudinfrastructure.yaml
  5. Haz clic en Siguiente
  6. Proporciona un nombre para el stack
  7. En los parámetros, selecciona tu KeyPairName existente
  8. Haz clic en Siguiente dos veces
  9. Revisa los cambios y haz clic en Crear Stack

Opción 2: AWS CLI

aws cloudformation create-stack \
  --stack-name my-infrastructure \
  --template-body file://cloudinfrastructure.yaml \
  --parameters ParameterKey=KeyPairName,ParameterValue=your-key-pair-name \
  --region us-east-1

Parámetros

Parámetro Descripción Requerido
KeyPairName Nombre del par de claves EC2 existente para acceso SSH

Recursos Creados

Red

  • MyVPC: VPC principal (10.0.0.0/16)
  • PublicSubnet: Subred pública (10.0.0.0/24)
  • PrivateSubnet: Subred privada (10.0.2.0/23)
  • MyInternetGateway: Gateway para acceso a internet

Ruteo

  • PublicRouteTable: Tabla de rutas para subred pública con ruta 0.0.0.0/0 → IGW
  • PrivateRouteTable: Tabla de rutas para subred privada (solo tráfico local)

Seguridad

  • WebAppSecurityGroup:
    • Ingress: HTTP (80), SSH (22)
    • Egress: Todo permitido
  • DatabaseSecurityGroup:
    • Ingress: MySQL (3306) desde WebAppSecurityGroup
    • Egress: Todo permitido

Computación

  • AppServerInstance: EC2 t2.micro ejecutando:
    • Amazon Linux 2
    • Apache HTTP Server
    • PHP
    • MySQL Client
    • Bootcamp App descargada desde S3

Salidas

El stack proporciona las siguientes salidas:

- VPCId: ID de la VPC
- PublicSubnetId: ID de la subred pública
- PrivateSubnetId: ID de la subred privada
- WebAppSecurityGroupId: ID del security group de la web
- DatabaseSecurityGroupId: ID del security group de la BD
- AppServerInstanceId: ID de la instancia EC2
- AppServerPublicIP: IP pública de la aplicación
- AppServerPrivateIP: IP privada de la aplicación

Especificaciones de la Instancia EC2

Aspecto Valor
AMI Amazon Linux 2
Tipo de Instancia t2.micro
Volumen EBS 20 GB (gp2)
Ubicación Subred Pública
Security Group WebAppSecurityGroup

Acceso a la Aplicación

Una vez desplegado el stack:

  1. Obtén la IP pública de la instancia desde los outputs del stack

  2. Accede a la aplicación:

    http://<AppServerPublicIP>
    
  3. Para SSH:

    ssh -i /path/to/your-key-pair.pem ec2-user@<AppServerPublicIP>

Configuración de la Base de Datos

Para agregar una instancia RDS MySQL en la subred privada:

  1. Crea una instancia RDS MySQL en la misma VPC
  2. Asigna el DatabaseSecurityGroup a la instancia RDS
  3. Coloca la instancia en la subred privada
  4. Configura la aplicación con las credenciales de RDS en /var/www/html/rds.conf.php

Eliminación del Stack

Para eliminar todos los recursos creados:

Opción 1: AWS Management Console

  1. Ve a CloudFormation
  2. Selecciona el stack
  3. Haz clic en Eliminar
  4. Confirma la eliminación

Opción 2: AWS CLI

aws cloudformation delete-stack \
  --stack-name my-infrastructure \
  --region us-east-1

Costos Estimados

Este template utiliza servicios dentro del AWS Free Tier cuando sea posible:

  • VPC, subnets, security groups: Sin costo
  • Internet Gateway: Sin costo
  • EC2 t2.micro: Incluido en el Free Tier (12 meses)
  • Transferencia de datos: Cargos aplican fuera del Free Tier

Mejoras Futuras

  • Agregar instancia RDS MySQL en subnet privada
  • Implementar NAT Gateway para tráfico saliente desde subred privada
  • Añadir load balancer para alta disponibilidad
  • Configurar autoscaling
  • Implementar CloudWatch para monitoreo

Notas de Seguridad

⚠️ Advertencia: Las reglas de seguridad actual permiten SSH desde cualquier dirección IP (0.0.0.0/0). Para producción, restringe esto a tu IP específica:

SecurityGroupIngress:
  - IpProtocol: tcp
    FromPort: 22
    ToPort: 22
    CidrIp: YOUR_IP/32
    Description: Allow SSH from specific IP

Autor

Anthony Luis Rosas Pisco

About

Infraestructura AWS con CloudFormation - VPC, subnets públicas/privadas, security groups y EC2 con Apache, PHP y MySQL client. Template listo para desplegar una aplicación web escalable en AWS.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published