こんにちは、基盤整備グループの池田です。
去年の10月頃に入社しまして、4か月ほどが経過しました。
私は以前からAWSのサービスは利用していたものの、コスト面についてはあまり意識していませんでした。
ですが、AWSを利用する上ではコスト管理は欠かせないということで、今回はAWSの利用料金の内訳を確認していきたいと思います。
AWSの利用料金を確認するサービスとしてはAWS BillingやAWS Cost Explorerが挙げられます。
条件を絞って料金を確認したいので、AWS Cost Explorerを利用していこうと思います。
しかし、ここで1つ問題があります。
AWS Cost Explorerを開き、料金を確認するだけであれば、AWSユーザーにとってシンプルで分かりやすいのですが、
AWSコンソールの閲覧権限がない人もいますし、偉い人に「自分でAWS Cost Explorerを開いて確認してください」と言うのも中々難しいと思います。
ということで、料金データをダウンロードして渡せばいいのですが、
「AWSにログインして、Cost Explorerを開き、条件を設定し、CSVをダウンロードして、データを整形し、整形したデータを提出する」
上記のような方法で毎月コストを確認していくと、思ったより手間が掛かってしまいます。
毎月であれば我慢でも良いかもしれませんが、もしかしたら毎週…毎日料金のデータが必要になるかもしれません。
人の手が加わる以上、間違いが起こるかもしれませんし、学習コストも掛かります。
何より面倒です。面倒だと感じることは何回もやるうちに手順が抜けてしまったりするものですし、そもそも時間の無駄です。
AWS CLIからAWS Cost Explorerのデータを取得し、その場でデータを整形し、料金の確認に適したサービスにデータを格納する。
このような流れにすることで、人的ミスや学習コストを減らし、見やすい形で料金データを閲覧できるようになります。
なのでこの流れをやってみましょう。というのが今回のテーマです。
AWS Cost ExplorerをAWS CLIから利用する
まずは、AWS Cost ExplorerをAWS CLIから利用することで料金のデータを抜き出していきたいと思います。
AWS CLIを使える環境であればどこでも大丈夫ですが、コマンドを叩くだけであればAWS Cloud Shellなどで実行するのが簡単だと思います。
1 |
$ aws ce get-cost-and-usage --time-period Start=`date -d '1 month ago' '+%Y-%m'`-01,End=`date '+%Y-%m'`-01 --granularity MONTHLY --metrics UnblendedCost |
先月の料金を取得します。
オプションなど、コマンドの詳細はAWS CLIコマンドリファレンスをご覧ください。
JSON形式でこのようなデータが取得できました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
{ "ResultsByTime": [ { "TimePeriod": { "Start": "2022-12-01", "End": "2023-01-01" }, "Total": { "UnblendedCost": { "Amount": "12345.12345", "Unit": "USD" } }, "Groups": [], "Estimated": false } ], "DimensionValueAttributes": [] } |
aws ceコマンドを使いこなせば、サービス毎の利用料金、インスタンスタイプ別という形でもデータを取得することができ、
詳細なコスト分析が行えるようになります。
データを整形する
先ほどのコマンドでデータを取得できることが分かりました。
JSONなのでデータとしては扱いやすいですが、コマンドによっては量が増えていきますし、データを保存するには不要な情報が多いと思います。
なので、データ活用の為の準備として、データの整形を行っていきます。
データの整形の方法として、プログラミング言語を使ったり、手動でテキスト化したりと、やり方は無限にありますが、
今回はjqコマンドというものを使用していきます。
jqのインストール方法や使い方についてはjqの公式サイトをご覧ください。
では、先ほど入力したAWS CLIのコマンドの末尾にjqを追加し、使用したいデータだけを抜き出していきます。
1 |
$ aws ce get-cost-and-usage --time-period Start=`date -d '1 month ago' '+%Y-%m'`-01,End=`date '+%Y-%m'`-01 --granularity MONTHLY --metrics UnblendedCost | jq -r '.ResultsByTime[0].Total.UnblendedCost.Amount' |
先ほど入力したAWS CLIコマンドの結果をパイプライン(|)を使用してjqコマンドに渡しています。
1 |
jq -r '.ResultsByTime[0].Total.UnblendedCost.Amount' |
今回はシンプルに、Amountの値を抜き出しています。
1 |
12345.12345 |
必要なデータだけ抜き出すことができました。
jqコマンドを活用すれば複雑な形のJSONデータでも簡単に整形することが出来ます。
データの活用について
ここまでの内容で、AWS Cost Explorerからデータを取得し、jqで整形し、コストデータを活用できる形にしました。
このデータをどのように活用していくかを考えてみます。
■ CSV/Excelファイル
取得したデータをファイルとして保存し、CSVやExcelファイルなどで確認できるようにする方法です。
楽だとは言えないですが、好きな形に編集が出来るので分かりやすいです。
料金のグラフを作り、見やすく資料化することもできます。
■ Google Spread Sheet
料金データをGoogle Spread Sheet APIを利用して入力していく方法です。
エンジニア以外の方でも馴染みのあるサービスだと思いますので、こちらに出力して共有するパターンは多いと思います。
■ データベース
データ蓄積用のサービスや自前のデータベースを利用して、料金データを保存していく方法です。
様々な種類の料金データをデータベースに保存していけば、それを自動でグラフ化したり、自作のコストアラートを出したり、出来ることが無限に広がりそうです。
最後に
ここまで読んでいただきまして、ありがとうございました。
これらをcrontabや外部サービスを利用し自動実行できるようにすると、コストを手動で抽出して資料化する必要がなくなります。
今回はAWS Cost Explorerのデータ活用をテーマに記事を書きましたが、コスト以外でも分析したいデータがあれば応用ができます。
活用出来そうなデータが見つかれば、それをうまく活用してデータ分析をしてみましょう。
以上、池田でした。