Introducció

En aquest projecte, construirem una infraestructura bàsica a AWS utilitzant Terraform. Aquest projecte inclou la creació d'una VPC (Virtual Private Cloud), subxarxes, una instància EC2 i un grup de seguretat. Aquest projecte és ideal per consolidar els coneixements adquirits en els mòduls anteriors i aplicar-los en un escenari del món real.

Objectius del Projecte

  1. Crear una VPC amb subxarxes públiques i privades.
  2. Configurar un grup de seguretat per permetre el trànsit HTTP i SSH.
  3. Desplegar una instància EC2 dins de la subxarxa pública.
  4. Assignar una IP elàstica a la instància EC2.

Requisits Prèvis

  • Un compte d'AWS.
  • Terraform instal·lat al teu sistema.
  • Coneixements bàsics de Terraform i AWS.

Passos del Projecte

  1. Configuració Inicial

1.1. Crear un Directori de Projecte

Crea un directori per al teu projecte i navega fins a ell:

mkdir terraform-aws-project
cd terraform-aws-project

1.2. Fitxer de Configuració Principal

Crea un fitxer anomenat main.tf i afegeix el següent contingut per definir el proveïdor d'AWS:

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

  1. Crear la VPC

2.1. Definir la VPC

Afegeix el següent codi a main.tf per crear una VPC:

resource "aws_vpc" "main" {
  cidr_block = "10.0.0.0/16"

  tags = {
    Name = "main-vpc"
  }
}

2.2. Crear Subxarxes

Afegeix el següent codi per crear subxarxes públiques i privades:

resource "aws_subnet" "public" {
  vpc_id            = aws_vpc.main.id
  cidr_block        = "10.0.1.0/24"
  availability_zone = "us-west-2a"

  tags = {
    Name = "public-subnet"
  }
}

resource "aws_subnet" "private" {
  vpc_id            = aws_vpc.main.id
  cidr_block        = "10.0.2.0/24"
  availability_zone = "us-west-2a"

  tags = {
    Name = "private-subnet"
  }
}

  1. Configurar el Grup de Seguretat

3.1. Definir el Grup de Seguretat

Afegeix el següent codi per crear un grup de seguretat que permeti el trànsit HTTP i SSH:

resource "aws_security_group" "web" {
  vpc_id = aws_vpc.main.id

  ingress {
    from_port   = 80
    to_port     = 80
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }

  ingress {
    from_port   = 22
    to_port     = 22
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }

  egress {
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = ["0.0.0.0/0"]
  }

  tags = {
    Name = "web-sg"
  }
}

  1. Desplegar una Instància EC2

4.1. Definir la Instància EC2

Afegeix el següent codi per crear una instància EC2 dins de la subxarxa pública:

resource "aws_instance" "web" {
  ami           = "ami-0c55b159cbfafe1f0" # AMI d'Amazon Linux 2
  instance_type = "t2.micro"
  subnet_id     = aws_subnet.public.id
  security_groups = [aws_security_group.web.name]

  tags = {
    Name = "web-instance"
  }
}

  1. Assignar una IP Elàstica

5.1. Definir la IP Elàstica

Afegeix el següent codi per assignar una IP elàstica a la instància EC2:

resource "aws_eip" "web" {
  instance = aws_instance.web.id
}

  1. Aplicar la Configuració

6.1. Inicialitzar el Directori de Treball

Executa el següent comandament per inicialitzar el directori de treball:

terraform init

6.2. Crear el Pla d'Execució

Executa el següent comandament per crear el pla d'execució:

terraform plan

6.3. Aplicar el Pla

Executa el següent comandament per aplicar el pla i crear els recursos:

terraform apply

Resum

En aquest projecte, hem creat una infraestructura bàsica a AWS utilitzant Terraform. Hem après a crear una VPC, subxarxes, un grup de seguretat, una instància EC2 i a assignar una IP elàstica. Aquest projecte ens ha permès aplicar els conceptes apresos en els mòduls anteriors en un escenari del món real.

Exercicis Pràctics

  1. Ampliar la Infraestructura: Afegeix una segona instància EC2 dins de la subxarxa privada i configura un grup de seguretat per permetre el trànsit intern entre les instàncies.
  2. Automatitzar la Configuració: Utilitza un fitxer de variables per definir els valors de la regió, el CIDR de la VPC i els tipus d'instància.
  3. Proveïment de Recursos Addicionals: Afegeix un balançador de càrrega per distribuir el trànsit entre les instàncies EC2.

Solucions dels Exercicis

Exercici 1: Ampliar la Infraestructura

resource "aws_instance" "private" {
  ami           = "ami-0c55b159cbfafe1f0"
  instance_type = "t2.micro"
  subnet_id     = aws_subnet.private.id
  security_groups = [aws_security_group.web.name]

  tags = {
    Name = "private-instance"
  }
}

Exercici 2: Automatitzar la Configuració

Crea un fitxer variables.tf:

variable "region" {
  default = "us-west-2"
}

variable "vpc_cidr" {
  default = "10.0.0.0/16"
}

variable "instance_type" {
  default = "t2.micro"
}

Actualitza main.tf per utilitzar les variables:

provider "aws" {
  region = var.region
}

resource "aws_vpc" "main" {
  cidr_block = var.vpc_cidr

  tags = {
    Name = "main-vpc"
  }
}

resource "aws_instance" "web" {
  ami           = "ami-0c55b159cbfafe1f0"
  instance_type = var.instance_type
  subnet_id     = aws_subnet.public.id
  security_groups = [aws_security_group.web.name]

  tags = {
    Name = "web-instance"
  }
}

Exercici 3: Proveïment de Recursos Addicionals

Afegeix el següent codi per crear un balançador de càrrega:

resource "aws_lb" "web" {
  name               = "web-lb"
  internal           = false
  load_balancer_type = "application"
  security_groups    = [aws_security_group.web.id]
  subnets            = [aws_subnet.public.id]

  enable_deletion_protection = false

  tags = {
    Name = "web-lb"
  }
}

resource "aws_lb_target_group" "web" {
  name     = "web-tg"
  port     = 80
  protocol = "HTTP"
  vpc_id   = aws_vpc.main.id

  health_check {
    path                = "/"
    interval            = 30
    timeout             = 5
    healthy_threshold   = 2
    unhealthy_threshold = 2
    matcher             = "200"
  }

  tags = {
    Name = "web-tg"
  }
}

resource "aws_lb_listener" "web" {
  load_balancer_arn = aws_lb.web.arn
  port              = 80
  protocol          = "HTTP"

  default_action {
    type             = "forward"
    target_group_arn = aws_lb_target_group.web.arn
  }
}

resource "aws_lb_target_group_attachment" "web" {
  target_group_arn = aws_lb_target_group.web.arn
  target_id        = aws_instance.web.id
  port             = 80
}

Aquest projecte proporciona una base sòlida per a la creació d'infraestructures a AWS utilitzant Terraform. A mesura que avancis, podràs afegir més complexitat i funcionalitats a la teva infraestructura.

© Copyright 2024. Tots els drets reservats