[期間] 2021年9月 ~ 現在
[メンバー] エンジニア 2名
[役割] リーダー
・基幹サービスのherokuからAWS移行(ECS Fargate)
・基幹システムに関連したサービスのherokuからAWS移行(ECS Fargate)
## 内容・課題
各種運用サービスをHerokuからAWSに移行しました。
元々Herokuで運用していましたが、年間運用コストが400万円以上かかっていることや海外リージョンにある関係から発生する問題などが潜在的にあり品質として安定していなかったこと、また代表の意向もありHerokuからAWS移行しました。
選定の理由としては、メンバーの数が少なくインフラを専門に作業できないことなどの課題もあったのでECS(Fargate)を採用しています。
またフロントエンドのデプロイにおいてはVercelなどの選択肢がありましたが、費用対効果の関係上Fargateで運用しています
## 技術的な課題
社内に最低限のリソースを使用しECSをpublicにおいて構成する知見はありましたが、
privateにECSを置く構成や、ALBの知見、Worker,バッチ処理,フロントエンドのコンテナ運用、定時処理、DB移行, KVS(Redis) の冗長化, DNS移行などの知見がなかったのでそれらを調査するところから始まりました。
ECSの基本構成についてはさほど手間がかからず実装できましたが、workerなどに関してはHerokuの環境を参考にしながら何度も仮説・検証を繰り返し、各種設定を行うことでそれらの構成を実現することができました。
それだけでなく、CloudFrontやAuroraの利用、SQS, Lambda, AWS Grafana などの検討なども行い、費用対効果が高いものに関しては実際に採用しました。
セキュリティやタスク数、チューニングに関しては
実際のセッション数やサービスの性質を踏まえた上でabコマンドなどを使用しで何度も検証することで最適化を図ることができました。
セキュリティに関してはWAF(v2)を導入することでDOS, DDOS などの攻撃から サービスを守れるようにしました。
Terraform管理していたとのこともあり、ディレクトリ構成を見直しテスト環境にも対応できるようCI/CD ,Makefileやshellを利用しコマンドに応じて簡単にリソースを切り替えられるようにしました。
様々なディレクトリ構成がありますが、私達はmoduleごとに切り分け変数を受けとる・リソースを実行・変数を渡すの3つの責務を分離し構成しています。
結果、AWSの基本を理解していれば検索次第で対応できる状態に近づきました。
実際の移行作業に関しては、何度もデモを行い当日問題なく移行できるよう万全の準備をするだけでなく、あらゆる可能性を考慮することで当日スムーズに行うことができました。
## 得られたこと
結果年間運用コストを200万円以上抑えることに成功しただけでなく、リージョン問題も解決でき、各種サイトのレスポンス等の品質が向上しサービス全体の品質が高まりました。
しかし、現状task-definitionにおいて環境変数の管理がGithub actionsを利用すると二重管理にならざる負えない問題などもあるので、メンバーと相談しながらチームにとっての最適解を目指していきたいと思います。