TD5 - Preuves de Réalisation
Auteurs: DIALLO Samba, DIOP Mouhamed
Date: 7 décembre 2025
Cours: DevOps - ESIEE PARIS
Vue d’ensemble
Ce document présente les preuves de la réalisation complète du TD5 sur l’intégration et le déploiement continus (CI/CD) avec GitHub Actions et AWS.
Partie 1: CI (Continuous Integration)
1.1 Workflow de Tests d’Application (app-tests.yml)
Fichier créé: .github/workflows/app-tests.yml
Preuve de création:
- Workflow configuré pour tester l’application Node.js avec Jest
- Déclenché automatiquement sur chaque push et pull request
- Tests unitaires de l’application sample-app
Résultat attendu: Tous les tests passent avec succès
name: Test Sample App
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
- run: cd td5/scripts/sample-app && npm ci
- run: cd td5/scripts/sample-app && npm test1.2 Configuration AWS OIDC
Infrastructure créée:
S3 Bucket pour le State OpenTofu
- Nom:
samba-diallo-devops-tofu-state-2025 - Région: us-east-2
- Versioning: Activé
- Encryption: AES256
Commande de vérification:
aws s3 ls s3://samba-diallo-devops-tofu-state-2025DynamoDB Table pour le State Locking
- Nom:
samba-diallo-devops-tofu-state-2025 - Partition Key: LockID (String)
- Région: us-east-2
Commande de vérification:
aws dynamodb describe-table --table-name samba-diallo-devops-tofu-state-2025 --region us-east-2OIDC Provider GitHub
- Provider URL:
https://token.actions.githubusercontent.com - Audience:
sts.amazonaws.com - Thumbprint: Configuré pour GitHub Actions
Commande de vérification:
aws iam list-open-id-connect-providersIAM Roles Créés
-
lambda-sample-tests
- ARN:
arn:aws:iam::511211062907:role/lambda-sample-tests - Permission: Exécuter
tofu test - Trust Policy: GitHub Actions OIDC
- ARN:
-
lambda-sample-plan
- ARN:
arn:aws:iam::511211062907:role/lambda-sample-plan - Permission: Exécuter
tofu plan - Trust Policy: GitHub Actions OIDC
- ARN:
-
lambda-sample-apply
- ARN:
arn:aws:iam::511211062907:role/lambda-sample-apply - Permission: Exécuter
tofu apply - Trust Policy: GitHub Actions OIDC
- ARN:
Commande de vérification:
aws iam list-roles | grep lambda-sample1.3 Workflow de Tests d’Infrastructure (infra-tests.yml)
Fichier créé: .github/workflows/infra-tests.yml
Fonctionnalités:
- Authentification AWS via OIDC (pas de credentials statiques)
- Installation d’OpenTofu
- Exécution de
tofu testsur l’infrastructure Lambda - Validation des endpoints API Gateway
Preuve de sécurité: Utilisation de OIDC au lieu de clés AWS statiques
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v4
with:
role-to-assume: arn:aws:iam::511211062907:role/lambda-sample-tests
aws-region: us-east-2Partie 2: CD (Continuous Deployment)
2.1 Workflow tofu-plan.yml
Fichier créé: .github/workflows/tofu-plan.yml
Déclenchement: Sur chaque Pull Request vers main
Fonctionnalités:
- Exécute
tofu planpour montrer les changements prévus - Poste le plan en commentaire sur la PR
- Permet la revue des changements avant merge
Configuration du backend S3:
terraform {
backend "s3" {
bucket = "samba-diallo-devops-tofu-state-2025"
key = "td5/lambda-sample/terraform.tfstate"
region = "us-east-2"
dynamodb_table = "samba-diallo-devops-tofu-state-2025"
encrypt = true
}
}2.2 Workflow tofu-apply.yml
Fichier créé: .github/workflows/tofu-apply.yml
Déclenchement: Après merge d’une PR vers main
Fonctionnalités:
- Déploiement automatique de l’infrastructure
- Exécute
tofu apply -auto-approve - Mise à jour de la Lambda function
- Affiche l’URL de l’API Gateway déployée
Résultat: Lambda function et API Gateway déployés automatiquement
2.3 Pull Request #2 - Test du Workflow CI
Branche: test-workflow
Objectif: Tester le workflow app-tests.yml avec une erreur intentionnelle
Changements:
- Modification de
app.js: “Hello, World!” → “DevOps Labs!” - Création de la PR avec erreur intentionnelle (test qui échoue)
- Correction du test pour correspondre à la nouvelle réponse
- Merge après succès des tests
Preuve: PR #2 merged avec succès après correction
2.4 Pull Request #3 - Test du Pipeline CD Complet
Branche: deploy-lambda-sample
Objectif: Tester le pipeline CD complet (plan + apply)
Changements effectués:
- Modification du message de la Lambda function
- Mise à jour de la documentation README_TD5.md
- Création de la PR → workflow tofu-plan.yml exécuté
- Merge vers main → workflow tofu-apply.yml exécuté
Résultat:
- Infrastructure déployée automatiquement
- Lambda function mise à jour
- API Gateway accessible publiquement
Preuve: PR #3 merged, infrastructure déployée avec succès
Infrastructure Déployée
Lambda Function
- Nom: Variable selon configuration
- Runtime: Node.js 20.x
- Code source:
td5/scripts/tofu/live/lambda-sample/src/index.js - Intégration: API Gateway
API Gateway
- Type: HTTP API
- Route: GET /
- Intégration: Lambda Proxy
- Accès: Public
Test de l’endpoint:
curl https://<api-gateway-url>/
# Réponse attendue: Message de la Lambda functionModules OpenTofu Créés
1. Module state-bucket
- Création de bucket S3 avec versioning
- Configuration du chiffrement
- Gestion du cycle de vie
2. Module github-aws-oidc
- Configuration du OIDC provider GitHub
- Trust policy pour GitHub Actions
- Audience STS
3. Module gh-actions-iam-roles
- Création des 3 rôles IAM
- Policies attachées selon le principe du moindre privilège
- Trust relationships avec OIDC
4. Module lambda (copié de TD3)
- Déploiement de fonctions Lambda
- Configuration des variables d’environnement
- Gestion des logs CloudWatch
5. Module api-gateway (copié de TD3)
- Configuration HTTP API
- Routes et intégrations
- CORS si nécessaire
Fichiers de Configuration Créés
Backend Configuration
Fichier: td5/scripts/tofu/live/lambda-sample/backend.tf
Contenu:
terraform {
backend "s3" {
bucket = "samba-diallo-devops-tofu-state-2025"
key = "td5/lambda-sample/terraform.tfstate"
region = "us-east-2"
dynamodb_table = "samba-diallo-devops-tofu-state-2025"
encrypt = true
}
}Main Configuration
Fichier: td5/scripts/tofu/live/lambda-sample/main.tf
Utilise les modules locaux:
module "lambda" {
source = "../../modules/lambda"
# ...
}
module "api_gateway" {
source = "../../modules/api-gateway"
# ...
}Tests Effectués
Tests Unitaires (Jest)
- Tests de l’application sample-app
- Vérification des endpoints HTTP
- Validation des réponses
Tests d’Infrastructure (OpenTofu)
Fichier: td5/scripts/tofu/live/lambda-sample/deploy.tftest.hcl
Tests:
- Validation de la configuration OpenTofu
- Déploiement de l’infrastructure
- Vérification de l’endpoint API Gateway
- Test de la réponse de la Lambda
Sécurité
Bonnes Pratiques Implémentées
-
OIDC au lieu de clés statiques
- Pas de AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY dans GitHub
- Authentification temporaire via OIDC
- Principe du moindre privilège pour chaque rôle
-
State Management Sécurisé
- State stocké dans S3 avec encryption
- Versioning activé pour rollback possible
- Locking avec DynamoDB pour éviter les conflits
-
Secrets Management
- Pas de secrets hardcodés dans le code
- Utilisation des GitHub Secrets pour les ARNs
- Variables d’environnement pour la configuration
Commits Principaux
Commit Initial - Workflows CI
commit: <hash>
Message: "Add GitHub Actions workflows for CI testing"
Fichiers: .github/workflows/app-tests.yml, infra-tests.yml
Commit - Infrastructure AWS
commit: <hash>
Message: "Setup AWS OIDC and IAM roles for GitHub Actions"
Fichiers: td5/scripts/tofu/live/ci-cd-permissions/
Commit - Backend Configuration
commit: <hash>
Message: "Configure S3 backend for OpenTofu state"
Fichiers: td5/scripts/tofu/live/lambda-sample/backend.tf
Commit - CD Workflows
commit: <hash>
Message: "Add tofu-plan and tofu-apply workflows"
Fichiers: .github/workflows/tofu-plan.yml, tofu-apply.yml
Commit Final - Documentation
commit: 44e0d73
Message: "Remove emojis from TD5 README and fix structure"
Fichier: td5/README_TD5.md
Vérifications Possibles
Pour vérifier que tout fonctionne:
1. Vérifier les Workflows GitHub
# Voir l'historique des workflows
gh run list --repo samba-diallo/Devops2. Vérifier l’Infrastructure AWS
# S3 bucket
aws s3 ls s3://samba-diallo-devops-tofu-state-2025 --region us-east-2
# DynamoDB table
aws dynamodb describe-table --table-name samba-diallo-devops-tofu-state-2025 --region us-east-2
# IAM roles
aws iam get-role --role-name lambda-sample-tests
aws iam get-role --role-name lambda-sample-plan
aws iam get-role --role-name lambda-sample-apply
# OIDC provider
aws iam list-open-id-connect-providers3. Vérifier les Déploiements
# Lister les fonctions Lambda
aws lambda list-functions --region us-east-2
# Lister les APIs Gateway
aws apigatewayv2 get-apis --region us-east-2Conclusion
Le TD5 a été complété avec succès. Tous les objectifs ont été atteints:
- Configuration CI pour tester automatiquement l’application
- Configuration CI pour tester automatiquement l’infrastructure
- Configuration AWS OIDC pour authentification sécurisée
- Création de 3 rôles IAM avec permissions appropriées
- Backend S3 + DynamoDB pour le state management
- Pipeline CD avec tofu-plan sur PRs
- Pipeline CD avec tofu-apply après merge
- Tests avec 2 Pull Requests (PR #2 et PR #3)
- Documentation complète sans emojis
Infrastructure AWS créée:
- 1 S3 bucket (state)
- 1 DynamoDB table (locking)
- 1 OIDC provider
- 3 IAM roles
- Lambda function + API Gateway (via CD pipeline)
Workflows GitHub Actions:
- app-tests.yml (CI - application)
- infra-tests.yml (CI - infrastructure)
- tofu-plan.yml (CD - plan)
- tofu-apply.yml (CD - deploy)
Le projet suit les meilleures pratiques DevOps modernes avec authentification sécurisée, tests automatisés, et déploiement continu.