Skip to content

monoem/terraform_aws_intro

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 

Repository files navigation

readme_content = """

Terraform + Python — Gestion de CV sur AWS

Ce dépôt montre comment utiliser Terraform pour provisionner l’infrastructure AWS pour un projet Python de gestion de CV. Il est conçu pour démontrer les bonnes pratiques et la maîtrise de Terraform dans un contexte réel.

  1. Qu’est-ce que Terraform ? Terraform est un outil open-source d’Infrastructure as Code (IaC) développé par HashiCorp. Il permet de décrire, déployer et gérer des infrastructures sur divers fournisseurs (AWS, Azure, GCP, etc.) en utilisant des fichiers de configuration déclaratifs (.tf). Chaque fichier décrit l’infrastructure souhaitée. Terraform s’occupe de la création, mise à jour et suppression des ressources. Il garde l’état des ressources dans un fichier state (terraform.tfstate) pour suivre les changements.

  2. Fonctionnalités de Terraform Avec Terraform, on peut :

  • Créer des instances EC2, VPC, sous-réseaux, groupes de sécurité sur AWS.
  • Provisionner des bases de données (RDS) et des services gérés.
  • Déployer des bucket S3 pour stockage de fichiers (ex : CV PDF).
  • Configurer des load balancers et autoscaling groups.
  • Définir des politiques IAM pour la sécurité.
  • Automatiser les pipelines de déploiement.
  • Organiser l’infrastructure avec des modules réutilisables.
  • Versionner l’infrastructure avec Git, et partager les configurations.
  1. Modules Terraform Les modules sont des blocs réutilisables qui simplifient l’organisation des ressources. Types de modules :
  • Modules publics : disponibles sur le Terraform Registry (ex: terraform-aws-vpc, terraform-aws-ec2-instance).
  • Modules spécifiques : créés par ton équipe pour ton projet (ex: cv_app_backend, cv_app_s3_bucket).
  • Templates : fichiers préconfigurés que l’on adapte à ses besoins. Bonnes pratiques : combiner modules publics (fiables et testés) avec des modules spécifiques pour les besoins métiers.
  1. Projet Python de gestion de CV sur AWS Objectif : Application Python (Flask / FastAPI / Django) qui permet :
  • Télécharger des CV
  • Stocker les CV sur S3
  • Lister et rechercher les CV
  • Déployer l’infrastructure sur AWS via Terraform.

Architecture cible : VPC ├── Public Subnet │ └── ALB (Application Load Balancer) ├── Private Subnet │ ├── EC2 (Python App) │ └── RDS (PostgreSQL) └── S3 bucket (CV storage) IAM Roles / Security Groups

  1. Étapes de mise en place du projet
  • Créer un dépôt Git pour le projet Terraform.
  • Installer Terraform sur ta machine.
  • Configurer les identifiants AWS (aws configure ou via variables d’environnement).
  • Créer la structure du projet : terraform/ ├── main.tf ├── variables.tf ├── outputs.tf ├── modules/ │ ├── vpc/ │ ├── ec2/ │ ├── rds/ │ └── s3/ └── terraform.tfvars python-app/ ├── app.py ├── config.py └── requirements.txt
  • Définir les modules et ressources dans main.tf en appelant les modules publics ou spécifiques.
  • Initialiser Terraform : terraform init
  • Vérifier le plan : terraform plan
  • Appliquer le plan : terraform apply
  • Déployer l’application Python sur EC2 ou via CodeDeploy.
  1. Modules Terraform à utiliser pour ce projet
  • VPC / Subnets / Security Groups : module public terraform-aws-vpc ou module spécifique
  • EC2 : module public terraform-aws-ec2-instance ou module spécifique Python App
  • RDS (PostgreSQL) : module public terraform-aws-rds ou module spécifique
  • S3 bucket : module public terraform-aws-s3
  • IAM Roles & Policies : module spécifique pour gérer l’accès S3/EC2
  • Load Balancer (ALB) : module public terraform-aws-alb ou spécifique Conseil senior : utiliser un mix public + spécifique.
  1. Étapes d’utilisation de Terraform
  • Initialiser le projet : terraform init
  • Planifier les changements : terraform plan
  • Appliquer la configuration : terraform apply
  • Inspecter les outputs : terraform output
  • Modifier la configuration si nécessaire et ré-appliquer
  • Détruire l’infrastructure si besoin : terraform destroy Important : versionner les fichiers .tf et .tfvars, mais ne jamais versionner le state (terraform.tfstate) sur GitHub public. Utiliser un backend distant (S3 + DynamoDB pour locking) en production.
  1. Bonnes pratiques pour ce projet
  • Séparer les environnements (dev / staging / prod) avec des workspaces ou dossiers Terraform différents.
  • Utiliser des variables (variables.tf) pour IP, nom d’instance, taille EC2.
  • Stocker les secrets dans AWS Secrets Manager ou Parameter Store.
  • Documenter chaque module et output.
  • Automatiser le déploiement avec CI/CD (GitHub Actions, GitLab CI, etc.).
  1. Exemple minimal Python App python-app/app.py : from flask import Flask, request, redirect, url_for, render_template_string import boto3, os

app = Flask(name) S3_BUCKET = os.environ.get("S3_BUCKET","cv-bucket-demo") AWS_REGION = os.environ.get("AWS_REGION","us-east-1") s3_client = boto3.client('s3', region_name=AWS_REGION)

HTML_PAGE = '''

<title>Upload CV</title>

Upload CV

Files in bucket:

    {% for file in files %}
  • {{file}}
  • {% endfor %}
'''

@app.route("/", methods=["GET","POST"]) def upload_file(): files = [obj['Key'] for obj in s3_client.list_objects_v2(Bucket=S3_BUCKET).get('Contents',[])] if request.method=="POST": file=request.files['file'] s3_client.upload_fileobj(file,S3_BUCKET,file.filename) return redirect(url_for('upload_file')) return render_template_string(HTML_PAGE,files=files)

if name=="main": app.run(host="0.0.0.0", port=5000)

python-app/requirements.txt : Flask boto3

python-app/config.py : import os AWS_ACCESS_KEY_ID = os.environ.get("AWS_ACCESS_KEY_ID") AWS_SECRET_ACCESS_KEY = os.environ.get("AWS_SECRET_ACCESS_KEY") S3_BUCKET = os.environ.get("S3_BUCKET","cv-bucket-demo") AWS_REGION = os.environ.get("AWS_REGION","us-east-1")

  1. Git Initialiser le repo : git init git add . git commit -m "Add Terraform + Python CV management project" git branch -M main git remote add origin git push -u origin main

Ce fichier README contient toutes les informations clés pour utiliser Terraform, déployer l’infrastructure AWS et gérer le projet Python de CV. """

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published