💸

不要インフラコストを4割削減した話

2024/08/26に公開

こんにちは!
株式会社FUNDiT CTOの萩原といいます

今回は前回のポイントサービスのコスト最適化を具体的にどのようなことをやっていったかを
事例としてご紹介します。

サンプルケース

  • 会員制ポイントサービス
  • インフラはAWS
  • 関連リポジトリは20個超
  • AWS費用(最適化前)で月額 USD8,0000 ~ USD10,0000前後
  • WebAPサーバ c5.xlarge(4vcpu) 30台前後
  • RDS m5.2xlarge MultiAZ 構成

前回のおさらい

前回で引き継ぎに関して、技術DDとしてコスト観点で以下をまとめました。

  • 現状のサービスシステム内部の把握
  • 現状のシステム・サービスコストの把握

今回は引き継ぎとコスト最適化について具体的に解説していきます。

引き継ぎ一般論

ここからはケースバイケースになるのですが、おおよそ以下のようにします

AWS

AWS Organizationsを利用して組織アカウントごと子アカウントとして引き継ぎます
昔は書面を送ってAWSとやり取りをしなければいけなかったんですが
最近は簡略化[1]されて楽になりました

GCP

プロジェクトの組織間での移管を行うことが多いです
ここに関しては参考になる記事がいくつもあるので、割愛しますが、授受作業時の権限処理が面倒です
(いつも忘れる)

ミドルウェアやSaaS系

どこの会社にもありますが定期的に確認しないと惰性で払い続けているとかはよくあるので
普通に契約変更しましょう

今回の事例の場合

データ統合系のサービスを利用していないが契約し続けている、というのがありました。
SaaS系は金額が高いものも多いので、きちんとみておくべきです。

コストの最適化

不要コストの削減

さぁ、インフラエンジニアなら大好き無駄を省く作業です
ここからエンジニアとしては楽しいところになります!

結論からでどれくらい削減できたのか?でいうと月ベースでUSD 4,000ほど
年間でいうと結構な金額(700万程度)になりますね

作業開始

AWSを全て利用していたので、AWSの利用状況を確認します
やり方は色々あると思います
今回やったのは以下の通り

  • 請求書ベースで金額が高いもの、という観点で洗い出し
  • 請求書と合わせて管理画面を一通り見る

結果は、

  • EC2 (数がかなり多かった)
  • ELB (数がかなり多い)
  • RDS (単価高い)
  • CloudFront (配信量多い)

あたりか、とい目算をつけました。

無駄を調査する

高いところはわかったので、そこのコストカットを目論んでいきます

不要なリソース
  • CPUリソース利用0、ネットワークリソース利用0のインスタンス削除
    • ※クローズしたサービスを確認しています
  • ELBの数が無駄に多かったので、削除
    • 何故か使われていなかった

ここまでで、4台ほど削っておきました

過大なリソース

EC2では主にWebアプリケーション(バックエンド)サーバだったのでざっくりと見ていきます

構成自体はよくあるもので

みたいな感じでした

リソースの利用状況については、AWSのコンソールに加えて
CPU: htop
Mem: free , htop
I/O: sar , iostat
とかで見ていくことが多いです

(すいません、当時のコマンド結果とかは失われました)

※死ぬほどログ吐いたりとかじゃなければ、I/Oの問題は発生しないのでサボることも多いです

分かりやすいように画像を出しました。こんな感じでCPUリソースはかなり余ってそう

CPUリソース

見ていった感じはかなり余裕があったので、半分くらいインスタンスを落としました
CI/CDからも外しておきます

ここでも3台ほど削りました

CDN

転送量がそこそこあったので、CDNを安い物に切り替える対策を行おうと思いましたが
高めではあるものの工数をかけるほどではないなという判断でここは据え置きにしました

RI or Savings Plans

不要なリソースを削除し終わったので、次は割引を入れましょう
RDSと残ったEC2の分を購入していきます

計算がめんどくさかったのでRIをとりあえず入れておくことにしました

最近はコスト最適化ハブ[2]なんてのもあるようです。
GCPには似たようなもの[3]があったんですが、こちらも利用していきたいですね

外形監視

削減しまくったので、実際のE2Eでのサービスの状況や、特定の時間等の負荷にたえれるのかが心配になってきます。
社内での他の事業共通での外形監視をいれているのでそこに混ぜ込んでおきます。

調査しながら削減を進めたため、特に問題は現在まで起こっていません

その他の改善

SREチックな感じの改善がまだまだ残っています。
色々やったのですが、細かいことも多いので思い出しながらジャンル別にまとめて別postで書こうと思います
(ごめんなさい)

終わりに

記事内でも記載しましたが、コスト最適化に関しては各社サービスにて提供していますが
実際、やり切るまではハードルが高めだと思います

この記事をきっかけとして着手する手助けになったら良いと思いました

次回の大規模引き継ぎの場合は記事にするネタにきれいにログを残しておこうと思いますw

以下、記事の改版履歴
2024/8 v1.0


FUNDiTでは今後もIT企業のM&Aを積極的に実施していきますので、興味のある方は一緒にやってみませんか?
https://jobs.forkwell.com/fundit/jobs/27657

脚注
  1. AWS アカウントの所有権を別の事業体に譲渡するには、AWS の同意が必要です。AWS は、AWS アカウント割り当て要件ページの要件が満たされていることを条件として、ほとんどの状況で AWS アカウントの割り当てを希望するお客様に公に同意します。https://repost.aws/ja/knowledge-center/transfer-aws-account

    ↩︎
  2. https://aws.amazon.com/jp/blogs/news/new-cost-optimization-hub-to-find-all-recommended-actions-in-one-place-for-saving-you-money/ ↩︎

  3. https://cloud.google.com/recommender/docs/recommendation-hub/identify-configuration-problems?hl=ja ↩︎

株式会社FUNDiT

Discussion