この記事は 「AWS Advent Calendar 2022 その1」の5日目の記事です。
AWS Proton
今年はProtonさんのおかげでインフラ周りをスッキリ快適にさせることが出来て、本当にProtonさんさまさまでした。
本番とステージング環境は実際にProtonで稼働しており、問題なく運用できております。
こちらの記事の頃よりも改良が進んでいて、ステージング環境用のDBを課金少な目構成にしたり、ECS ExecでFargateに入れたりなどできるようになってきて、結構楽しいです。
今回は、最初にProtonを知ったときにこういうことできたらいいなと思っていたものを作っていこうと思います。
目標
- Railsのアプリケーションをデプロイできる
- ブランチ毎やPR毎にデプロイ環境を立ち上げ、非エンジニアにささっと確認してもらえる環境として利用できる
- 永続的なデータは残さず、環境破棄と同時に全て消える前提(DB・アップロードファイル等)
- 高価なサービスは使わないか、使っても最小限になるようにする
出来たもの
Protonテンプレート用リポジトリ
サンプルアプリケーション用リポジトリ
環境テンプレート
- VPC一式とALB一式とECS Clusterだけ作っておく
- Hosted ZoneとSSL証明書は別途作成し、起動時のパラメータでIDやArnをセットできるようにしておく
サービステンプレート
- ブランチ毎にサービスを起動する想定
- サービスを起動するとFargateのServiceからアプリケーションが起動し、環境側のALBにTargetGroupをぶら下げてくる
- ALBにリスナールールも追加し、環境側の1つのALBで複数サービスをルーティングしてくれるようにする
- 環境側のパラメーターで指定したHostedZoneにDNS設定を追加し、サブドメインで即アクセス可能にする
パラメーター
アプリケーション
- RDSなどは使わずコンテナで起動していく
- Redisやworker系、メーラー系なども必要になったらコンテナで起動する(今回は省略)
- AutoScallingなどは使用しない前提(当然)
- アプリケーション側の設定はこのくらい
たくさん起動してみる
こんな感じでいつでもいくつでもブランチプレビュー環境を起動できるようになりました。
おわり
いい感じに出来ました。
料金的にはおそらく、$18(ALB x1)+ $5(HostedZone x1)が固定費であとはFargateを使った分だけという感じで、RDSもRedisも使わないのでかなりお得に作れたのではないかなと思います。