概要
同じセキュリティグループ同士は無条件に全てのトラフィックが許可されるので、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を作成する
他の設定は
- 「VPCなど」
- DNS ホスト名を有効化
- DNS 解決を有効化
セキュリティグループの設定
自分がWebからアクセスできるように、今作成したVPCのセキュリティグループで、マイIPに対してHTTPアクセスを許可する
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に利用しているものと同じ
ロードバランサ・ターゲットグループもこの例では新しく設定する
マイグレーション
一時的にセキュリティグループのインバウンド設定でマイIPからDBポートへのアクセスを許可すれば、localからDBマイグレーションができる
RAILS_ENV=production rails db:create
RAILS_ENV=production rails db:migrate
ネットワークアクセス
ECSサービスのデプロイが成功したらネットワーキングタブよりURLにアクセスする
/users
などDBアクセスが発生する画面に移動して表示されれば成功
チャットメンバー募集
何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。