Construyendo una VPC de AWS con Terraform Paso a Paso

Si necesitas configurar Amazon Virtual Private Cloud (VPC), puedes hacerlo a través de la Consola de Administración de AWS, ¡pero automatizarlo es mucho más divertido! En un escenario de DevOps, construir servicios de AWS mediante herramientas como Terraform es un enfoque más escalable y automatizado para la provisión de recursos en la nube.

En este tutorial, aprenderás cómo construir y ejecutar una configuración de Terraform para crear una VPC de Terraform desde cero.

Prerrequisitos

Esta publicación será un tutorial paso a paso. Si deseas seguirlo, asegúrate de tener lo siguiente:

  • Una cuenta de AWS
  • Terraform – Este tutorial utilizará Terraform v0.14.9 ejecutándose en Ubuntu 18.04.5 LTS, pero cualquier sistema operativo con Terraform debería funcionar.
  • A code editor – Even though you can use any text editor to work with Terraform configuration files, you should have one that understands the HCL Terraform language. Try out Visual Studio (VS) Code.

Comprensión de las VPC de AWS

La nube de AWS tiene docenas de servicios variados, desde computación, almacenamiento, redes y más. Cada uno de estos servicios puede comunicarse entre sí como lo hacen los servicios de un centro de datos local. Sin embargo, cada uno de estos servicios es independiente entre sí y no necesariamente está aislado de otros servicios. El VPC de AWS cambia eso.

Un VPC de AWS es una red única que te permite lanzar servicios de AWS dentro de una red aislada única. Técnicamente, un VPC de AWS es casi lo mismo que poseer un centro de datos, pero con beneficios adicionales incorporados de escalabilidad, tolerancia a fallos, almacenamiento ilimitado, etc.

AWS VPC architecture

Los VPC de AWS están restringidos por región. No puedes tener un VPC que abarque varias regiones, con hasta cinco VPC admitidos por región.

Creación de la Configuración de Terraform para un VPC de AWS

Basta de charla, ¡vamos a construir!

1. Para empezar, crea una carpeta para almacenar tus archivos de configuración de Terraform. Este tutorial creará una carpeta llamada terraform-vpc-demo en tu directorio de inicio.

mkdir ~/terraform-vpc-demo
 cd ~/terraform-vpc-demo

2. Abre tu editor de código favorito y copia/pega la siguiente configuración que ya está creada para ti, guardando el archivo como main.tf dentro del directorio ~/terraform-vpc-demo. La información sobre cada recurso a crear está en línea.

El archivo main.tf contiene todos los recursos que deben aprovisionarse.

Terraform utiliza varios tipos diferentes de archivos de configuración. Cada archivo está escrito en formato de texto plano o formato JSON. Tienen una convención de nomenclatura específica, ya sea en formato .tf o formato .tfjson.

La configuración de Terraform a continuación:

  • Crea una VPC
  • Crea una puerta de enlace a Internet y la adjunta a la VPC para permitir que el tráfico dentro de la VPC sea alcanzable desde el mundo exterior.
  • Crea subredes públicas y privadas

Las subredes son redes dentro de redes. Están diseñadas para ayudar a que el flujo de tráfico de red sea más eficiente y proporcionar ‘trozos’ más pequeños y manejables de direcciones IP

  • Crea una tabla de rutas para las subredes públicas y privadas y asocia la tabla con ambas subredes
  • Crea una puerta de enlace NAT para permitir que las subredes privadas se conecten a Internet sin necesidad de asignar una dirección IP externa enrutable a cada recurso.
Create the VPC
 resource "aws_vpc" "Main" {                # Creando VPC aquí
   cidr_block       = var.main_vpc_cidr     # Definiendo el bloque CIDR, utiliza 10.0.0.0/24 para demostración
   instance_tenancy = "default"
 }
 Create Internet Gateway and attach it to VPC
 resource "aws_internet_gateway" "IGW" {    # Creando Puerta de enlace a Internet
    vpc_id =  aws_vpc.Main.id               # vpc_id se generará después de crear la VPC
 }
 Create a Public Subnets.
 resource "aws_subnet" "publicsubnets" {    # Creando Subredes Públicas
   vpc_id =  aws_vpc.Main.id
   cidr_block = "${var.public_subnets}"        # Bloque CIDR de subredes públicas
 }
 Create a Private Subnet                   # Creando Subredes Privadas
 resource "aws_subnet" "privatesubnets" {
   vpc_id =  aws_vpc.Main.id
   cidr_block = "${var.private_subnets}"          # Bloque CIDR de subredes privadas
 }
 Route table for Public Subnet's
 resource "aws_route_table" "PublicRT" {    # Creando RT para Subred Pública
    vpc_id =  aws_vpc.Main.id
         route {
    cidr_block = "0.0.0.0/0"               # El tráfico desde la Subred Pública llega a Internet a través de la Puerta de enlace a Internet
    gateway_id = aws_internet_gateway.IGW.id
     }
 }
 Route table for Private Subnet's
 resource "aws_route_table" "PrivateRT" {    # Creando RT para Subred Privada
   vpc_id = aws_vpc.Main.id
   route {
   cidr_block = "0.0.0.0/0"             # El tráfico desde la Subred Privada llega a Internet a través de la Puerta de enlace NAT
   nat_gateway_id = aws_nat_gateway.NATgw.id
   }
 }
 Route table Association with Public Subnet's
 resource "aws_route_table_association" "PublicRTassociation" {
    subnet_id = aws_subnet.publicsubnets.id
    route_table_id = aws_route_table.PublicRT.id
 }
 Route table Association with Private Subnet's
 resource "aws_route_table_association" "PrivateRTassociation" {
    subnet_id = aws_subnet.privatesubnets.id
    route_table_id = aws_route_table.PrivateRT.id
 }
 resource "aws_eip" "nateIP" {
   vpc   = true
 }
 Creating the NAT Gateway using subnet_id and allocation_id
 resource "aws_nat_gateway" "NATgw" {
   allocation_id = aws_eip.nateIP.id
   subnet_id = aws_subnet.publicsubnets.id
 }

