Azureサービスの最新の価格を知りたい

このエントリは2024/11/22現在の情報に基づいています。将来の機能追加や変更に伴い、記載事項からの乖離が発生する可能性があります。

問い合わせ

昨日のStream有効時のtoken usageの最新状況を問い合わせてきたいつもの人から、更問をもらった。

今後社内でAOAIを使ってもらうときに、利用モデル、トークンに応じて課金し、各部署に請求しようと思っているのだが、Azureのトークン単価をPricingのページからコピー&ペーストするのはどうにもつらい。最新に追随しやすく、かつ自動化できる仕組みってないの?

「気持ちはわかるぞ、気持ちは…。でもAzureの単価にちょっと上乗せするんだったら、上前がばれるんちゃうの?知らんけど」と思ったのはないしょ。

解決策

AzureのPricingページの情報は、Azure Retail Prices REST APIで取得できる。

Azure 小売価格の概要 / Azure Retail Prices overview
https://learn.microsoft.com/rest/api/cost-management/retail-prices/azure-retail-prices

ドキュメントに重要と記載があるように、サービス価格はUSDで決まる(JPYはその時々の為替で金額が変わる)ので、単価を取得する際にはUSDで取得しておくのが確実。

The currency that Microsoft uses to price all Azure services is USD. Prices shown in USD currency are Microsoft retail prices. Other non-USD prices returned by the API are for your reference to help you estimate budget expenses.(Microsoft がすべての Azure サービスの価格を設定するために使用する通貨は USD です。 USD 通貨で表示される価格は、Microsoft の小売価格です。 API によって返されるその他の米国ドル以外の価格は、予算経費を見積もるのに役立つ参照用です。)

使ってみる

最新バージョンは https://prices.azure.com/api/retail/prices?api-version=2023-01-01-preview 。単純にGETで呼びだしてもいいが、サービスSKUの個数が大量にあるので、1,000件でページネーションするようになっている。

GET https://prices.azure.com/api/retail/prices?api-version=2023-01-01-preview&meterRegion='primary'
{
  "BillingCurrency": "USD",
  "CustomerEntityId": "Default",
  "CustomerEntityType": "Retail",
  "Items": [{...}],
  "NextPageLink": "https://prices.azure.com:443/api/retail/prices?api-version=2023-01-01-preview&meterRegion=%27primary%27&$skip=1000",
  "Count": 1000
}

例えばJapan East、Azure OpenAI Serviceの価格を知りたい場合には、条件式として

$filter=armRegionName eq 'japaneast' and productName eq 'Azure OpenAI'

をクエリ文字列として追加すればよい。

Pricingのページとちょっと違うのでは?

APIからの出力単価と違うのでは、という指摘をもらったが、これはAPIレスポンスに含まれるunitOfMeasureが同じではないから。APIの結果は1Kあたりの単価であり、Pricingページの単価は1Mあたりの単価なので、注意が必要。

参考のため、2024/11/22現在の東日本リージョンにおけるGPT-4o Realtime Preview (Global) の単価を例示する(行数が大きいため、jqで整形済み)。

# 東日本、Azure OpenAIの、GPT-4o Realtime Preview (Global)
# GET https://prices.azure.com/api/retail/prices?api-version=2023-01-01-preview&meterRegion='primary'&$filter=armRegionName eq 'japaneast' and productName eq 'Azure OpenAI' and contains(meterName, 'realtime')
cat response.json | jq -rc '.Items[] | "\(.skuName): (Unit \(.unitOfMeasure)) UnitPrice: \(.unitPrice)"'
gpt4o realtimePrvw audio inp glbl: (Unit 1K) UnitPrice: 0.1
gpt4o realtime prvw text outp glbl: (Unit 1K) UnitPrice: 0.02
gpt4o realtimePrvw audio outp glbl: (Unit 1K) UnitPrice: 0.2
gpt4o realtime prvw text inp glbl: (Unit 1K) UnitPrice: 0.005

対して、Pricingのページ。Pricingページでは、1Mあたりになっていることがわかる。

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください