※アフィリエイト広告を利用しています。

AzureVMの価格(従量・1年予約・3年予約)を一括取得!Pythonによるコスト比較を実現する

Azure

はじめに

AzureVMの料金計算ツールで、従量課金だといくらか、予約したらいくらかと画面をポチポチしながら考えるのが面倒でした。また、既存で動いているVMが実際にどれくらいかかっているのかをせっかくPowerShellで抽出しているので突合して、運用している身としてパッと把握したい局面もあります。

そこで、Pythonを用いて「https://prices.azure.com/api/retail/prices 」から「従量課金・1年予約・3年予約」の価格データを網羅したCSVを自動的に一括取得するロジックを作成しました。後工程でさらにデータ加工はしておりますが、備忘をこめて紹介します。

この仕組みを導入するメリット

  • VMサイズの「従量課金」「1年予約」「3年予約」が1行に並んだCSVが出力される。概算はこれで十分試算できる(ディスク料金など他要因はなし)
  • BIツールなど二次利用しやすい

作成したPythonプログラム

生成AI(Copilot)で何往復かラリーして完成させました。変数部分を調整すればすぐ使えると思います。Python環境の事前準備は必要不可欠です。

import requests
import csv
import time

region = <リージョン>
output_file = r<出力パス>
base_url = "https://prices.azure.com/api/retail/prices"
params = {
    "$filter": f"serviceName eq 'Virtual Machines' and armRegionName eq '{region}'"
}

# 指定された列順序
fixed_order = [
    "meterId", "effectiveStartDate", "tierMinimumUnits", "isPrimaryMeterRegion", "armSkuName",
    "serviceFamily", "effectiveEndDate", "unitOfMeasure", "unitPrice", "currencyCode",
    "serviceId", "reservationTerm", "skuName", "skuId", "armRegionName", "productId",
    "meterName", "retailPrice", "productName", "type", "serviceName", "location"
]

all_keys = set()
all_items = []

next_page = base_url
while next_page:
    try:
        response = requests.get(next_page, params=params if next_page == base_url else None, timeout=30)
        data = response.json()
        items = data.get("Items", [])
        all_items.extend(items)
        for item in items:
            all_keys.update(item.keys())
        next_page = data.get("NextPageLink")
        time.sleep(1)
    except requests.exceptions.RequestException as e:
        print(f"エラー発生: {e}")
        print("5秒後に再試行します...")
        time.sleep(5)

# 未知のキーを最後に追加(固定順序にないもの)
dynamic_keys = [k for k in all_keys if k not in fixed_order]
final_order = fixed_order + dynamic_keys

# CSV出力
with open(output_file, "w", newline="", encoding="utf-8") as f:
    writer = csv.DictWriter(f, fieldnames=final_order)
    writer.writeheader()
    for item in all_items:
        writer.writerow(item)

print(f"CSV出力完了: {output_file}({len(all_items)}件)")

項目の最重要ポイント解説

少なくとも、以下押さえておけば概算費用管理できます。

  • 価格はドル建て
  • armSkuName:インスタンスタイプ(例:Standard_D4s_v6)
  • reservationTerm:none(従量課金)、1 Year、3 Year
  • unitprice:none(1時間当たりの金額)、1 Year(1年分の金額)、3 Year(3年分の金額)
    →つまり比較しやすくするなら、例えば月額を計算することでRIでどれくらいのコストダウンが実現できるか把握できる

まとめ

以上で、『AzureVMの価格(従量・1年予約・3年予約)を一括取得!Pythonによるコスト比較を実現する』でした。

Python環境は必要ですが、構築・自動化できればかなり楽にVM構築時およびランニング時の概算費用算出ができるので参考になれば幸いです。

タイトルとURLをコピーしました