Hosting⚡ パフォーマンス・速度💸 コスト削減

メディアエンジン

メディアエンジン、HerokuとAWS混在の管理煩雑化とレイテンシ課題を解消。2名2週間でECS・Amplify・RDSへ全面移行しパフォーマンス4倍に

Heroku(Container Runtime / Node.js / Heroku Postgres / Redis)AWS(ECS / Amplify / RDS / ElastiCache)

コンテンツマーケティング支援を手がけるメディアエンジンは、Ruby on Rails製システムをHerokuで運用していたが、国内リージョンがないことによるレイテンシと、AWS運用システムとの混在による管理の煩雑化を課題視し、ECS・Amplify・RDS・ElastiCacheへ全面移行した。2名体制・約2週間で移行し、システム全体のパフォーマンスが4倍前後に向上した。

課題

HerokuとAWSの混在による管理の煩雑化と、Heroku特有のレイテンシ課題

アプローチ

APIサーバをECS、フロントエンドをAmplify、DBをRDSへ2名2週間で移行

効果

システム全体のパフォーマンスが4倍前後に向上、インフラをAWSへ一元化

背景

メディアエンジンは初期に構築したシステムのバックエンドにRuby on RailsとPostgreSQLを採用しており、スムーズに開発できることを理由にHerokuで運用していた。一方、近年開発したシステムはAWSのECSを利用しており、AWSを使うシステムとHerokuを使うシステムが混在することで運用管理が煩雑化していた。さらにHerokuは国内にサーバを設置できないため、AWSと比較してレイテンシが大きくなるという問題も抱えていた。これらの課題を解消するため、HerokuからAWSへのインフラ全面移行を決断した。

移行のプロセス

移行は著者と社内のインフラに詳しいメンバーの2名体制で、調査・実作業を含めておよそ2週間かけて実施された。

  • APIサーバ: Heroku Container RuntimeからECSへ。既存のDockerfileをそのまま利用できたため比較的スムーズに移行できた
  • フロントエンド: HerokuからAmplifyへ。従来@nuxtjs/proxyモジュールでRailsサーバと通信していた構成を廃止し、フロントエンドから直接APIサーバへ通信する構成に変更、Rails側にrack-corsを導入してCORSを設定
  • スケジューラ: Heroku SchedulerからECSへ
  • データベース: Heroku PostgreSQLの管理ページから手動バックアップを作成し、pg_restoreでRDSへデータ移行。特に課題なくスムーズに実施できた
  • キャッシュ: Heroku RedisからElastiCacheへ
  • ログ: PapertrailからCloudWatchへ
  • 監視: RollbarとScout APMからSentryへ統合

移行前後の変化

指標BeforeAfter
APIサーバHeroku Container RuntimeECS
フロントエンドNode.js on HerokuAmplify
データベースHeroku PostgresRDS
パフォーマンス-4倍前後に向上

結果

全体的にシステムのパフォーマンスが4倍前後まで向上した。インフラをAWSへ一元化したことでメンテナンスがしやすくなり、インフラの大部分をTerraformで管理できるようになった。一方で監視面では、Scout APMが持っていたN+1問題検出機能をSentryは持たないため、著者は「一概にSentryの方が上回っているとも言い切れない」と振り返っている。

学び

パフォーマンスモニタリングはECSのメトリクスなどである程度代替できると判断しSentryへ統合したが、Scout APMのN+1問題検出のような専用機能を失う面もあり、監視ツールの統合には一長一短があるという学びが得られた。

2021-08-31
他の事例も見る