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
- Crear una VPC amb subxarxes públiques i privades.
- Configurar un grup de seguretat per permetre el trànsit HTTP i SSH.
- Desplegar una instància EC2 dins de la subxarxa pública.
- 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
- Configuració Inicial
1.1. Crear un Directori de Projecte
Crea un directori per al teu projecte i navega fins a ell:
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:
- Crear la VPC
2.1. Definir la VPC
Afegeix el següent codi a main.tf per crear una 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"
}
}
- 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"
}
}
- 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"
}
}
- 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:
- Aplicar la Configuració
6.1. Inicialitzar el Directori de Treball
Executa el següent comandament per inicialitzar el directori de treball:
6.2. Crear el Pla d'Execució
Executa el següent comandament per crear el pla d'execució:
6.3. Aplicar el Pla
Executa el següent comandament per aplicar el pla i crear els recursos:
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
- 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.
- 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.
- 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.
Curs de Terraform
Mòdul 1: Introducció a Terraform
- Què és Terraform?
- Instal·lant Terraform
- Conceptes bàsics de Terraform
- Primera configuració de Terraform
Mòdul 2: Llenguatge de configuració de Terraform
Mòdul 3: Gestió de l'estat
Mòdul 4: Mòduls de Terraform
Mòdul 5: Proveïment de recursos
- Conceptes bàsics de proveïment
- Proveïment de recursos AWS
- Proveïment de recursos Azure
- Proveïment de recursos GCP
Mòdul 6: Funcionalitats avançades de Terraform
Mòdul 7: Millors pràctiques de Terraform
- Organització del codi
- Control de versions
- Proves del codi de Terraform
- Millors pràctiques de seguretat
Mòdul 8: Terraform en CI/CD
- Integració de Terraform amb CI/CD
- Automatització de Terraform amb Jenkins
- Ús de Terraform amb GitHub Actions
- Terraform Cloud i Enterprise
