2022 · Nudge Healthcare

月100万円を超えていた AWS 費用を30%削減

背景

Timespread は、サーバー費用として毎月100万円を超える金額を使っていました。チームリーダーから、この費用を減らす方法を探してみようと言われました。

どこにお金がかかっているのか

Cost Management で確認すると、費用が最もかかっているのは3か所でした。

  • RDS
  • Beanstalk (EC2)
  • ネットワークトラフィック

RDS はすでに負荷が高く手を入れる余地がなかったので、EC2 で減らせるところを探しました。ちょうど ARM 系の Graviton インスタンスが新しく登場し、同じ性能を20%ほど安く出せるという AWS の発表を見て、自分たちのサービスに適用してみることにしました。

Graviton に移す

まず Graviton インスタンスを1台作り、サーバーを立ち上げてみました。OS のバージョンとアーキテクチャが変わったため、従来の方法では起動しませんでしたが、幸い Dockerfile でビルドすると ARM アーキテクチャでも安定して動きました。そこで既存の CI/CD パイプラインを直して GitHub Actions でクロスビルドにより ARM イメージを作るようにし、Graviton インスタンスで動く Beanstalk を新たに作って、そのイメージを使うようにしました。

Route 53 の加重ルーティングで、トラフィックの10%だけを新しいインスタンスへ

テストサーバーで QA チームと一緒にサーバーが正しく動くかを確認したところ、何の問題もありませんでした。Route 53 の加重ルーティングで新しいサーバーにトラフィックの10%だけを流し、大きな問題が出なかったので、最終的にすべてのトラフィックを Graviton インスタンスが受けるようにしました。

オートスケーリングのルールを組み直す

数日後には、CPU 使用率のデータを見て、時間帯ごとのスケールアウトのルールを調整しました。ピーク時に最大12台まで増えていたインスタンスを8台に減らし、夜間は1台だけ動くようにしました。インスタンスの切り替えとスケーリングルールの調整を合わせて、最終的に費用を30%ほど削減できました。