3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

AWSAdvent Calendar 2022

Day 5

AWS Protonで使い捨てのブランチプレビュー環境を実現する

Last updated at Posted at 2022-12-04

この記事は 「AWS Advent Calendar 2022 その1」の5日目の記事です。

AWS Proton

今年はProtonさんのおかげでインフラ周りをスッキリ快適にさせることが出来て、本当にProtonさんさまさまでした。
本番とステージング環境は実際にProtonで稼働しており、問題なく運用できております。
こちらの記事の頃よりも改良が進んでいて、ステージング環境用のDBを課金少な目構成にしたり、ECS ExecでFargateに入れたりなどできるようになってきて、結構楽しいです。

今回は、最初にProtonを知ったときにこういうことできたらいいなと思っていたものを作っていこうと思います。

目標

  • Railsのアプリケーションをデプロイできる
  • ブランチ毎やPR毎にデプロイ環境を立ち上げ、非エンジニアにささっと確認してもらえる環境として利用できる
  • 永続的なデータは残さず、環境破棄と同時に全て消える前提(DB・アップロードファイル等)
  • 高価なサービスは使わないか、使っても最小限になるようにする

出来たもの

Protonテンプレート用リポジトリ

サンプルアプリケーション用リポジトリ

デプロイ :clap:
image.png

環境テンプレート

image.png

  • VPC一式とALB一式とECS Clusterだけ作っておく
  • Hosted ZoneとSSL証明書は別途作成し、起動時のパラメータでIDやArnをセットできるようにしておく

サービステンプレート

image.png

  • ブランチ毎にサービスを起動する想定
  • サービスを起動するとFargateのServiceからアプリケーションが起動し、環境側のALBにTargetGroupをぶら下げてくる
  • ALBにリスナールールも追加し、環境側の1つのALBで複数サービスをルーティングしてくれるようにする
    • image.png
  • 環境側のパラメーターで指定したHostedZoneにDNS設定を追加し、サブドメインで即アクセス可能にする

パラメーター

リポジトリとブランチを選んで、
image.png
ドメインを入力するだけ :clap:
image.png

アプリケーション

  • RDSなどは使わずコンテナで起動していく
    • Redisやworker系、メーラー系なども必要になったらコンテナで起動する(今回は省略)
  • AutoScallingなどは使用しない前提(当然)

image.png

  • アプリケーション側の設定はこのくらい

たくさん起動してみる

こんな感じでいつでもいくつでもブランチプレビュー環境を起動できるようになりました。 :clap:
image.png

アクセスも即できます。当然のようにSSLで。 :clap:
image.png

そして、使い終わったらいつでも消せて何も残りません。 :clap:
image.png
image.png

おわり

いい感じに出来ました。
料金的にはおそらく、$18(ALB x1)+ $5(HostedZone x1)が固定費であとはFargateを使った分だけという感じで、RDSもRedisも使わないのでかなりお得に作れたのではないかなと思います。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?