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