AWS ECS + Rails + MySQL(Aurora) – 同じセキュリティグループに ECサービスとRDSを作成して Railsか
概要
同じセキュリティグループ同士は無条件に全てのトラフィックが許可されるので、ECSサービスもRDSも同じセキュリティグループに作成することでRailsからDBへのアクセスを可能にする
Rails
scaffoldなどでDBアクセスが発生するページを作成しておく
rails generate scaffold users name:string
Productionでのデバッグ用に一時的に画面からエラー確認できるようにしておくと便利かもしれない
rails-docker/config/environments/production.rb
Rails.application.configure do
config.consider_all_requests_local = true
VPCの作成
パブリックサブネット2個
プライベートサブネット0個
でVPCを作成する
<img width="861" alt="image" src="https://user-images.githubusercontent.com/13635059/217437456-510b8f4a-f489-49c2-8749-e87a71c92425.png">
他の設定は
- 「VPCなど」
- DNS ホスト名を有効化
- DNS 解決を有効化
セキュリティグループの設定
自分がWebからアクセスできるように、今作成したVPCのセキュリティグループで、マイIPに対してHTTPアクセスを許可する
<img width="1420" alt="image" src="https://user-images.githubusercontent.com/13635059/217438105-8b48911c-75bd-4a07-8659-8debe4e1880b.png">
RDSでデータベースを作成
- 最初に作成したVPCを選択する
- ユーザー名・パスワードを設定する
- パブリックアクセスありに設定する
Rails のコードでDB設定する
データベース作成が進みエンドポイントが分かったらそれを設定で使う
database.yaml に直接書く例
default: &default
adapter: mysql2
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
timeout: 5000
production:
<<: *default
host: ******.cluster-cgklnrcdw5xr.ap-northeast-1.rds.amazonaws.com
username: admin
database: rails_example_production
password: *****
ECR に Rails のイメージをpushする
よしなに
ちなみに今回使ったDockerfileの例
FROM ruby:3.1.2
RUN mkdir /api
WORKDIR /api
COPY Gemfile /api/Gemfile
COPY Gemfile.lock /api/Gemfile.lock
# Bundlerの不具合対策(1)
RUN gem update --system
RUN bundle update --bundler
RUN bundle install --jobs=4
COPY . /api
CMD RAILS_LOG_TO_STDOUT=1 RAILS_ENV=production bundle exec rails server -p 80 -b '0.0.0.0'
タスク定義を作る
よしなに
ECSクラスタの作成
既にある場合はスキップ
ECSサービスの作成
最初に作ったVPCと同じものを使う
RDSに利用しているものと同じ
ロードバランサ・ターゲットグループもこの例では新しく設定する
<img width="685" alt="image" src="https://user-images.githubusercontent.com/13635059/217440285-e118f569-cf6e-430f-9a85-bf4913823c57.png">
マイグレーション
一時的にセキュリティグループのインバウンド設定でマイIPからDBポートへのアクセスを許可すれば、localからDBマイグレーションができる
RAILS_ENV=production rails db:create
RAILS_ENV=production rails db:migrate
ネットワークアクセス
ECSサービスのデプロイが成功したらネットワーキングタブよりURLにアクセスする
<img width="1435" alt="image" src="https://user-images.githubusercontent.com/13635059/217440027-4bc7b593-ff86-44d0-b414-2bb34020469f.png">
/users
などDBアクセスが発生する画面に移動して表示されれば成功
チャットメンバー募集
何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。
公開日時
2023-02-08
Discussion