🕌

GCPの料金削減をしたい パート2

2024/04/11に公開

前回の記事では、GCPの料金内訳とその中でも特にBigQueryが占める割合に焦点を当てました。この記事では、具体的な削減措置とその結果について詳しく見ていきましょう。

前回の記事で何にいくら使用しているのかが把握できました。

削減の流れ

  • 分析と方針の決定
  • BigQueryの使用料金内訳確認
  • BigQueryのコスト削減←今回の記事はここから
  • 定期実行頻度の見直し
  • 結果
  • 今後の改善に向けて

BigQueryのコスト削減

BigQueryは非常に強力なデータウェアハウスサービスですが、使い方によってはコストが膨らむこともあります。私たちは、GCPの料金の大部分をBigQueryが占めていることを発見しました。

前回の記事のおさらいとして、BigQueryのコスト内訳は以下のようでした。

  • 定期実行処理:80%
  • データチームが想定外の長期間SQL実行:10%
  • その他の通常BIツール利用:10%

定期実行処理が全体の80%を占めるという現状は、過去の改善策に起因しています。

過去の改善策と新たな問題

Metabaseを使用する際、ユーザーが画面を開くたびにSQLクエリが実行される仕様です。特に大量のデータを扱う場合、これは不必要なコスト増加とレスポンス時間の遅延を引き起こします。
この問題に対処するため、表示用のデータマート(DM)を事前に作成するアプローチを採用しました。

この手法により、Metabaseでの表示速度の改善とコスト削減を実現しましたが、毎日実行されるタスク量が増加し、定期実行処理の高比率が今回の議題となりました。さらに、事前処理によって現在は使用されていないテーブルも更新処理されるようになりました。

この状況に対処するため、次のようなステップを踏みました。

改善策の実施

過去の改善策で事前処理を導入したことは、表示速度の向上とコスト削減に貢献しましたが、それが新たな課題、特に定期実行処理の量の増加と未使用テーブルの更新維持に繋がりました。この課題に対応するための改善策を実施しました。

幸いにも、Metabaseは以下の形式でSQLにコメントがあり、そのコメントを通して

  • metabaseからの呼び出しであること
  • どのユーザーの実行か
    を特定できるようになっていました。
    直近2ヶ月間の使用履歴を元にBQテーブル単位の呼び出し回数と利用人数を調べ以下の手順で改善していきます。
  1. 使用していないDMの削除:直近2ヶ月の使用履歴を基に、使用されていないDMを特定し削除しました。
  2. 利用者が少ないDMについてはヒアリング後、削除を検討:使用されているが利用者数が少ないDMについては、ヒアリングを行い、可能であれば削除しました。
  3. 利用されているDMのSQL最適化:利用されているDMをコストごとに分析し、SQLクエリの最適化を行いました。

これらの改善策は、BigQueryのコスト効率を大きく向上させるとともに、BIツール運用の効率も保ちました。

実行頻度の見直し

さらに実行頻度も改善していきます。
現状はairflowというデータパイプライン用のワークフローツールによって毎日1回全ての処理を実行するようにしています。
しかし実際は週次・月次データなど頻度を減らしても影響をほぼ受けないSQLも存在します。
そこでdmに保存するテーブルの命名規則を実行頻度がわかるようにしその命名に合わせて処理の頻度を減らしていきました。

これにより必要以上に高頻度で実行しているタスクがないかを確認し、実際に必要な頻度に調整することで、計算リソースの無駄遣いを防ぎました。

コストのアラートと上限設定

スキャン量が減ってきたら、今後もその状態を維持できるように監視を行なっていきます。
IAMと管理>割り当てアラートとシステムの上限>上限の設定 から使用量の上限設定を行います。
割り当てと上限

設定の仕方はこちらを参考にしてください

本来はmetabaseから呼び出されているアカウントのみに上限を設定することで、心理的安全性を確保しつつ定期実行アカウントなど止まった際にサービス影響が出るものは除く想定でした。
しかし残念ながら、特定のユーザのみに上限をかけることはサポートされていません。

そのため、今回は(Query usage per day)と(Query usage per day per user)の設定を行いました。

結果

これらの取り組みにより、GCPのBigQuery月額コストを約40%削減することができました。

今後の改善
GCPの料金削減は一度きりの作業ではありません。技術の進化に伴い、新しい料金削減の方法が出てくることもありますし、プロジェクトの変化に応じて最適なリソース利用のバランスも変わってきます。そのため、定期的なレビューと改善のサイクルを継続的に行うことが重要です。また、GCPの料金削減に関する最新情報やテクニックを常に学び続けることも、コストを適切に管理する上で欠かせません。

また、今回はBQのクエリスキャン量である、Analysisに注目をしていましたが、Long Term Logical Storage/Standard Storage Tokyoなども削減が可能ではあるので、さらに全体の最適化を目指していければとおもいます。

この記事が、GCPのコストを削減しようと考えている皆さんのお役に立てれば幸いです。

Voicyテックブログ

Discussion