Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

Estimer le coût de votre infrastructure AWS dans une nouvelle région

By Diana BarretoAug 7, 20257 min read

Cette page est également disponible en English, Deutsch, Español, Italiano, 日本語 et Português.

Comment la DoiT Console, l'Amazon Price API et l'assistant IA Amazon Q accélèrent l'estimation du coût d'une infrastructure AWS dans une région cible

Comprendre les écarts de coûts entre les régions AWS est essentiel lorsqu'on planifie des évolutions d'infrastructure. Cela permet d'identifier la région la plus avantageuse selon le cas d'usage : choix d'une région de reprise après sinistre, expansion de l'activité ou migration de l'infrastructure existante.

Dans cet article, je vous explique comment j'ai estimé le coût de la migration de mon infrastructure AWS depuis la Virginie (us-east-1) vers deux régions européennes : Francfort (eu-central-1) et Irlande (eu-west-1). Je me suis appuyé sur trois outils principaux : la DoiT Console, Amazon Q et l'AWS Price API.

Utiliser la DoiT Console pour récupérer la consommation actuelle en Virginie.

La DoiT Console est une application web qui permet aux clients d'interagir avec la suite de produits DoiT. Elle propose des rapports offrant une visualisation détaillée et flexible de votre facturation cloud.

La première étape consistait à utiliser l'un des rapports DoiT pour obtenir les données de consommation cloud actuelles en Virginie, qui serviraient de point de départ à mon estimation des coûts. J'ai utilisé pour cela le rapport Services Breakdown de la DoiT Console, en le personnalisant ainsi :

• Passage en vue tableau

• Changement de la métrique : de coût à utilisation

• Période réglée sur mensuelle

• Regroupement des données par Account, Service, SKU, SKU ID et Unit

La configuration est illustrée ci-dessous :

Personnalisation du rapport prédéfini DoiT Services Breakdown

J'ai ensuite téléchargé ce rapport, et le fichier CSV obtenu a servi d'entrée pour l'estimation :

Export du rapport DoiT

L'AWS Price API pour estimer le coût dans une autre région.

Le rapport indique la consommation, les SKU IDs et les prix de tous les services actuellement déployés en Virginie. Ces données me permettent de retrouver les SKU IDs et prix équivalents à Francfort et en Irlande, puis de calculer les coûts estimés pour chaque région.

L'AWS Price API fournit les informations tarifaires de l'ensemble des services AWS. Elle propose une fonction GetProducts qui permet de rechercher des produits selon des attributs précis. Disposant des SKU IDs issus du rapport DoiT, je peux les utiliser pour obtenir les informations détaillées de chaque produit. Avec l'AWS CLI, on récupère ces attributs grâce à la commande suivante :