3. Ahora, crea otro archivo dentro del directorio ~/terraform-vpc-demo, nómbralo vars.tf y pega el contenido a continuación.

Vars.tf es un archivo de variables de Terraform que contiene todas las variables a las que hace referencia el archivo de configuración.

Puedes ver las referencias a variables en el archivo de configuración mediante:

  • var.region
  • var.main_vpc_cidr
  • var.public_subnets
  • var.private_subnets
variable "region" {}
 variable "main_vpc_cidr" {}
 variable "public_subnets" {}
 variable "private_subnets" {}

Es posible incluir todos los valores de configuración en un solo archivo de configuración. Para mantener las cosas claras y facilitar el trabajo a los desarrolladores y administradores, es importante dividir las cosas.

4. Crea un archivo más dentro del directorio ~/terraform-vpc-demo, pega el siguiente código y nómbralo como provider.tf para definir el proveedor de AWS. El tutorial creará recursos en la región us-east-2.

El archivo de proveedores define proveedores como AWS, Oracle o Azure, etc., para que Terraform pueda conectarse con los servicios en la nube correctos. provider "aws" { region = "us-east-2" }

provider "aws" {
   region = "us-east-2"
 }

5. Finalmente, crea un archivo más dentro del directorio ~/terraform-vpc-demo, nómbralo terraform.tfvars, y pega el código a continuación. Este archivo de variables contiene los valores que Terraform utilizará para reemplazar las referencias de variables dentro del archivo de configuración.

main_vpc_cidr = "10.0.0.0/24"
 public_subnets = "10.0.0.128/26"
 private_subnets = "10.0.0.192/26"

Ahora, abre tu terminal favorita (Bash en este caso) y verifica que todos los archivos requeridos estén contenidos en la carpeta ejecutando el comando tree.

tree terraform-vpc-demo  
Folder structure of terraform files

Ejecutando Terraform para crear el VPC de AWS

Ahora que tienes el archivo de configuración de Terraform y los archivos de variables listos para usar, ¡es hora de iniciar Terraform y crear la VPC! Para aprovisionar una configuración de Terraform, Terraform típicamente utiliza un enfoque de tres etapas terraform initterraform planterraform apply. Vamos a repasar cada etapa ahora.

1. Abre una terminal y navega hasta el directorio ~\terraform-vpc-demo.

cd ~\terraform-vpc-demo

2. Ejecuta el comando terraform init en el mismo directorio. El comando terraform init inicializa los complementos y proveedores que son necesarios para trabajar con recursos.

terraform init

Si todo va bien, deberías ver el mensaje Terraform se ha inicializado correctamente en la salida, como se muestra a continuación.

Terraform initialized successfully

3. Ahora, ejecuta el comando terraform plan. Esta es una acción opcional, pero recomendada, para asegurarte de que la sintaxis de tu configuración sea correcta y te dé una visión general de los recursos que se aprovisionarán en tu infraestructura. terraform plan

terraform plan

Si tienes éxito, deberías ver un mensaje como Plan: "X" para añadir, "Y" para cambiar o "Z" para destruir en la salida para indicar que el comando fue exitoso. También verás todos los recursos de AWS que Terraform tiene la intención de crear.

Plan command execution

4. A continuación, dile a Terraform que realmente provisione la VPC de AWS y los recursos usando terraform apply. Cuando invocas terraform apply, Terraform leerá la configuración (main.tf) y los otros archivos para compilar una configuración. Luego enviará esa configuración a AWS como instrucciones para construir la VPC y otros componentes.

terraform apply
Terraform apply command execution

Observa los IDs definidos en la salida de Terraform. Necesitarás estos IDs para correlacionar los recursos creados en la siguiente sección.

El comando Terraform se ejecutó correctamente, así que cambiemos a la Consola de Administración de AWS para confirmar que la VPC y los componentes fueron creados con éxito.

Verificación de la VPC de Terraform de AWS

En este punto, deberías haber creado la VPC con Terraform. Verifiquemos manualmente si la VPC está en la Consola de Administración de AWS.

1. Abre tu navegador web favorito y navega hasta la Consola de Administración de AWS e inicia sesión.

2. Mientras estés en la Consola, haz clic en la barra de búsqueda en la parte superior, busca ‘vpc’ y haz clic en el elemento de menú VPC.

Navigating to the VPC service

3. Una vez en la página de VPC, haz clic en Tus VPCs. Deberías ver la VPC creada con el mismo ID que Terraform devolvió anteriormente.

VPC created

4. Dado que Terraform creó más que solo el recurso VPC sino todos los recursos requeridos para el VPC, entonces deberías encontrar cada recurso en esta página también.

Subnets created
Route tables created
Internet Gateway created
NAT Gateway created

Con todos los componentes creados exitosamente, usando Terraform, ¡este VPC está listo para funcionar!

Conclusión

En este tutorial, has aprendido cómo usar Terraform para implementar un VPC de AWS y sus componentes usando Terraform.

Construir una Amazon Virtual Private Cloud con Terraform te permite crear recursos rápidamente, fácilmente y de manera predecible. Ahora estás listo para usar este conocimiento con otros servicios de AWS y construir servicios poderosos sobre él.

Source:
https://adamtheautomator.com/terraform-vpc/