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
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
- 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
.
├── cloudinfrastructure.yaml # Template de CloudFormation
├── imgCloud.png # Diagrama de la arquitectura
└── README.md # Este archivo
- Ve a CloudFormation en la consola de AWS
- Haz clic en Crear Stack
- Selecciona Cargar archivo de plantilla
- Carga el archivo
cloudinfrastructure.yaml - Haz clic en Siguiente
- Proporciona un nombre para el stack
- En los parámetros, selecciona tu KeyPairName existente
- Haz clic en Siguiente dos veces
- Revisa los cambios y haz clic en Crear Stack
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ámetro | Descripción | Requerido |
|---|---|---|
KeyPairName |
Nombre del par de claves EC2 existente para acceso SSH | Sí |
- 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
- 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)
- WebAppSecurityGroup:
- Ingress: HTTP (80), SSH (22)
- Egress: Todo permitido
- DatabaseSecurityGroup:
- Ingress: MySQL (3306) desde WebAppSecurityGroup
- Egress: Todo permitido
- AppServerInstance: EC2 t2.micro ejecutando:
- Amazon Linux 2
- Apache HTTP Server
- PHP
- MySQL Client
- Bootcamp App descargada desde S3
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
| Aspecto | Valor |
|---|---|
| AMI | Amazon Linux 2 |
| Tipo de Instancia | t2.micro |
| Volumen EBS | 20 GB (gp2) |
| Ubicación | Subred Pública |
| Security Group | WebAppSecurityGroup |
Una vez desplegado el stack:
-
Obtén la IP pública de la instancia desde los outputs del stack
-
Accede a la aplicación:
http://<AppServerPublicIP> -
Para SSH:
ssh -i /path/to/your-key-pair.pem ec2-user@<AppServerPublicIP>
Para agregar una instancia RDS MySQL en la subred privada:
- Crea una instancia RDS MySQL en la misma VPC
- Asigna el
DatabaseSecurityGroupa la instancia RDS - Coloca la instancia en la subred privada
- Configura la aplicación con las credenciales de RDS en
/var/www/html/rds.conf.php
Para eliminar todos los recursos creados:
- Ve a CloudFormation
- Selecciona el stack
- Haz clic en Eliminar
- Confirma la eliminación
aws cloudformation delete-stack \
--stack-name my-infrastructure \
--region us-east-1Este 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
- 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
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 22
ToPort: 22
CidrIp: YOUR_IP/32
Description: Allow SSH from specific IPAnthony Luis Rosas Pisco
