Skip to content
 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

28 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Atelier API-Driven Infrastructure

Ce projet implémente une architecture serverless complète permettant de piloter dynamiquement des ressources d'infrastructure (instances EC2) sans passer par une console graphique, en utilisant uniquement des requêtes HTTP. L'ensemble de l'infrastructure AWS est émulé localement grâce à LocalStack au sein de GitHub Codespaces.


1. Architecture du Projet

L'architecture repose sur la chaîne de liaison suivante :

  1. Client (HTTP Request) : Une requête POST contenant l'action souhaitée (start ou stop) et l'ID de la ressource cible est envoyée.
  2. API Gateway : Réceptionne la requête HTTP sur la route /ec2 et la transmet de manière transparente à la fonction Lambda via une intégration de type AWS_PROXY.
  3. Fonction Lambda (Python 3.10) : Analyse le corps de la requête, utilise la bibliothèque boto3 configurée pour pointer vers l'environnement local, puis exécute l'ordre auprès du service EC2.
  4. Service EC2 (Simulé) : Modifie l'état de l'instance cible et retourne le nouveau statut (pending, stopping, etc.).

2. Structure des Fichiers

  • lambda_function.py : Code Python de la fonction Lambda gérant l'interaction avec le service EC2 via boto3.
  • deploy.sh : Script d'orchestration Bash automatisant la création complète de l'environnement (Nettoyage, Rôle IAM, Instance EC2, Lambda, API Gateway, Permissions et Déploiement).
  • Makefile : Raccourcis pour automatiser les tâches courantes (make deploy, make test, make clean).
  • .env_vars : Fichier généré automatiquement contenant les identifiants dynamiques (API_ID et INSTANCE_ID) pour faciliter les tests.

3. Prérequis et Installation

Étape 1 : Initialiser LocalStack (Séquence 2)

Dans le terminal de votre Codespace, lancez l'émulateur LocalStack :

localstack auth set-token <VOTRE_TOKEN_AUTH>
localstack start -d

Étape 2 : Installer AWS CLI et configurer les profils

Assurez-vous que l'AWS CLI est présent et configuré avec des identifiants fictifs pour LocalStack :

# Configuration des variables fictives obligatoires
aws configure set aws_access_key_id mock_key
aws configure set aws_secret_access_key mock_secret
aws configure set region us-east-1
aws configure set output json

4. Déploiement Automatisé

Pour maximiser l'automatisation et éviter les erreurs de configuration manuelles, l'intégralité du déploiement est pilotée par un Makefile.

Exécutez la commande suivante à la racine du projet :

make deploy

Ce que fait ce script en arrière-plan :

  1. Supprime les anciennes ressources résiduelles pour éviter les conflits de nommage.
  2. Crée un rôle IAM fictif pour l'exécution de la Lambda.
  3. Instancie une image EC2 valide présente dans le catalogue local de LocalStack.
  4. Package et déploie le code de la fonction Lambda.
  5. Crée l'API Gateway, expose la ressource /ec2 avec la méthode POST.
  6. Crucial : Accorde les permissions explicites à l'API Gateway pour invoquer la fonction Lambda (lambda:InvokeFunction).
  7. Déploie l'API sur l'environnement de production (prod).

5. Guide d'Utilisation et Tests

Une fois le déploiement terminé, le script génère un fichier .env_vars. Chargez ces variables dans votre terminal actuel :

source .env_vars

Option A : Test Automatique

Vous pouvez utiliser le raccourci du Makefile pour envoyer instantanément une requête de test :

make test

Option B : Commandes Manuelles (cURL)

Pour arrêter l'instance EC2 :

curl -X POST http://localhost:4566/restapis/$API_ID/prod/_user_request_/ec2 \
     -H "Content-Type: application/json" \
     -d "{\"action\": \"stop\", \"instance_id\": \"$INSTANCE_ID\"}"

Réponse attendue : {"status": "success", "message": "Instance i-... is shutting down. Current state: stopping"}

Pour démarrer l'instance EC2 :

curl -X POST http://localhost:4566/restapis/$API_ID/prod/_user_request_/ec2 \
     -H "Content-Type: application/json" \
     -d "{\"action\": \"start\", \"instance_id\": \"$INSTANCE_ID\"}"

Réponse attendue : {"status": "success", "message": "Instance i-... is turning on. Current state: pending"}

Vérification de l'état réel sur AWS

Pour valider que l'action a bien impacté l'infrastructure simulée, interrogez directement le composant EC2 :

aws --endpoint-url=http://localhost:4566 ec2 describe-instances --instance-ids $INSTANCE_ID --query 'Reservations[0].Instances[0].State.Name'

6. Nettoyage de l'environnement

Pour réinitialiser les fichiers intermédiaires générés lors des phases de tests :

make clean

7. Réinitialiser Complètement l'Environnement

Étape 1 : Arrêter LocalStack

localstack stop

Étape 2 : Supprimer les données persistantes de LocalStack (Optionnel)

Si vous voulez une réinitialisation complète sans données résiduelles :

localstack rm -f

Étape 3 : Nettoyer les fichiers générés du projet

make clean

Cette commande supprime :

  • lambda.zip (archive de la fonction Lambda)
  • .env_vars (fichier contenant API_ID et INSTANCE_ID)

Étape 4 : Supprimer les répertoires virtuels (Optionnel)

Si vous souhaitez nettoyer complètement les environnements Python locaux :

rm -rf rep_localstack rep_localstack~

Réinitialisation Complète (One-liner)

Pour une réinitialisation entière de l'environnement en une seule commande :

localstack stop && localstack rm -f && make clean && rm -rf rep_localstack rep_localstack~

Redémarrer l'Environnement

Une fois l'environnement réinitialisé, pour relancer le projet :

# 1. Redémarrer LocalStack
localstack auth set-token <VOTRE_TOKEN_AUTH>
localstack start -d

# 2. Vérifier que LocalStack est prêt
sleep 10

# 3. Redéployer l'infrastructure
make deploy

# 4. Tester
source .env_vars
make test

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages