Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

Stima il costo della tua infrastruttura cloud AWS in una nuova regione

By Diana BarretoAug 7, 20257 min read

Questa pagina è disponibile anche in English, Deutsch, Español, Français, 日本語 e Português.

Come sfruttare DoiT Console, Amazon Price API e l'assistente AI Amazon Q per accelerare la stima dei costi dell'infrastruttura cloud AWS in una regione di destinazione

Capire le differenze di costo tra le regioni AWS è fondamentale quando si pianificano modifiche all'infrastruttura. Permette di individuare quale regione risulta più conveniente in base allo specifico caso d'uso: per esempio quando si sceglie una regione per il disaster recovery, una regione in cui espandere il proprio business o una regione verso cui migrare l'infrastruttura esistente.

In questo articolo le mostro come ho stimato il costo di spostare la mia infrastruttura AWS dalla Virginia (us-east-1) verso due regioni europee: Francoforte (eu-central-1) e Irlanda (eu-west-1). Per l'analisi ho utilizzato tre strumenti principali: la DoiT Console, Amazon Q e le AWS Price API.

Usare la DoiT Console per ottenere l'utilizzo attuale in Virginia.

La DoiT Console è un'applicazione web che permette ai clienti di interagire con la suite di prodotti DoiT. Comprende report che offrono una visualizzazione dettagliata e flessibile del cloud billing.

Il primo passo è stato sfruttare uno dei report DoiT per estrarre i dati di utilizzo cloud attuali della Virginia, che sarebbero poi serviti come input per la stima dei costi. Per farlo ho utilizzato il report "Services Breakdown" della DoiT Console, personalizzandolo così:

• Passando alla vista tabellare

• Cambiando la metrica da costo a utilizzo

• Impostando il periodo temporale su mensile

• Raggruppando i dati per Account, Service, SKU, SKU ID e Unit

La configurazione è mostrata nell'immagine qui sotto:

Personalizzazione del report predefinito DoiT Service Breakdown

Ho quindi scaricato il report e ho usato il file CSV come input per la stima:

Esportazione del report DoiT

Le AWS Price API come strumento per stimare i costi in una regione diversa.

Il report mostra utilizzo, SKU ID e prezzi di tutti i servizi attualmente attivi in Virginia. Sono dati che posso usare per individuare gli SKU ID e i prezzi equivalenti a Francoforte e in Irlanda, e calcolare poi i costi stimati per ciascuna regione.

Le AWS Price API forniscono informazioni sui prezzi per tutti i servizi AWS. Includono una funzione GetProducts che permette di cercare i prodotti tramite attributi specifici. Avendo gli SKU ID dal report DoiT, posso usarli per ottenere informazioni dettagliate sui prodotti. Tramite l'AWS CLI posso recuperare questi attributi con il seguente comando:

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": {\
                    …\
```\
Questi attributi possono poi essere utilizzati per individuare il prodotto corrispondente, con relativo SKU e prezzo, nella regione di destinazione, tramite il seguente comando:\
```\
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"'\
```\
Il risultato restituisce il prodotto equivalente:\
```\
{\
    "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"\
```\
**Generare con Amazon Q uno script per trovare lo SKU equivalente nella regione di destinazione.**\
Scrivere uno script che elabori il file CSV, cerchi ogni SKU nella regione attuale e individui lo SKU corrispondente nella regione di destinazione richiederebbe parecchio tempo. Amazon Q, l'assistente basato su AI di AWS, si è invece rivelato di grande aiuto in queste attività.\
Iscriviti gratuitamente a Medium per ricevere gli aggiornamenti di questo autore.\
Iscriviti\
Iscriviti\
Ricordami per accedere più rapidamente\
Per prima cosa ho installato Amazon Q CLI seguendo le istruzioni disponibili [qui](https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/command-line-installing.html). Ho poi creato una nuova cartella di progetto e vi ho copiato il file CSV con il report DoiT. In quella cartella ho aperto la chat di Amazon Q e le ho fornito le istruzioni su ciò che volevo ottenere. Le istruzioni erano simili a queste:\
![](https://media.doit.com/imports/medium/unattributed/8842b44b7ee5-1-wuj5blaso7dckj1gzkhjba.png)\
Utilizzo di Amazon Q per generare la stima dei costi in una regione di destinazione\
```\
Voglio creare uno script Python che:\
 - riceva in input un file come costbyskuvirginia.csv con l'utilizzo attuale dei diversi servizi AWS nella regione AWS Virginia.\
 - utilizzando le AWS price API, sia in grado di trovare lo SKU attuale nella regione AWS di origine e, tramite gli attributi, individuare lo SKU corrispondente nella regione AWS di destinazione.\
 - produca in output una copia dello stesso file di input arricchita con le medesime informazioni, incluso il prezzo nella regione di Francoforte.\
```\
Con questo input Amazon Q ha svolto un buon lavoro iniziale:\
- Crea una logica funzionante per leggere ed elaborare il file CSV.\
- Crea le mappature dal nome del servizio AWS indicato nel file di input al codice del servizio AWS richiesto dalle AWS price API.\
- Crea la logica per interrogare lo SKU nella regione di origine.\
- Crea una logica iniziale per cercare lo SKU a Francoforte.\
- Genera il nuovo file con gli stessi campi riferiti a Francoforte e aggiunge alcuni campi supplementari.\
I campi rilevanti del mio file iniziale costbyskuvirginia.csv erano i seguenti:\
![](https://media.doit.com/imports/medium/unattributed/5933b3ae18ca-1-t2ueh4hlf9jm1nrb5pzvng.png)\
File csv con l'utilizzo dei costi della Virginia per SKU\
L'output dello script Python generato da Amazon Q era simile al seguente:\
![](https://media.doit.com/imports/medium/unattributed/32626b26fabe-1-3ipaaepmzpjownep_xlxfg.png)\
I calcoli iniziali erano corretti per alcune righe, ma su altre ho riscontrato dei problemi. In alcuni casi lo strumento stimava i costi anziché trovare lo SKU esatto corrispondente. Ho rilevato anche differenze di costo che apparivano incoerenti rispetto ai pattern di prezzo attesi. Verificando le descrizioni, ho scoperto delle incongruenze: per esempio, accoppiava uno SKU per "Amazon EKS cluster usage in US East (N. Virginia)" a 0,08928 $ all'ora con "EKS Auto Mode management of i3.2xlarge in EU (Frankfurt)".\
Ho provato a chiedere ad Amazon Q di risolvere queste discrepanze, ma ha tentato approcci che non andavano alla radice del problema. Ho quindi cambiato strategia avviando un'analisi manuale delle anomalie, in modo da poter dare ad Amazon Q istruzioni più chiare.\
Con questa analisi manuale ho scoperto che alcuni SKU, come quelli delle istanze Spot, non sono inclusi nelle AWS price API. Per questo motivo li ho esclusi dalla stima.\
Ho poi chiesto ad Amazon Q di trovare le righe in cui la descrizione differiva, ovvero le righe in cui, escludendo prezzo e regione, il testo della descrizione risultava diverso. Per questo task Amazon Q ha creato uno script Python ed è riuscito a evidenziare le differenze.\
Dopo aver identificato le differenze, ho fatto una verifica manuale e ho riscontrato che, per alcuni prodotti, l'algoritmo doveva fornire attributi aggiuntivi per ottenere lo SKU corretto nella regione di destinazione. Per esempio, gli attributi della product family "Compute Instance" non includevano licenseModel: per questo motivo trovava lo SKU di un'istanza Windows invece di quella Linux.\
Alcuni prodotti hanno più prezzi per lo stesso SKU ID. In questo caso l'algoritmo trovava lo SKU corretto nella regione di destinazione, ma sceglieva il primo prezzo dell'elenco. Era un problema, perché non teneva conto del tiered pricing, in cui il prezzo dipende dal volume di utilizzo.\
Ho usato Amazon Q per risolvere anche questo aspetto: gli ho fornito istruzioni dettagliate e ha creato la logica per selezionare la fascia di prezzo corretta in base all'utilizzo. Dopo queste modifiche, l'algoritmo è riuscito a stimare i costi per 108 prodotti su 140: sufficienti per la mia analisi.\
Una volta ottenuti calcoli affidabili per Francoforte, ho chiesto ad Amazon Q di aggiungere allo script anche l'Irlanda. Ha aggiunto correttamente la stima per l'Irlanda e aggiornato di conseguenza il file di output.\
Il codice iniziale generato con l'aiuto di Amazon Q è disponibile in questo [repository](https://github.com/dianibar/estimate-aws-region-cost) pubblico su GitHub.\
I prossimi passi del progetto saranno:\
- Generalizzare l'algoritmo affinché possa ricevere un file di input da una qualsiasi regione di origine e produrre una stima per una qualsiasi regione di destinazione.\
- Riconoscere quando nella stima viene richiesto un nuovo servizio e aggiornare l'algoritmo per includere i filtri necessari.\
- Valutare la funzionalità [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/) recentemente lanciata da AWS.\
- Migliorare la qualità del codice.\
Stimare il costo dell'infrastruttura cloud AWS confrontando le diverse regioni è essenziale per prendere decisioni consapevoli. La **DoiT Console svolge un ruolo cruciale fornendo i dati di base sull'utilizzo attuale** nella regione di origine. Questo input dettagliato, abbinato alle AWS Price API per i prezzi specifici di ciascuna regione e ad Amazon Q per l'automazione, consente una stima dei costi affidabile.\