請求明細のSavings Plansに書いてあるSKUについて
はじめに
皆様こんにちは、あかいけです。
突然ですがAWSの請求明細、見ていますでしょうか?
私はコストアセスメントで定期的にお客様の請求明細と睨めっこしているのですが、
ふとSavings Plans関連の明細の記述が気になりました。
まず請求明細においてSavings Plansに関連した利用費は以下の要素で構成されています。
- オンデマンドEC2の利用料金
- オンデマンドEC2の利用料金に対するSavings Plansの打ち消し料金
- Savings Plansの購入料金
product_name | usage_type | availability_zone | item_description | usage_quantity | rate | cost |
---|---|---|---|---|---|---|
Amazon Elastic Compute Cloud | APN1-BoxUsage:t3.small | ap-northeast-1a | $0.0272 per On Demand Linux t3.small Instance Hour | 720 | 0.0272000000 | 19.5 |
Amazon Elastic Compute Cloud | APN1-BoxUsage:t3.small | ap-northeast-1a | SavingsPlanNegation used by AccountId : XXXXXXXXXXX and UsageSku : 7MJR4RD25PP93ENY | 720 | -0.0272000000 | -19.5 |
Savings Plans for AWS Compute usage | APN1-EC2SP:t3.1yrNoUpfront | 1 year No Upfront t3 EC2 Instance Savings Plan in ap-northeast-1 | 720 | 0.8428000000 | 606.816 |
この中のitem_description
に以下の記述がありますが、このSKUとは何を指しているのでしょうか?
SavingsPlanNegation used by AccountId : XXXXXXXXXXX and UsageSku : XXXXXXXXXXXX
またSavings Plansのドキュメント上でも、SKUについて特に説明はありません。
というわけで、このSKUがなんなのか調べてみました。
なお請求明細のダウンロード方法については以下をご参照ください。
結論
Savings Plansの利用明細に記載されているSKUは、Savings Plansが適用された製品のSKU です。
例えば冒頭の以下明細であれば、ap-northeast-1aのt3.smallインスタンスタイプ(7MJR4RD25PP93ENY)にSPが適用
されていることを表します。
product_name | usage_type | availability_zone | item_description | usage_quantity | rate | cost |
---|---|---|---|---|---|---|
Amazon Elastic Compute Cloud | APN1-BoxUsage:t3.small | ap-northeast-1a | $0.0272 per On Demand Linux t3.small Instance Hour | 720 | 0.0272000000 | 19.5 |
Amazon Elastic Compute Cloud | APN1-BoxUsage:t3.small | ap-northeast-1a | SavingsPlanNegation used by AccountId : XXXXXXXXXXX and UsageSku : 7MJR4RD25PP93ENY | 720 | -0.0272000000 | -19.5 |
Savings Plans for AWS Compute usage | APN1-EC2SP:t3.1yrNoUpfront | 1 year No Upfront t3 EC2 Instance Savings Plan in ap-northeast-1 | 720 | 0.8428000000 | 606.816 |
AWSにおけるSKUと探し方
AWSにおけるSKUについて
AWSでは、基本的にすべての製品やサービスに一意の識別子としてSKU (Stock Keeping Unit) が割り当てられています。
普段意識することはないですが、AWSの課金システムを支えている重要な要素です。
SKUの基本概念
- 定義: SKUはAWSの各サービス、リージョン、インスタンスタイプなどの組み合わせに対して一意に割り当てられる製品識別子
- 用途: 請求処理、価格設定、リソース追跡に使用される
- 形式: 英数字の組み合わせ(例:
7MJR4RD25PP93ENY
)
Savings PlansとSKUの関係
以下ドキュメントの記載から分かる通り、Savings Plans自体はSKUを持ちませんが、
請求明細では適用対象となるサービス(EC2インスタンスなど)のSKUが記載されます。
The Price List Query API doesn't support Savings Plan prices.
SKUの探し方
AWS Price List Query API
、
またはPrice List Bulk API
を使用すると、SKUに関する情報を効率的に検索できます。
今回はAWS Price List Query APIを使ってみます。
なおPrice List Bulk APIの利用例は、よろしければ以下をご参照ください。
基本的な検索方法
- サービス一覧の取得
まず aws pricing describe-services
で製品の一覧が確認できます。
# すべてのサービスを取得
aws pricing describe-services --region us-east-1
# サービス名のみを抽出
aws pricing describe-services --region us-east-1 | jq -r '.Services[] | .ServiceCode'
- 特定のインスタンスタイプからSKUを探す
次に aws pricing get-products
で特定の製品情報を確認できます。
以下は一例です。
# AWS Lambdaの製品情報一覧
aws pricing get-products --service-code AWSLambda \
--region us-east-1 | jq -r '.PriceList[]' | jq '.'
# Amazon EC2 t3.smallでフィルタリング
aws pricing get-products --service-code AmazonEC2 \
--filters "Type=TERM_MATCH,Field=instanceType,Value=t3.small" \
--region us-east-1 | jq -r '.PriceList[]' | jq '.'
# 東京リージョンのEC2 t3.smallでフィルタリング
aws pricing get-products --service-code AmazonEC2 \
--filters "Type=TERM_MATCH,Field=instanceType,Value=t3.small" \
"Type=TERM_MATCH,Field=location,Value=Asia Pacific (Tokyo)" \
--region us-east-1 | jq -r '.PriceList[]' | jq '.'
- SKUから製品情報を逆引き
また以下のようにすればSKUから該当する製品を逆引きできます。
aws pricing get-products --service-code AmazonEC2 \
--filters "Type=TERM_MATCH,Field=sku,Value=7MJR4RD25PP93ENY" \
--region us-east-1 | jq -r '.PriceList[]' | jq '.'
さいごに
以上、請求明細のSavings Plansに書いてあるSKUについてでした。
Savings Plansの明細に記載されているSKUは、単にSavings Plansが適用された製品(今回の場合はEC2インスタンス)のSKUを表しているだけでしたが、この情報を理解することで請求明細をより深く知れて満足しました。
おそらく実務で活用するタイミングはあまりないでしょうが、AWSの料金形態の裏側を見たい時に使っていただければ幸いです。