aws-cost-optimize

Par github · awesome-copilot

Analysez les ressources AWS utilisées dans l'application (fichiers IaC et/ou ressources dans un compte/région cible) et optimisez les coûts en créant des GitHub issues pour les optimisations identifiées.

npx skills add https://github.com/github/awesome-copilot --skill aws-cost-optimize

AWS Cost Optimize

Ce workflow analyse les fichiers Infrastructure-as-Code (IaC) et les ressources AWS pour générer des recommandations d'optimisation des coûts. Il crée des problèmes GitHub individuels pour chaque opportunité d'optimisation plus une issue EPIC pour coordonner la mise en œuvre, permettant un suivi et une exécution efficaces des initiatives d'économies de coûts.

Prérequis

  • AWS CLI configuré et authentifié (aws sts get-caller-identity réussit)
  • Serveur GitHub MCP configuré et authentifié
  • Dépôt GitHub cible identifié
  • Ressources AWS déployées (fichiers IaC optionnels mais utiles)

Étapes du workflow

Étape 1 : Obtenir les meilleures pratiques d'optimisation des coûts AWS

Action : Récupérer les meilleures pratiques d'optimisation des coûts avant l'analyse Outils : fetch pour récupérer la documentation AWS Processus :

  1. Charger les meilleures pratiques :
    • Récupérer https://docs.aws.amazon.com/cost-management/latest/userguide/cost-optimization-best-practices.html
    • Récupérer le résumé du pilier d'optimisation des coûts AWS Well-Architected
    • Utiliser ces pratiques pour informer l'analyse et les recommandations ultérieures

Étape 2 : Découvrir l'infrastructure AWS

Action : Découvrir et analyser dynamiquement les ressources et configurations AWS Outils : AWS CLI + accès au système de fichiers local Processus :

  1. Découverte du compte et de la région :

    • Exécuter aws sts get-caller-identity pour confirmer le compte
    • Exécuter aws configure get region pour déterminer la région par défaut
  2. Découverte des ressources (par région) :

    • Instances EC2 : aws ec2 describe-instances --query 'Reservations[].Instances[].[InstanceId,InstanceType,State.Name,Tags]'
    • Instances RDS : aws rds describe-db-instances --query 'DBInstances[].[DBInstanceIdentifier,DBInstanceClass,Engine,MultiAZ]'
    • Fonctions Lambda : aws lambda list-functions --query 'Functions[].[FunctionName,Runtime,MemorySize,Architectures]'
    • Clusters/services ECS : aws ecs list-clusters puis aws ecs describe-services
    • Buckets S3 : aws s3api list-buckets --query 'Buckets[].Name'
    • Clusters ElastiCache : aws elasticache describe-cache-clusters
    • NAT Gateways : aws ec2 describe-nat-gateways
    • Load Balancers : aws elbv2 describe-load-balancers
  3. Détection IaC :

    • Scanner les fichiers IaC : **/*.tf, **/*.yaml (CloudFormation/SAM), **/*.json (CloudFormation), **/cdk.json, lib/**/*.ts (CDK)
    • Analyser les définitions de ressources pour comprendre les configurations envisagées
    • NE PAS utiliser les fichiers de code applicatif — utiliser uniquement les fichiers IaC comme source de vérité
    • Si aucun fichier IaC trouvé : ARRÊTER et signaler à l'utilisateur

Étape 3 : Collecter les métriques d'utilisation et valider les coûts actuels

Action : Rassembler les données d'utilisation et vérifier les coûts réels des ressources Outils : AWS CLI (CloudWatch, Cost Explorer) Processus :

  1. Métriques CloudWatch (7 derniers jours) :

    # Utilisation CPU EC2
    aws cloudwatch get-metric-statistics \
      --namespace AWS/EC2 --metric-name CPUUtilization \
      --dimensions Name=InstanceId,Value=<id> \
      --start-time $(date -u -d '7 days ago' +%Y-%m-%dT%H:%M:%SZ) \
      --end-time $(date -u +%Y-%m-%dT%H:%M:%SZ) \
      --period 3600 --statistics Average
    
    # Durée Lambda
    aws cloudwatch get-metric-statistics \
      --namespace AWS/Lambda --metric-name Duration \
      --dimensions Name=FunctionName,Value=<name> \
      --start-time $(date -u -d '7 days ago' +%Y-%m-%dT%H:%M:%SZ) \
      --end-time $(date -u +%Y-%m-%dT%H:%M:%SZ) \
      --period 86400 --statistics Average,Maximum
  2. AWS Cost Explorer :

    aws ce get-cost-and-usage \
      --time-period Start=$(date -u -d '30 days ago' +%Y-%m-%d),End=$(date -u +%Y-%m-%d) \
      --granularity MONTHLY --metrics BlendedCost \
      --group-by Type=DIMENSION,Key=SERVICE
  3. Calculer les métriques de base : moyennes CPU/mémoire, taux d'invocation Lambda, modèles de transfert de données, et total mensuel réaliste actuel.

Étape 4 : Générer les recommandations d'optimisation des coûts

