Requisitos previos
Tener una cuenta en AWS
Tener Terraform instalado en la máquina local
Conocimientos básicos de AWS y Terraform
Configuración de la cuenta de AWS
Antes de empezar, debemos configurar nuestra cuenta de AWS para que podamos utilizarla con Terraform. Para hacer esto, debemos crear un nuevo grupo de seguridad y una nueva VPC.
Crear un nuevo grupo de seguridad
bash
> [!IMPORTANT]
> Asegúrese de que la cuenta de AWS tenga permisos adecuados para crear recursos.
hcl
resource "aws_security_group" "mi_grupo_seguridad" {
name = "mi_grupo_seguridad"
description = "Mi grupo de seguridad para la VPC"
# Reglas de entrada
ingress {
from_port = 22
to_port = 22
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
# Reglas de salida
egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
}
}
Crear una nueva VPC
hcl
resource "aws_vpc" "mi_vpc" {
cidr_block = "10.0.0.0/16"
tags = {
Name = "Mi VPC"
}
}
Creación de la red subyacente
Una vez que tenemos la VPC creada, podemos crear la red subyacente. Para hacer esto, debemos crear una nueva subred y una nueva tabla de ruteo.
Crear una nueva subred
hcl
resource "aws_subnet" "mi_subred" {
cidr_block = "10.0.1.0/24"
vpc_id = aws_vpc.mi_vpc.id
availability_zone = "us-west-2a"
tags = {
Name = "Mi subred"
}
}
Crear una nueva tabla de ruteo
hcl
resource "aws_route_table" "mi_tabla_ruteo" {
vpc_id = aws_vpc.mi_vpc.id
tags = {
Name = "Mi tabla de ruteo"
}
}
Configuración de la red de seguridad
Una vez que tenemos la red subyacente creada, podemos configurar la red de seguridad. Para hacer esto, debemos crear una nueva regla de seguridad y asociarla a la subred.
Crear una nueva regla de seguridad
hcl
resource "aws_security_group_rule" "mi_regla_seguridad" {
type = "ingress"
from_port = 22
to_port = 22
protocol = "tcp"
source_security_group_id = aws_security_group.mi_grupo_seguridad.id
security_group_id = aws_security_group.mi_grupo_seguridad.id
}
Asociar la regla de seguridad a la subred
hcl
resource "aws_route_table_association" "mi_asociacion_ruteo" {
subnet_id = aws_subnet.mi_subred.id
route_table_id = aws_route_table.mi_tabla_ruteo.id
}
Configuración de la red de datos
Una vez que tenemos la red de seguridad configurada, podemos configurar la red de datos. Para hacer esto, debemos crear una nueva instancia de EC2 y asociarla a la subred.
Crear una nueva instancia de EC2
hcl
resource "aws_instance" "mi_instancia_ec2" {
ami = "ami-abc123"
instance_type = "t2.micro"
vpc_security_group_ids = [aws_security_group.mi_grupo_seguridad.id]
subnet_id = aws_subnet.mi_subred.id
}
Asociar la instancia de EC2 a la subred
hcl
resource "aws_network_interface_attachment" "mi_asociacion_red" {
instance_id = aws_instance.mi_instancia_ec2.id
network_interface_id = aws_network_interface.mi_red.id
device_index = 0
}
Configuración de la red de almacenamiento
Una vez que tenemos la red de datos configurada, podemos configurar la red de almacenamiento. Para hacer esto, debemos crear un nuevo volumen de EBS y asociarlo a la instancia de EC2.
Crear un nuevo volumen de EBS
hcl
resource "aws_ebs_volume" "mi_volumen_ebs" {
availability_zone = "us-west-2a"
size = 10
}
Asociar el volumen de EBS a la instancia de EC2
hcl
resource "aws_volume_attachment" "mi_asociacion_ebs" {
device_name = "/dev/sdh"
volume_id = aws_ebs_volume.mi_volumen_ebs.id
instance_id = aws_instance.mi_instancia_ec2.id
}
Configuración de la red de redirección
Una vez que tenemos la red de almacenamiento configurada, podemos configurar la red de redirección. Para hacer esto, debemos crear un nuevo grupo de redirección y asociarlo a la instancia de EC2.
Crear un nuevo grupo de redirección
hcl
resource "aws_lb_target_group" "mi_grupo_redireccion" {
name = "mi-grupo-redireccion"
port = 80
protocol = "HTTP"
vpc_id = aws_vpc.mi_vpc.id
}
Asociar el grupo de redirección a la instancia de EC2
hcl
resource "aws_lb_target_group_attachment" "mi_asociacion_redireccion" {
target_group_arn = aws_lb_target_group.mi_grupo_redireccion.arn
target_id = aws_instance.mi_instancia_ec2.id
port = 80
}
Configuración de la red de balanceo
Una vez que tenemos la red de redirección configurada, podemos configurar la red de balanceo. Para hacer esto, debemos crear un nuevo grupo de balanceo y asociarlo a la instancia de EC2.
Crear un nuevo grupo de balanceo
hcl
resource "aws_lb" "mi_grupo_balanceo" {
name = "mi-grupo-balanceo"
internal = false
load_balancer_type = "application"
security_groups = [aws_security_group.mi_grupo_seguridad.id]
subnets = [aws_subnet.mi_subred.id]
}
Asociar el grupo de balanceo a la instancia de EC2
hcl
resource "aws_lb_listener" "mi_asociacion_balanceo" {
load_balancer_arn = aws_lb.mi_grupo_balanceo.arn
protocol = "HTTP"
port = 80
default_action {
type = "forward"
target_group_arn = aws_lb_target_group.mi_grupo_redireccion.arn
}
}
Configuración de la red de monitoreo
Una vez que tenemos la red de balanceo configurada, podemos configurar la red de monitoreo. Para hacer esto, debemos crear un nuevo grupo de monitoreo y asociarlo a la instancia de EC2.
Crear un nuevo grupo de monitoreo
hcl
resource "aws_cloudwatch_metric_alarm" "mi_grupo_monitoreo" {
alarm_name = "mi-grupo-monitoreo"
comparison_operator = "GreaterThanOrEqualToThreshold"
evaluation_periods = "1"
metric_name = "CPUUtilization"
namespace = "AWS/EC2"
period = "300"
statistic = "Average"
threshold = "80"
actions_enabled = true
alarm_actions = [aws_sns_topic.mi_topic.arn]
}
Asociar el grupo de monitoreo a la instancia de EC2
hcl
resource "aws_sns_topic" "mi_topic" {
name = "mi-topic"
}
Conclusión
En este artículo, hemos visto cómo diseñar una red de VPC en AWS con Terraform. Hemos creado una nueva VPC, una nueva subred, una nueva tabla de ruteo, una nueva regla de seguridad, una nueva instancia de EC2, un nuevo volumen de EBS, un nuevo grupo de redirección, un nuevo grupo de balanceo y un nuevo grupo de monitoreo.