En este tutorial, se diseña una arquitectura en capas haciendo uso de los servicios y componentes de Amazon Web Services (AWS). El tutorial muestra el diseño en 4 etapas teniendo en consideración la creación y configurar de los servicio Virtual Private Cloud (VPC), Servicio Elastic Load Balancer (ELB), Elastic Compute Cloud (EC2) y Amazon RDS (MySQL).
Tras completar el tutorial, habrá un diseño final que integra la arquitectura en capas sobre una subred pública y una privada en cada zona de disponibilidad de la VPC. En una zona de disponibilidad, la instancias de EC2 estarán en la subred pública y la instancia de base de datos estará en la subred privada.
Qué es una arquitectura en capas en AWS:
Una arquitectura en capas en AWS (Amazon Web Services) basicamente es la estrategia de diseño que se organiza y estructura los componentes de una aplicación en diferentes niveles o capas, cada capa cumple responsabilidades específicas permitiendo mejorar la modularidad, escalabilidad y mantenibilidad de la aplicación.
En una arquitectura en capas normalmente está conformada por las siguientes capas:
- Capa de presentación: Esta es la capa más alta y se encarga de la interacción del usuario. En AWS, podrías usar servicios como Amazon CloudFront y AWS Amplify para entregar contenido estático y dinámico a los usuarios finales.
- Capa de lógica de negocio: Aquí es donde se implementan las reglas y la lógica de la aplicación. AWS Lambda es una opción popular para ejecutar código sin aprovisionar o administrar servidores. También puedes usar Amazon API Gateway para crear, publicar, mantener, monitorear y proteger APIs.
- Capa de acceso a datos: Esta capa maneja las operaciones de lectura y escritura de datos. En AWS, podrías usar Amazon RDS (Relational Database Service) para bases de datos relacionales o Amazon DynamoDB para bases de datos NoSQL.
- Capa de datos: Esta capa es responsable de almacenar y recuperar los datos persistentes. Amazon S3 (Simple Storage Service) es una solución común para el almacenamiento de objetos.
Una arquitectura en capas permite una separación clara de responsabilidades y facilita el mantenimiento y la evolución de la aplicación. Cada capa puede escalarse de manera independiente según las necesidades, y los cambios en una capa no afectan directamente a las demás.
Servicios y componentes AWS:
- Virtual Private Cloud (VPC): Servicio de Amazon Web Services (AWS) que permite a los usuarios crear una red virtual privada en la nube de AWS. Con Amazon VPC, puedes definir y lanzar recursos de AWS en una red virtual aislada lógicamente, proporcionando un entorno seguro y controlado para tus aplicaciones.
- Elastic Load Balancer (ELB): Servicio de Amazon Web Services (AWS) que distribuye automáticamente el tráfico de aplicaciones entrantes entre múltiples destinos, como instancias de Amazon EC2, contenedores y direcciones IP, en una o más zonas de disponibilidad (AZs). ELB ayuda a mejorar la disponibilidad y la tolerancia a fallos de tus aplicaciones al equilibrar la carga de trabajo entre varios recursos.
- Internet Gateway: Componente de red que permite la comunicación entre tu VPC (Virtual Private Cloud) y la internet. Es un recurso escalable horizontalmente, redundante y altamente disponible que facilita el tráfico de entrada y salida de tu VPC.
- NAT Gateway: Servicio gestionado que permite a las instancias en una subred privada de una VPC (Virtual Private Cloud) conectarse a internet o a otros servicios de AWS, mientras que impide que el tráfico de internet inicie una conexión con esas instancias.
- Security Groups: Componente de red que actúa como un firewall virtual para controlar el tráfico entrante y saliente de tus instancias de Amazon EC2 y otros recursos. Los Security Groups proporcionan una manera sencilla y efectiva de gestionar la seguridad de tus aplicaciones en la nube.
- Elastic Compute Cloud (EC2): Servicio web de Amazon Web Services (AWS) que proporciona capacidad de computación escalable en la nube. EC2 permite a los usuarios lanzar y gestionar instancias de máquinas virtuales (VM) de manera fácil y flexible, adaptándose a las necesidades de procesamiento de las aplicaciones.
- Auto Scaling Group: En AWS es una característica de Amazon EC2 Auto Scaling que permite escalar automáticamente la capacidad de computación de tu aplicación hacia arriba o hacia abajo, en función de las condiciones que definas. Esto ayuda a asegurar que tienes el número adecuado de instancias EC2 disponibles para manejar la carga de tu aplicación sin intervención manual.
- Amazon Relational Database Service (RDS): Servicio de base de datos gestionada que facilita la configuración, operación y escalabilidad de bases de datos en la nube. Específicamente, para este tutorial implementaremos Amazon RDS para MySQL que permitirá ejecutar la instancia de la base de datos MySQL.
Creación y configuración Servicios AWS
1. Crear y configurar el Servicio Virtual Private Cloud (VPC)
Crea la Virtual Private Cloud (VPC) o también conocido como Red Virtual Privada; asimismo, crear las Subredes, Internet Gateway, Route Tables y NAT Gateway para aprovisionar la conexion de la arquitectura en capas.
1.1. Crear la Virtual Private Cloud (VPC) asignando el nombre de vpc-website-hp (principal) con un bloque CIDR de 10.0.0.0/16.
1.2. Crear el Internet Gateway de nombre de igw-website-hp, seguidamente asociar a la VPC principal vpc-website-hp.
El igw-website-hp permite la comunicación entre las instancias EC2 de la VPC principal y la comunicación con Internet.
1.3. Crear las sub-nets (subredes) públicas y privadas en la misma Availability Zone (zona de disponibilidad):
Subred | CIDR | Zona de Disponibilidad |
---|---|---|
public-subnet-za | 10.0.1.0/24 | us-east-1a |
public-subnet-zb | 10.0.2.0/24 | us-east-1b |
private-subnet-za | 10.0.3.0/24 | us-east-1a |
private-subnet-zb | 10.0.4.0/24 | us-east-1b |
private-subnet-za | 10.0.5.0/24 | us-east-1a |
private-subnet-zb | 10.0.6.0/24 | us-east-1b |
A las subnets privadas sólo se podrán acceder a través de una NAT Gateway.
1.4. Crear los route tables (tablas de ruteo) privada de nombre rtb-private-website-hp y pública de nombre rtb-public-website-hp.
Seguidamente asocia las subredes privadas (private-subnet-za y private-subnet-zb) a la tabla de ruteo privada rtb-private-website-hp, asimismo, asocia las subredes pública (public-subnet-za y public-subnet-zb) a la tabla de ruteo pública rtb-public-website-hp.
Finalmente, enrutar el tráfico a Internet a través de la puerta de enlace de Internet Gateway de nombre de igw-website-hp para nuestra tabla de ruteo pública rtb-public-website-hp.
1.5. Crear el NAT Gateway de tipo pública con la finalidad de que las instancias Elastic Compute Cloud (EC2) de la subred privada accedan a Internet.
Sólo la subred privada de nombre private-subnet-za accedará a Internet.
Seguidamente, editar la tabla de ruteo privada rtb-private-website-hp para utilizar (asignar) la puerta de enlace NAT para acceder a Internet.
En el siguiente diagrama preliminar se visualiza los servicios y componentes que aprovisiona la Virtual Private Cloud (VPC).
2. Crear y configurar el Servicio Elastic Load Balancer (ELB)
Para controlar el tráfico de la arquitectura en capas se crearán 2 Elastic Load Balancer (balaceadores de carga).2.1. Crear el primer balaceador de carga de tipo aplicación de nombre abl-internet-website-hp (Auto Scaling Group) para el Front-End (capa del sitio web - HTML, CSS, JavaScript o Bootstrap) que se conectará con la puerta de enlace (Internet Gateway igw-website-hp).
Seleccionar Internet-facing para la comunicación con Internet, seguidamente en Network seleccionar las sud redes publicas public-subnet-za y public-subnet-zb.
2.2. Crear el segundo balaceador de carga INTERNO de nombre abl-internal-website-hp (Auto Scaling Group) para el Back-End de carga interna (capa de la aplicación por ejemplos Python, PHP, C#, Vb.Net, Ruby y Otros).
Seleccionar Internal para la comunicación Interno, seguidamente en Network seleccionar las sud redes privadas private-subnet-za y private-subnet-zb.
2.3. Configurar los grupos de seguridad teniendo en cuenta los puertos que necesitará el sitio web.
- Crear el grupo de nombre sg-internet-website-hp y habilitar los puertos HTTP 80 y HTTPS 443 para la comunicación desde Internet.
- Crear el grupo de nombre sg-internal-website-hp y habilitar el puerto HTTPS 443 para la comunicación interna.
Definir el target group (grupo objetivo) de nombre tg-website.hp para establecer el tipo de instancias con soporte al balanceador de carga.
2.4. Asociar el Auto Scaling Group al Grupo de Seguridad, posteriormente se configuran las políticas de escalado de sobrecarga.
- Asociar el Auto Scaling Group de nombre abl-internet-website-hp al grupo de nombre sg-internet-website-hp para la comunicación a Internet (subnet pública).
- Asociar el Auto Scaling Group de nombre abl-internal-website-hp al grupo de nombre sg-internal-website-hp para la comunicación interna (subnet privada).
En el siguiente diagrama se visualiza los servicios y componentes que se aprovisiona a la Virtual Private Cloud (VPC) y al Elastic Load Balancer (ELB) con las configuraciones de seguridad y auto scaling.
3. Crear y configurar el Elastic Compute Cloud (EC2)
3.1. Crear o lanzar la primera instancia de Elastic Compute Cloud (EC2). Se necesita crear la plantilla de lanzamiento de nombre ec2-webserver-hp.
3.2. Crear o lanzar la segunda instancia de Elastic Compute Cloud (EC2). Se necesita crear la plantilla de lanzamiento de nombre ec2r-webserver-hp.
3.3. Configurar las políticas del Auto Scaling Groups teniendo en cuenta los porcentajes (%) de carga cuándo:- La CPU de la instancia ec2-webserver-hp sea mayor o igual al 80% se debe agrega una nueva instancia, reducir la escala cuando la CPU de la instancia ec2-webserver-hp sea menor o igual al 50%.
- La CPU de la instancia ec2-appserver-hp sea mayor o igual al 80% se debe agrega una nueva instancia, reducir la escala cuando la CPU de la instancia ec2-appserver-hp sea menor o igual al 50%.
En el siguiente diagrama se visualiza las Instancias de tipo aplicación Elastic Compute Cloud (EC2) desplegado según los Auto Scaling Groups.
- La CPU de la instancia ec2-webserver-hp sea mayor o igual al 80% se debe agrega una nueva instancia, reducir la escala cuando la CPU de la instancia ec2-webserver-hp sea menor o igual al 50%.
- La CPU de la instancia ec2-appserver-hp sea mayor o igual al 80% se debe agrega una nueva instancia, reducir la escala cuando la CPU de la instancia ec2-appserver-hp sea menor o igual al 50%.
4. Crear y configurar Amazon RDS (MySQL)
Crea las bases de datos de tipo MySQL en la subred privada.
4.1. Crear el grupo de nombre sg-internet-database-hp y habilitar el puerto 3306 para la comunicación interna.
4.2. Crear la instancia para la base de datos de nombre rds-ec2-primary-db-hp del tipo de motor MySQL y asigna a la subred privada de nombre private-subnet-za, y selecciona el grupo sg-internet-database-hp.
4.3. Crear la instancia para la base de datos de nombre rds-ec2-standby-db-hp del tipo de motor MySQL y asigna a la subred privada de nombre private-subnet-zb, y selecciona el grupo sg-internet-database-hp.
Enrutamiento:
Destino
Objetivo
Detalle
10.0.0.0/16
Local
Conexión local AWS
10.0.1.0/24
igw-website-hp
Conexión pública con salida a Intenet
10.0.2.0/24
igw-website-hp
Conexión pública con salida a Intenet
10.0.3.0/24
igw-website-hp, rtb-private-website-hp
Conexión privada con salida a Intenet
10.0.4.0/24
rtb-private-website-hp
Conexión privada sin salida a Intenet
10.0.5.0/24
rtb-private-website-hp
Conexión privada sin salida a Intenet
10.0.6.0/24
rtb-private-website-hp
Conexión privada sin salida a Intenet
Destino | Objetivo | Detalle |
---|---|---|
10.0.0.0/16 | Local | Conexión local AWS |
10.0.1.0/24 | igw-website-hp | Conexión pública con salida a Intenet |
10.0.2.0/24 | igw-website-hp | Conexión pública con salida a Intenet |
10.0.3.0/24 | igw-website-hp, rtb-private-website-hp | Conexión privada con salida a Intenet |
10.0.4.0/24 | rtb-private-website-hp | Conexión privada sin salida a Intenet |
10.0.5.0/24 | rtb-private-website-hp | Conexión privada sin salida a Intenet |
10.0.6.0/24 | rtb-private-website-hp | Conexión privada sin salida a Intenet |
Terminología:
- CIDR: Classless Inter-Domain Routing o también conocido como enrutamiento entre dominios sin clases.
- RDS: Relational Database Service o también conocido como bases de datos relacionales.
Referencia:
- Aspectos básicos de redes
- Bloques de CIDR de VPC
- Configurar tablas de enrutamiento
- Gateways NAT
- Tablas de enrutamiento de subred
- Reglas del grupo de seguridad
- Controlar el tráfico hacia los recursos de AWS mediante grupos de seguridad
eRELEASESAWS250314
0 Comentarios