Action : Analyser les ressources pour identifier les opportunités d'optimisation Processus :

  1. Appliquer les modèles d'optimisation :

    Calcul :

    • EC2 : Right-size en fonction du CPU/mémoire (<20% moyenne → réduire), convertir On-Demand en Savings Plans, migrer vers Graviton/ARM (jusqu'à 40% moins cher)
    • Lambda : Réduire la mémoire pour les fonctions inactives, basculer vers arm64 (20% moins cher)
    • ECS/EKS : Utiliser Fargate Spot pour les charges de travail dev/batch

    Base de données :

    • RDS : Right-size la classe d'instance, convertir single-AZ pour dev, utiliser Aurora Serverless v2 pour une charge variable
    • DynamoDB : Basculer Provisionné → À la demande pour le trafic imprévisible
    • ElastiCache : Right-size le type de nœud en fonction de l'utilisation de la mémoire

    Stockage :

    • S3 : Politiques de cycle de vie (Standard → Standard-IA après 30j → Glacier après 90j), activer Intelligent-Tiering
    • EBS : Supprimer les volumes non attachés, convertir gp2 → gp3 (même performance, 20% moins cher)

    Réseau :

    • Consolider les NAT Gateways pour les environnements non-production
    • Utiliser les VPC endpoints pour S3/DynamoDB pour éviter les frais de NAT Gateway
  2. Calculer le score de priorité :

    Score de priorité = (Score de valeur × Économies mensuelles) / (Score de risque × Jours d'implémentation)
    Élevé : Score > 20 | Moyen : Score 5-20 | Bas : Score < 5

Étape 5 : Confirmation de l'utilisateur

Action : Présenter le résumé et obtenir l'approbation avant de créer les issues GitHub

🎯 Résumé d'optimisation des coûts AWS

📊 Résultats de l'analyse :
• Total des ressources analysées : X
• Coût mensuel actuel : $X
• Économies mensuelles potentielles : $Y
• Opportunités d'optimisation : Z
• Articles de priorité élevée : N

🏆 Recommandations :
1. [Ressource] : [Actuel] → [Cible] = $X/mois d'économies - [Risque] | [Effort]
...

💡 Cela créera Y issues GitHub individuelles + 1 issue EPIC.

❓ Procéder à la création des issues GitHub ? (o/n)

Attendre la confirmation de l'utilisateur avant de procéder.

Étape 6 : Créer les issues d'optimisation individuelles

Action : Créer des issues GitHub séparées pour chaque optimisation. Étiqueter avec « cost-optimization » (vert) et « aws » (orange).

Titre : [COST-OPT] [Type de ressource] - [Brève description] - $X/mois d'économies

Corps :

## 💰 Optimisation des coûts : [Titre bref]

**Économies mensuelles** : $X | **Niveau de risque** : [Bas/Moyen/Élevé] | **Effort** : X jours

### 📋 Description
[Explication claire de l'optimisation et pourquoi elle est nécessaire]

### 🔧 Implémentation

**Fichiers IaC détectés** : [Oui/Non]

```bash
# Modification IaC (préférée) ou fallback AWS CLI

📊 Preuves

  • Configuration actuelle : [détails]
  • Modèle d'utilisation : [preuve de CloudWatch]
  • Impact sur les coûts : $X/mois → $Y/mois

✅ Étapes de validation

  • [ ] Tester dans un environnement non-production
  • [ ] Vérifier l'absence de dégradation des performances via CloudWatch
  • [ ] Confirmer la réduction des coûts dans AWS Cost Explorer

⚠️ Risques et considérations

  • [Risque et atténuation]

Score de priorité : X | Valeur : X/10 | Risque : X/10



### Étape 7 : Créer l'issue EPIC de coordination
**Action** : Créer une issue de suivi maître. Étiqueter avec « cost-optimization » (vert), « aws » (orange), « epic » (violet).

**Titre** : `[EPIC] Initiative d'optimisation des coûts AWS - $X/mois d'économies potentielles`

**Corps** : Résumé exécutif avec détails du compte/région, diagramme d'architecture Mermaid des ressources actuelles, checklist priorisée reliant toutes les issues individuelles (Élevé → Moyen → Bas), suivi de la progression, et critères de succès (>80% des économies estimées réalisées, pas de dégradation des performances).

## Gestion des erreurs
- **Échec de l'authentification AWS** : Guider via `aws configure`
- **Aucune ressource trouvée** : Créer une issue informative sur le déploiement des ressources AWS
- **Permissions insuffisantes** : Lister les permissions de lecture seule IAM requises
- **Échec de la création GitHub** : Afficher les recommandations formatées à la console
- **Cost Explorer non activé** : Guider l'utilisateur pour activer dans la console AWS

## Critères de succès
- ✅ Toutes les estimations de coûts vérifiées par rapport aux configurations réelles et à la tarification AWS
- ✅ Issues GitHub individuelles créées pour chaque optimisation
- ✅ Issue EPIC fournissant une coordination et un suivi complets
- ✅ Toutes les recommandations incluent des commandes AWS CLI ou IaC spécifiques
- ✅ Confirmation de l'utilisateur obtenue avant la création des issues

Skills similaires