SAP-C02-143 · セクション 16 / タスク 3.5
Cost and Usage Reportを詳細分析する
AWS Cost and Usage Report / Line Item / Usage Type / Resource / Cost / Granular Analysis / Cost Driver
既存環境のコストベースラインを作成し、サービスやネットワークなどの大きなコスト領域を特定しても、
Amazon EC2のコストが高いだけでは、具体的なコストドライバーまで特定できない場合があります。
さらに掘り下げるには、
サービス
↓
課金明細
↓
使用タイプ
↓
リソース
↓
コストという粒度で確認します。
この詳細分析に利用できるのが AWS Cost and Usage Report(AWS CUR) です。
現在のAWSでは、詳細なコストと使用状況データを取得する新しい推奨方式として、AWS Data Exportsの Cost and Usage Report 2.0(CUR 2.0) も提供されています。
このページでは、個々の料金体系を再講義するのではなく、
集約されたコストを明細レベルまで掘り下げ、何がコストを発生させているかを特定する
ことに集中します。
ゴール
既存のコスト分析結果から、
高コスト領域
↓
AWS CUR
↓
Line Item
↓
Usage Type
↓
Resource
↓
Cost
↓
Cost Driverと掘り下げられることがゴールです。
例えば、
Amazon EC2
月額 300万円という結果だけではなく、
どの使用タイプか
どのリソースか
どの時間帯か
どの明細が
どれだけコストを発生させたかまで確認します。
1. AWS CURは集約結果を明細まで掘り下げる
AWS Cost Explorerでは、
サービス
アカウント
リージョン
使用タイプなどを使ってコストを分析できます。
一方、さらに細かく、
請求明細単位
+
使用タイプ
+
リソースID
+
使用量
+
コストをデータとして調査したい場合、AWS CURを利用できます。
イメージとしては、
集約されたコスト
Amazon EC2
300万円
│
▼
AWS CUR
│
├─ 明細A
├─ 明細B
├─ 明細C
└─ 明細Dのように掘り下げます。
ここでの目的は、
AWS CURを使うことそのものではありません。
集約値では見えなかったコストドライバーを明細から見つけることです。
2. 現在のAWSではCUR 2.0も理解する
現在のAWSでは、AWS Data Exportsの CUR 2.0 が詳細なAWSコスト・使用状況データを取得する推奨方式です。
CUR 2.0では、例えば、
時間粒度
HOURLY
DAILY
MONTHLYを設定できます。
また、
INCLUDE_RESOURCESを有効にすることで、対応する使用についてリソースレベルの情報を含められます。
ここで重要なのは列名そのものを暗記することではありません。
SAP-C02では、
時間単位の分析が必要か
個別リソースまで
特定する必要があるかのように、
必要な分析粒度に合わせて取得する情報を選ぶ
ことが重要です。
3. Line Itemは「1リソース」を意味しない
AWS CURでは、コストと使用状況が Line Item(明細項目) として記録されます。
重要なのは、
1 Line Item
=
1 Resourceではないことです。
同じEC2インスタンスでも、
コンピューティング使用
データ転送
関連する料金
割引が適用された使用などが別の明細として現れる場合があります。
逆に、
データ転送
APIリクエスト
割引
クレジット
税など、個別リソースへ直接結び付かない明細もあります。
したがって、
行数
=
リソース数とは判断しません。
4. LineItemTypeで「何の明細か」を先に確認する
明細を分析するときは、コスト値だけを見るのではなく、
この行は
何の種類の明細なのかを確認します。
AWS CURには、
Usage
DiscountedUsage
Fee
Credit
Refund
Taxなど、異なる種類の明細が存在します。
例えば、
-5,000円という値があっても、それが通常使用のマイナスコストとは限りません。
Credit
Refundなどである可能性があります。
そのため、
Cost
↓
LineItemType
↓
Usage Typeのように、明細の意味を確認してからコストドライバーを分析します。
5. Usage Typeで「何を使用した結果の料金か」を確認する
Usage Typeは、
その明細がどの種類の使用を表しているか
を確認する重要な項目です。
例えば、
EC2インスタンス稼働
データ転送
ストレージ
NAT Gatewayデータ処理など、同じサービスに関連するコストでも使用内容が異なる場合があります。
例えばサービス別集計では、
Amazon EC2
300万円だったとしても、明細へ掘り下げると、
Usage Type A
170万円
Usage Type B
90万円
Usage Type C
40万円となっているかもしれません。
この場合、
Amazon EC2が高いから、
Usage Type Aが
EC2関連コストの
主要なCost Driverまで絞れます。
6. Usage Typeごとの使用量は、Cost Driver判定の補助情報として使う
Usage Typeごとに使用量の単位が異なることは前提とします。
そのため、詳細分析では、
UsageAmountが最大
=
Cost Driverとは判断しません。
例えば、
Usage Type A
Cost 12万円
Usage Type B
Cost 28万円
Usage Type C
Cost 4万円であれば、
同じCost指標で
金額への寄与を比較します。
UsageAmountは、
なぜそのCostが発生したか
使用量が増えたためか
単価や課金条件によるものかを追加で調べるための情報として使います。
ここで重要なのは、
Usage Typeごとの使用量を並べることではなく、明細を共通のCost指標へ集約してCost Driverを特定すること
です。
7. ResourceIdで特定リソースまで掘り下げる
リソースレベルのデータが含まれている場合、ResourceIdを利用できます。
例えばAmazon EC2なら、
i-xxxxxxxxのようなインスタンスIDまで特定できる場合があります。
これにより、
EC2全体
300万円
↓
特定Usage Type
170万円
↓
i-aaaa
70万円
i-bbbb
55万円
i-cccc
45万円のように掘り下げられます。
ここまで分かれば、
EC2全体が高いではなく、
このUsage Typeの
このリソース群が
Cost Driverと判断できます。
8. ResourceIdは常に存在するとは限らない
ResourceIdには重要な注意点があります。
まず、リソースレベルの情報を含む設定が必要です。
さらに、リソースレベルデータを有効にしていても、
すべての明細に
ResourceIdが入るわけではありません。
例えば、
データ転送
APIリクエスト
割引
クレジット
税などでは、ResourceIdが空欄になる場合があります。
したがって、
ResourceIdが空
↓
AWS CURが壊れているとは判断しません。
その場合でも、
Usage Type
Operation
Account
Region / AZ
Costなど、利用できる別の情報を使って分析できます。
9. Granular Analysisでは必要な粒度を先に決める
詳細分析では、
細かければ細かいほど良いとは限りません。
必要なのは、
調査したいコストドライバーを識別できる粒度
です。
例えば、
どの月に増えたかだけなら月次でも分析できます。
一方、
毎日数時間だけ
コストが急増するのであれば、月次集計では原因を隠してしまいます。
月次
↓
1か月に集約
日次
↓
日ごと
時間単位
↓
時間帯ごとと、調査目的に合わせます。
同様に、
サービス単位で十分なのか、
個別Resourceまで必要なのかも分けます。
CUR 2.0では時間粒度やリソース情報の有無を、必要な分析に合わせて設定します。
10. 月次データから時間単位の原因は復元できない
例えば、
月額
100万円という月次データだけを保持していて、
毎週火曜日
02:00〜04:00
だけコスト急増という原因を調べたい場合があります。
しかし月次に集約された後では、
どの時間に
どの明細が増えたかを後から復元できません。
したがって、
必要な分析粒度
↓
レポートの時間粒度を合わせます。
これは、
データ量を増やすために
常にHOURLYという意味ではありません。
必要な原因分析ができる最小粒度を選びます。
11. Costは分析目的に合わせて同じ指標で比較する
AWS CURには複数のコスト関連項目があります。
例えば、
Unblended Cost
Blended Costなどです。
さらにReserved InstancesやSavings Plansを含む分析では、それぞれに関連するコスト項目も存在します。
ここで重要なのは、
ある明細はUnblended Cost
別の明細はBlended Costのように異なる尺度を混在させて順位付けしないことです。
分析目的に応じてコスト指標を選び、
対象期間
+
対象範囲
+
Cost指標をそろえて比較します。
このページの例では、特に断りがない限り、
同じCost指標で比較済みとして扱います。
12. サービス総額からCost Driverまで掘り下げる
例えば、ある月に、
Amazon EC2関連コスト
300万円だったとします。
詳細分析すると、
Usage Type A
170万円
Usage Type B
80万円
Usage Type C
50万円でした。
さらにUsage Type AをResourceIdで見ると、
i-aaa
90万円
i-bbb
50万円
i-ccc
30万円だったとします。
すると、
Amazon EC2
300万円
↓
Usage Type A
170万円
↓
i-aaa
90万円まで絞れます。
この場合、
Amazon EC2というサービス名だけより、
Usage Type A
+
i-aaaの方が、改善対象を検討するための具体的な情報になります。
13. ResourceIdだけで分析を終わらせない
個別リソースを特定できても、
i-aaaが高いだけでは原因分析として不十分な場合があります。
同じリソースに、
Usage Type A
Usage Type B
Usage Type Cという複数の明細がある可能性があるからです。
したがって、
ResourceId
+
Usage Type
+
Costを組み合わせます。
例えば、
i-aaa
総額90万円を、
Usage Type A
75万円
Usage Type B
10万円
Usage Type C
5万円へ分解すれば、
リソースが高い理由
まで特定できます。
14. Line ItemからCost Driverを特定する流れ
詳細分析では、次のように段階的に絞ります。
既存の高コスト領域
↓
対象期間を固定
↓
Line Itemを取得
↓
LineItemTypeを確認
↓
Usage Typeで分類
↓
必要ならResourceIdで分類
↓
同じCost指標を集計
↓
寄与度を比較
↓
Cost Driverを特定例えば、
Amazon EC2が高いという状態から始めても、
最終的には、
特定Usage Type
+
特定Resource
+
特定期間まで絞り込めます。
15. 詳細分析では複数の切り口で集計する
AWS CURを使う詳細分析では、
対象期間
↓
対象Service
↓
Usage Type
↓
ResourceId
↓
Costのように、必要な切り口で集計します。
重要なのは特定の分析ツールやSQL構文ではなく、
大きな集約値
↓
明細データ
↓
複数の切り口で再集計
↓
Cost Driverという分析アプローチです。
16. 集約値と明細値を混同しない
例えばAWS Cost Explorerで、
Amazon EC2
300万円と表示されたとしても、
AWS CURで確認すると、
Usage
DiscountedUsage
Fee
Credit
Refundなど、異なる種類のLine Itemが関係している場合があります。
そのため、
Cost Explorerのサービス総額
=
CURの任意の1種類の行を
そのまま合計とは限りません。
詳細分析では、
どのLineItemTypeを含めているか
どのCost指標を使っているか
どの期間を集計しているかを明確にします。
17. 集約されたコスト領域から明細へ掘り下げる
前段の分析で、
Inter-AZ
42%
NAT Gateway関連
30%のように、総コストへの影響が大きい領域まで絞れている場合があります。
さらに原因を特定する必要があれば、
そのコストを
構成する明細は何か
どのUsage Typeか
どのResourceかへ掘り下げます。
つまり、
コスト領域を特定
↓
明細へ分解
↓
Cost Driverを特定という流れです。
18. Cost Driverを特定したところで分析を区切る
AWS CURで、
i-aaa
75万円のように、具体的なResource・Usage Type・Costまで特定できれば、技術的なコストドライバーの分析は一段階完了です。
ここでは、
Resource
+
Usage Type
+
Costまでを明確にします。
その後、このコストを組織や業務上の単位へ整理する必要がある場合は、別のコスト管理情報と組み合わせて分析します。
この詳細分析では、まずどの技術的な使用がコストを発生させているかを確定させることに集中します。
混同ポイント
| 混同 | 正しい判断 |
|---|---|
| 1 Line Item = 1 Resource | 同じResourceに複数Line Itemが存在し得る |
| ResourceIdが空ならレポート異常 | データ転送などでは空欄になる場合がある |
| 最大UsageAmount = Cost Driver | 同じCost指標で金額への寄与も確認する |
| 月次CURから時間単位のスパイクを特定できる | 必要な時間粒度でデータを保持する |
| Cost指標はどれでも同じ | 分析目的に合う同一Cost指標で比較する |
| Resourceが分かれば原因分析終了 | ResourceIdとUsage Typeを組み合わせる |
SAP-C02での判断
既存環境で、
コストが高いという集約結果だけでは改善対象を絞れない場合、
より詳細な課金データが必要?
↓
AWS CUR / CUR 2.0
何の明細?
↓
LineItemType
何を使用した?
↓
Usage Type
どのリソース?
↓
ResourceId
※利用可能な場合
いくら発生した?
↓
同じCost指標
どれが総額を動かしている?
↓
Cost Driverと考えます。
決定打は、
AWS CURを取得することではなく、Line Itemを適切な粒度で集計し、具体的なCost Driverまで掘り下げること
です。
まとめ
AWS Cost and Usage Reportは、AWSのコストと使用状況を明細レベルで分析するために利用できます。
現在のAWSでは、AWS Data ExportsのCUR 2.0が詳細なAWSコスト・使用状況データを取得する推奨方式です。
Line Itemは1リソースそのものではなく、1つの課金・使用状況明細です。
Usage Typeから、その明細がどのような使用を表すか確認できます。
リソースレベルデータが利用可能な場合はResourceIdを使って個別リソースまで掘り下げられます。
ただしResourceIdはすべての使用タイプで存在するわけではありません。
Usage Typeごとの使用量はCost Driver判定の補助情報として利用し、主要なコスト寄与は同じCost指標で比較します。
Granular Analysisでは、
時間粒度
+
使用タイプ
+
リソース粒度
+
Costを分析目的に合わせます。
最終的には、
サービス総額
↓
Line Item
↓
Usage Type
↓
Resource
↓
Cost
↓
Cost Driverまで掘り下げます。
理解確認
このページの内容を4問で確認します。
理解確認4問へ →