手抜きしつつそこそこいい感じにRailsアプリケーションを構築する方法を整理しています。
要求としては以下のようなものを考えています。
一般的なwebアプリケーションの要求としてはよくあるものです。
AWSでこれを実現する場合に、雑になりすぎず、また頑張りすぎることもなく実現するにはどうしたらいいかを色々と模索していました。最終的には以下のような構成になりました。
リソース
- App Runner(APIサーバー)
- Event Bridge→Lambda(スケジュール処理)
- App Runner→SQS→Lambda(非同期ジョブ)
Lambdaはコンテナイメージを使ってデプロイします。使うコンテナイメージはApp Runnerと同じものを使います。これによりイメージのビルドなどをシンプルに保つ事ができます。
push時にやっていること
- mainブランチマージでリソースの更新
- ECRにpush
- ECR更新をフックにApp Runner更新
- Lambdaの更新
- Event Bridge Scheduleの更新
- ECRにpush
全てGithub Actionsで実施しています。
できないこと
- 15分以上かかるスケジュール、非同期処理
- Lambdaが高稼働する場合のRDBコネクションがかさむ問題への対応
一定このあたりを許容できるようなサービス限定となります。許容できない場合はなんらか対応する必要がありますが、一定この構成であれば部品を他のものに置き換えることができるかと思います。
まとめ
AWSでRails環境を構築する場合に手をかけずそこそこいい感じに構築する方法をまとめました。いろいろ調べつつアップデートしていければいいなと思います。