aws pricing get-products \
--service-code AmazonEC2 \
--region us-east-1 \
--filters Type=TERM_MATCH,Field=sku,Value="6C86BEPQVG73ZGGR"
{
    "PriceList": [\
        {\
            "product": {\
                "productFamily": "Compute Instance",\
                "attributes": {\
                    "enhancedNetworkingSupported": "Ye\
                    "intelTurboAvailable": "Yes",\
                    "memory": "8 GiB",\
                    …\
                    "locationType": "AWS Region",\
                    "storage": "EBS only",\
                    "instanceFamily": "General purpose\
                    "operatingSystem": "Linux",\
                    "intelAvx2Available": "Yes",\
                    …\
                    "processorFeatures": "Intel AVX; I\
                    "servicecode": "AmazonEC2",\
                    "licenseModel": "No License required"\
                    "currentGeneration": "Yes",\
                    …\
                    "processorArchitecture": "64-bit",\
                    "marketoption": "OnDemand",\
                },\
                "sku": "6C86BEPQVG73ZGGR"\
            },\
            "serviceCode": "AmazonEC2",\
            "terms": {\
                "OnDemand": {\
                    "6C86BEPQVG73ZGGR.JRTCKXETXF": {\
                        "priceDimensions": {\
                            "6C86BEPQVG73ZGGR.JRTCKXET\
                                "unit": "Hrs",\
                                "endRange": "Inf",\
                                "description": "$0.096\
                                "appliesTo": [],\
                                "rateCode": "6C86BEPQV\
                                "beginRange": "0",\
                                "pricePerUnit": {\
                                    "USD": "0.09600000\
                                }\
                            }\
                        },\
                        "sku": "6C86BEPQVG73ZGGR",\
                        "effectiveDate": "2025-07-01T0\
                        "offerTermCode": "JRTCKXETXF",\
                        "termAttributes": {}\
                    }\
                },\
                "Reserved": {\
                    …\
```\
Ces attributs permettent ensuite de retrouver le produit correspondant, avec son SKU et son prix dans la région cible, à l'aide de la commande suivante :\
```\
aws pricing get-products --service-code AmazonEC2 --region eu-central-1 \\
 --filters 'Type=TERM_MATCH,Field="instanceType",Value="m5.large"' \\
 'Type=TERM_MATCH,Field=productFamily,Value="Compute Instance"' \\
 'Type=TERM_MATCH,Field="instanceFamily",Value="General purpose"' \\
 'Type=TERM_MATCH,Field="operatingSystem",Value="Linux"' \\
 'Type=TERM_MATCH,Field="licenseModel",Value="No License required"' \\
 'Type=TERM_MATCH,Field="locationType",Value="AWS Region"'\
```\
Le résultat fournit le produit équivalent :\
```\
{\
    "product": {\
        "productFamily": "Compute Instance",\
        "attributes": {\
            "enhancedNetworkingSupported": "Yes",\
            …\
            "gpuMemory": "NA",\
            "vpcnetworkingsupport": "true",\
            "instanceType": "m5.large",\
            …\
            "availabilityzone": "NA"\
        },\
        "sku": "223J7SG3VCFCDM9M"\
    },\
    "serviceCode": "AmazonEC2",\
    "terms": {\
        "OnDemand": {\
            "223J7SG3VCFCDM9M.JRTCKXETXF": {\
                "priceDimensions": {\
                    "223J7SG3VCFCDM9M.JRTCKXETXF.6YS6EN2CT7": {\
                        "unit": "Hrs",\
                        "endRange": "Inf",\
                        "description": "$0.112 per Unused Reservation Linux m5.large Instance Hour",\
                        "appliesTo": [],\
                        "rateCode": "223J7SG3VCFCDM9M.JRTCKXETXF.6YS6EN2CT7",\
                        "beginRange": "0",\
                        "pricePerUnit": {\
                            "USD": "0.1120000000"\
                        }\
                    }\
                },\
                "sku": "223J7SG3VCFCDM9M",\
                "effectiveDate": "2025-07-01T00:00:00Z",\
                "offerTermCode": "JRTCKXETXF",\
                "termAttributes": {}\
            }\
        }\
    },\
    "version": "20250715014947",\
    "publicationDate": "2025-07-15T01:49:47Z"\
```\
**Générer un script qui retrouve le SKU équivalent dans la région cible avec Amazon Q.**\
Écrire un script pour traiter le fichier CSV, rechercher chaque SKU dans la région source et trouver le SKU correspondant dans la région cible serait chronophage. Heureusement, Amazon Q, l'assistant IA d'AWS, m'a apporté une aide précieuse pour ces tâches.\
Rejoignez Medium gratuitement pour suivre les publications de cet auteur.\
S'abonner\
S'abonner\
Se souvenir de moi pour une connexion plus rapide\
J'ai d'abord installé Amazon Q CLI en suivant les instructions disponibles [ici](https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/command-line-installing.html). J'ai ensuite créé un nouveau dossier de projet et y ai copié le fichier CSV contenant le rapport DoiT. J'ai ouvert Amazon Q chat dans ce dossier et lui ai indiqué ce que je voulais accomplir. Mes instructions ressemblaient à ceci :\
![](https://media.doit.com/imports/medium/unattributed/8842b44b7ee5-1-wuj5blaso7dckj1gzkhjba.png)\
Utilisation d'Amazon Q pour générer l'estimation des coûts dans une région cible\
```\
Je veux créer un script Python qui :\
 - reçoit en entrée un fichier comme costbyskuvirginia.csv contenant la consommation actuelle des différents services AWS dans la région AWS Virginie.\
 - s'appuie sur l'AWS Price API pour retrouver le SKU actuel dans la région source AWS et utilise ses attributs pour retrouver le SKU correspondant dans la région cible AWS.\
 - produit en sortie une copie du même fichier d'entrée enrichie des mêmes informations, en incluant le prix dans la région de Francfort.\
```\
Avec ces instructions, Amazon Q a posé de bonnes bases :\
- Il met en place une logique fonctionnelle pour lire et traiter le fichier CSV.\
- Il établit les correspondances entre le nom de service AWS fourni dans le fichier d'entrée et le code de service AWS attendu par l'AWS Price API.\
- Il met en place la logique permettant d'interroger le SKU dans la région source.\
- Il esquisse une première logique de recherche du SKU à Francfort.\
- Il génère le nouveau fichier avec les mêmes champs pour Francfort et y ajoute quelques champs supplémentaires.\
Voici les champs pertinents de mon fichier costbyskuvirginia.csv initial :\
![](https://media.doit.com/imports/medium/unattributed/5933b3ae18ca-1-t2ueh4hlf9jm1nrb5pzvng.png)\
Fichier CSV avec la consommation Virginie par SKU\
Le résultat du script Python généré par Amazon Q ressemblait à ceci :\
![](https://media.doit.com/imports/medium/unattributed/32626b26fabe-1-3ipaaepmzpjownep_xlxfg.png)\
Les premiers calculs étaient corrects sur certaines lignes, mais j'ai repéré des problèmes sur d'autres. Dans certains cas, l'outil estimait les coûts au lieu de retrouver le SKU exact. J'ai aussi observé des écarts de coûts incohérents avec les schémas tarifaires attendus. En vérifiant les descriptions, j'ai constaté plusieurs incohérences. Par exemple, un SKU pour Amazon EKS cluster usage in US East (N. Virginia) à 0,08928 $ par heure était associé à EKS Auto Mode management of i3.2xlarge in EU (Frankfurt).\
J'ai tenté de demander à Amazon Q de résoudre ces écarts, mais ses approches ne réglaient pas le vrai problème. J'ai donc changé de stratégie et entamé une investigation manuelle, afin de pouvoir donner à Amazon Q des instructions claires.\
Ce travail manuel m'a permis de constater que certains SKUs, comme les instances Spot, ne figurent pas dans l'AWS Price API. Je les ai donc exclus de l'estimation.\
J'ai ensuite demandé à Amazon Q de repérer les lignes dont la description différait : autrement dit, sans tenir compte du prix ni de la région, le texte de description n'était pas le même. Pour cette tâche, Amazon Q a produit un script Python capable de fournir ces différences.\
Une fois ces écarts identifiés, j'ai vérifié manuellement et constaté que l'algorithme avait besoin d'attributs supplémentaires pour certains produits afin d'obtenir le bon SKU dans la région cible. Par exemple, les attributs de la famille de produits Compute Instance n'incluaient pas licenseModel. Conséquence : il retrouvait le SKU d'une instance Windows au lieu d'une Linux.\
Certains produits comportent plusieurs prix pour un même SKU ID. Dans ce cas, l'algorithme retrouvait bien le SKU correct dans la région cible, mais sélectionnait le premier prix de la liste. Le hic : il ne tenait pas compte de la tarification par paliers, où le prix dépend du volume d'utilisation.\
J'ai sollicité Amazon Q pour résoudre ce point. Avec des instructions détaillées, il a élaboré la logique permettant de choisir le bon palier tarifaire en fonction de la consommation. Après ces ajustements, l'algorithme estimait correctement les coûts pour 108 produits sur 140. Suffisant pour mon analyse.\
Une fois les calculs pour Francfort opérationnels, j'ai demandé à Amazon Q d'ajouter l'Irlande au script. Il a correctement intégré l'estimation pour l'Irlande et mis à jour le fichier de sortie en conséquence.\
Le code initial généré avec l'aide d'Amazon Q est disponible dans ce [repository](https://github.com/dianibar/estimate-aws-region-cost) GitHub public.\
Les prochaines étapes du projet :\
- Généraliser l'algorithme pour qu'il accepte un fichier d'entrée provenant de n'importe quelle région source et produise une estimation pour n'importe quelle région cible.\
- Détecter quand un nouveau service est sollicité dans l'estimation et adapter l'algorithme pour inclure les filtres requis.\
- Prendre en compte la fonctionnalité [AWS Pricing MCP Server](https://aws.amazon.com/blogs/aws-cloud-financial-management/aws-price-list-gets-a-natural-language-upgrade-introducing-the-aws-pricing-mcp-server/) récemment lancée par AWS.\
- Améliorer la qualité du code.\
Estimer le coût d'une infrastructure cloud AWS lors d'une comparaison entre régions est essentiel pour prendre des décisions éclairées. La **DoiT Console joue un rôle déterminant en fournissant les données de consommation actuelles** dans la région source, qui constituent le socle de l'analyse. Combinée à l'AWS Price API pour la tarification propre à chaque région et à Amazon Q pour l'automatisation, elle rend possible une estimation fiable des coûts.\