🖥

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を選択する
  • ユーザー名・パスワードを設定する
  • パブリックアクセスありに設定する

image

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に利用しているものと同じ

image

ロードバランサ・ターゲットグループもこの例では新しく設定する

<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オープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ

Twitter

https://twitter.com/YumaInaura

公開日時

2023-02-08

Discussion