Travaux pratiques : Création premières ressources avec Terraform

Travaux pratiques : Création premières ressources avec Terraform

Objectifs du TP

  • Savoir créer des ressources via Terraform
  • Connaitre le registry Terraform

Les plus importants à avoir en tête

Pour bien comprendre les concepts de base de Terraform, voici quelques points importants à retenir :
  • Terraform utilise un langage déclaratif pour définir l'infrastructure
  • Les fichiers de configuration Terraform ont généralement l'extension .tf
  • Le workflow d’utilisation de Terraform comprend les 3 commandes suivantes :
    • terraform init
    • terraform plan
    • terraform apply
  • Le state de Terraform garde une trace des ressources gérées
Avant de commencer, assurez-vous d'avoir :
  • Installé Terraform sur votre machine
  • Configuré vos credentials AWS (via AWS CLI ou variables d'environnement)
Conseil : Commencez par des ressources simples et augmentez progressivement la complexité de votre configuration.

Exploration du Registry Terraform

Le Registry Terraform est une ressource précieuse pour trouver des modules et de la documentation sur les providers. Voici comment l'utiliser :
  1. Visitez https://registry.terraform.io/
  1. Recherchez "AWS" dans la barre de recherche
  1. Explorez les différentes ressources disponibles pour AWS
  1. Consultez la documentation pour les ressources EC2 et RDS que nous allons utiliser
Cette exploration vous aidera à comprendre comment définir correctement vos ressources dans le fichier main.tf.

Définir les ressources à créer dans un fichier main.tf

Les ressources à créer :
  • Un serveur EC2
  • Une base de données RDS
 
Code à copier ici pour validation :
****************************************serveur EC2************************************************************
terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.0"
    }
  }
}

provider "aws" {
  region     = "eu-west-3"
  access_key = "AKIARSS4GY4C3JD27NAU"
  secret_key = "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"
}

// To Generate Private Key
resource "tls_private_key" "rsa_4096" {
  algorithm = "RSA"
  rsa_bits  = 4096
}

variable "key_name" {
  description = "entrer le nom d'instance ec2"
}

// Create Key Pair for Connecting EC2 via SSH
resource "aws_key_pair" "key_pair" {
  key_name   = var.key_name
  public_key = tls_private_key.rsa_4096.public_key_openssh
}

// Save PEM file locally
resource "local_file" "private_key" {
  content  = tls_private_key.rsa_4096.private_key_pem
  filename = var.key_name
}

// Create a security group
resource "aws_security_group" "sg_ec2" {
  name        = "sg_ec2"
  description = "Security group for EC2"

  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"]
  }
}

resource "aws_instance" "public_instance" {
  ami                    = "ami-045a8ab02aadf4f88"
  instance_type          = "t2.micro"
  key_name               = aws_key_pair.key_pair.key_name
  vpc_security_group_ids = [aws_security_group.sg_ec2.id]
  subnet_id  = "subnet-058335aebc5a1a8a0"


  tags = {
    Name = "public_instance"
  }

  root_block_device {
    volume_size = 30
    volume_type = "gp2"
  }
}
**************************************** base de données RDS ************************************************************

terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.0"
    }
  }
}

provider "aws" {
  region     = "us-east-1"
  access_key = "AKIARSS4GY4C3JD27NAU"
  secret_key = "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"
}

resource "aws_db_instance" "default" {
  allocated_storage    = 10
  db_name              = "mydb"
  engine               = "mysql"
  engine_version       = "8.0"
  instance_class       = "db.t3.micro"
  username             = "firstdbilyass"
  password             = "admin12345977"
  parameter_group_name = "default.mysql8.0"
  skip_final_snapshot  = true
  
}
 **************************************** fin😊  **********************************************************************************
notion image
notion image

Créer les ressources sur AWS

terraform init

terraform plan

terraform apply