Application de prise de notes personnelles déployée sur AWS avec une architecture serverless.
- Frontend: S3 + CloudFront
- API: API Gateway + Lambda (Python)
- Database: DynamoDB
- Infrastructure: Terraform
- Région: us-east-1
- Budget: ~2€/mois (Free tier eligible)
- AWS Academy Account configuré
- Terraform installé (Download)
terraform version
- AWS CLI installé et configuré
aws --version
Si vous utilisez AWS Academy, configurez vos credentials depuis le Lab:
- Démarrez votre lab AWS Academy
- Cliquez sur "AWS Details"
- Cliquez sur "Show" à côté de "AWS CLI"
- Copiez les credentials dans "$HOME/aws/credentials"
aws sts get-caller-identity --region us-east-1Vous devriez voir votre Account ID et ARN.
cd terraform
terraform initterraform planterraform applyDurée: ~5-10 minutes
À la fin du déploiement, Terraform affichera l'URL CloudFront:
cloudfront_url = "https://xxx.cloudfront.net"
- Récupérer l'URL de l'API depuis les outputs Terraform:
terraform output api_gateway_url- Tester la création d'une note:
curl -X POST "YOUR_API_URL" \
-H "Content-Type: application/json" \
-d '{
"userId": "test-user",
"noteId": "test-note-1",
"title": "Test Note",
"content": "Ceci est un test",
"color": "#FFE97F"
}'- Lister les notes:
curl "YOUR_API_URL?userId=test-user"Pour supprimer toutes les ressources AWS et éviter les coûts:
cd terraform
terraform destroyTapez yes pour confirmer la suppression.
Cela va supprimer:
- Distribution CloudFront
- Bucket S3 (avec tout son contenu)
- API Gateway et Lambda
- Table DynamoDB
- IAM roles et policies
notes-aws/
├── frontend/
│ ├── index.html # Page principale
│ ├── style.css # Styles CSS
│ └── app.js # Logique JavaScript
├── backend/
│ ├── lambda_function.py # Code Lambda (CRUD)
│ └── requirements.txt # Dépendances Python
├── terraform/
│ ├── main.tf # Configuration Terraform principale
│ ├── variables.tf # Variables Terraform
│ ├── outputs.tf # Outputs Terraform
│ ├── dynamodb.tf # DynamoDB table
│ ├── lambda.tf # Lambda function et IAM
│ ├── api_gateway.tf # API Gateway REST API
│ └── s3_cloudfront.tf # S3 bucket et CloudFront
├── .gitignore
└── DEPLOYMENT.md # Ce fichier
- Table:
Notes - Clé primaire:
userId(HASH) +noteId(RANGE) - Billing: PAY_PER_REQUEST (free tier)
- Nom:
NotesAPIFunction - Runtime: Python 3.11
- Memory: 128 MB
- Timeout: 30 secondes
- Nom:
NotesAPI - Type: REST API
- Stage: prod
- Endpoint:
/notes - Méthodes: GET, POST, PUT, DELETE, OPTIONS (CORS)
- Bucket:
notes-app-{AccountId} - Configuration: Static website hosting
- Public access: Enabled (pour CloudFront)
- Distribution: Distribution globale
- Price Class: PriceClass_100 (NA & Europe)
- HTTPS: Redirect to HTTPS
Dans le Free Tier AWS:
- DynamoDB: 25 GB, 200M requêtes/mois - Gratuit
- Lambda: 1M requêtes, 400,000 GB-secondes/mois - Gratuit
- S3: 5 GB, 20,000 GET, 2,000 PUT - Gratuit
- CloudFront: 1 TB transfert, 10M requêtes - Gratuit
- API Gateway: 1M requêtes - Gratuit
Total estimé: 0€/mois dans le free tier, ~2€/mois après.
- AWS Academy: Les ressources peuvent être supprimées automatiquement après 4 heures d'inactivité
- Credentials: Pensez à rafraîchir vos credentials AWS Academy régulièrement
- Région: Le projet est configuré pour
us-east-1(obligatoire pour certains services AWS Academy) - Données: Les données sont persistées dans DynamoDB même après arrêt du lab (sauf si vous exécutez cleanup.ps1)

