複数OrganizationsのAWSコストをまとめて可視化してみた

## はじめに
パブリッククラウドを利用する上で、コストのモニタリングは大切な運用作業です。財務の面ではもちろんですが、コスト増加の背景には意図しない設定変更やセキュリティインシデントが隠れていることもあります。毎月のコストを確認して増減の原因を特定・改善することで、クラウド環境を最適化できます。

弊社のCCoEでも定期的にコストを調査することで、誤った設定を特定したり、コスト削減の施策を模索して実践したりしています。過去の取り組みはこちらの記事でご紹介しています。

https://qiita.com/pohd_ccoe/items/4530622fd9a09e5cfcb0

https://qiita.com/pohd_ccoe/items/04aff521dae192472769

このようなコスト最適化の取り組みをさらに強化するため、マルチアカウント環境のコスト確認を効率化するダッシュボードをQuickSightで構築しましたので、ご紹介したいと思います。

## なぜダッシュボードを作ったのか
弊社では、グループ会社も含めると全部で数十個のAWSアカウントを運用しています。直接契約のAWSアカウントの他に、システムや部門などによって異なるリセラーと契約しているAWSアカウントがあり、複数のOrganizationsにまたがっているアカウント構成になっています。また、リセラーのアカウントでは管理アカウントへのログインが制限されています。

このようなアカウント構成が原因で、コスト確認のために個々のアカウントにログインしなければならず、全アカウントのコスト確認にかなりの時間がかかっていました。そこで、確認作業を効率化して原因調査や改善に注力できるように、統合的にコストを可視化できるダッシュボードを開発することにしました。

## 完成したダッシュボード
完成したダッシュボードの一部をご紹介します（一部マスキング、ダミーのデータを表示しております）。

以下は月ごとの全アカウントの合計金額を表示する部分です。左側に閲覧者が操作できるフィルタを作成しており、任意のグループ会社やアカウントで合算できるようにしています。前月比/前年比が高いアカウントを表示し、どのアカウントを重点的に確認するかの参考にしています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3333262/395d4b7e-8392-8294-8f2c-19420675ce21.png)

年間のコストを表示する部分では、前年との比較をグラフで表示しています。また、各アカウントのコスト一覧も表示し、前年比や前月比が高いアカウントは色付けをすることで分かりやすくしています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3333262/2c43dc54-5094-de1f-c0e3-ed1e2a7490a0.png)

アカウントごとのコストのセクションでは、増減幅が大きいサービスを表示し、次の原因調査のステップに進めやすくしています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3333262/bc39fbc0-700f-a9b8-9028-412217e6eea1.png)

リザーブドインスタンスやSavings Plansの状況もダッシュボードに表示しています。昨年度からCCoE主導でリザーブドインスタンスの適用を拡大しており、削減額という成果を可視化しています。また、RI・SPの一覧を表示することで、期限切れのチェックもしています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3333262/9e18b2cd-bf7a-dba7-635f-7d7a88299990.png)

また、参考情報としてAWSコストを支出する予算の消化率や見通しを表示しています。リセラーの割引が適用されるので実際の請求金額とは異なりますが、おおよその状況をすぐに見られるようにしています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3333262/4a1523c8-6c26-3402-5952-0235f3769521.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3333262/7c9caa55-eb1e-d84d-87f4-6c8db58252f6.png)


## AWS環境構成

### AWS構成図
AWS環境構成は以下のとおりです。コストデータはコストと使用状況レポート(CUR)ではなくCost Explorer APIで取得しています。コストデータの他、会社名やアカウント名、予算情報など必要な情報をコストとは別のテーブルで保持しており、Athenaでクエリしてデータソースにしています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3333262/cc2e698c-d3ac-131b-7ffa-9d919fea82a9.png)

### Cost Explorer API
データ取得には以下のCost Explorer APIを使用しました。結果をCSV形式で出力し、S3にファイルを格納しています。

- GetCostAndUsage（コスト実績）
- GetCostForecast（コスト予測）
- GetReservationUtilizaition（RIの使用状況）
- GetReservationCoverage（RIのカバレッジ）
- GetSavingsPlansUtilizationDetails（SPの使用状況）
- GetSavingsPlansCoverage（SPのカバレッジ）

Cost Explorer APIは初めて使ったのですが、RIやSPの利用状況やカバレッジを取得できるので便利ですね。
※API実行は有料で、1回あたり0.01ドルかかります。

## ダッシュボード構築するためにしておくとよいこと
今回このダッシュボードを構築してみて、マルチアカウントのコストを統合して可視化する難しさを実感しました。マルチアカウント管理という面で、「最初からこうしておくと楽にできたかも」と感じたことをご紹介します。

### 1.リセラー環境の制約を確認しておく
弊社では複数のリセラーとAWSアカウントを契約していますが、一部のリセラーではCost ExplorerやCURの利用が制限されていました。このような制限がある場合、コストデータを取得してダッシュボードを作成するハードルになってしまうかもしれません。私はこの点の確認が疎かで、手戻りを発生させてしまいました……。
そもそもダッシュボード作成に必要なデータを取得できるか？という点について、事前に確認しておくとよいかと思います。


### 2.コストと使用状況レポート(CUR)を有効化しておく
現状、過去分のCURを遡って取得することはできないので、いずれ使いたいと考えているなら（そしてコストが許容できるなら）有効化しておくとよいかもしれません。弊社ではCURが有効になっていないアカウントがあったり、リセラーの規約で自由に有効化できなかったりという事情から、Cost Explorer APIでコストを可視化しています。

Cost Explorer APIにも、月単位で最大38か月分のコストを取得できたりといった良さはあります。ただGetCostAndUsageではGroupByというサービス別・コスト配分タグ別などのディメンションを2つまでしか指定できないといったような制限があり、CURを使えていたら……思うこともありました。

### 3.コスト管理に必要な設定を共通化しておく

複数のアカウントを統合するということで、統合するアカウントでは関連する設定を標準化する必要があります。CURを使う場合はフォーマットを揃えたり、コスト配分タグを使って分析する場合はタグキーを揃えたりするといった設定がされていないと、作成できるダッシュボードの自由度が狭まってしまいます。

特にリソースタグは構築ベンダーによって標準で使用するキー値が異なっていたり、そもそもタグが設定されていないといったこともあるかと思います。後からたくさんのリソースのタグを整備するのはとても大変なので、全社的なガイドラインを作成し、統制機能を使って標準化しておくとよいかもしれません。

## まとめ
今回は複数のOrganizationsのAWSコストをQuickSightで可視化した取り組みについてご紹介しました。

様々な制約があり構築は大変でしたが、ダッシュボードによってコスト確認が効率的にできるようになりました。CCoE内部でのコスト確認だけでなく、AWSを利用する部門にも公開しており、AWSコストについてこれまで以上に意識してもらうきっかけとなるようにしています。
また、ダッシュボードを使用して利用部門とCCoEの間でのコスト確認を開催するようになり、協力してコスト最適化を推進しています。

最後までお読みいただき、誠にありがとうございました！