Travaux pratiques : Création premières ressources avec Terraform
Objectifs du TPLes plus importants à avoir en têteExploration du Registry TerraformDéfinir les ressources à créer dans un fichier main.tfCréer les ressources sur AWS
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 :
- Visitez https://registry.terraform.io/
- Recherchez "AWS" dans la barre de recherche
- Explorez les différentes ressources disponibles pour AWS
- 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😊 **********************************************************************************
Créer les ressources sur AWS
terraform init
terraform plan
terraform apply