月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 を新たに作って、そのイメージを使うようにしました。
テストサーバーで QA チームと一緒にサーバーが正しく動くかを確認したところ、何の問題もありませんでした。Route 53 の加重ルーティングで新しいサーバーにトラフィックの10%だけを流し、大きな問題が出なかったので、最終的にすべてのトラフィックを Graviton インスタンスが受けるようにしました。
オートスケーリングのルールを組み直す
数日後には、CPU 使用率のデータを見て、時間帯ごとのスケールアウトのルールを調整しました。ピーク時に最大12台まで増えていたインスタンスを8台に減らし、夜間は1台だけ動くようにしました。インスタンスの切り替えとスケーリングルールの調整を合わせて、最終的に費用を30%ほど削減できました。