Rails7.1をECS(Amazon Elastic Container Service)-Fagateにデプロイします!!!
以下の順で進めていきます。今回はとりあえずFargate上で動くことをゴールにしますので、MySQLは使いません。
- ローカルでRails7.1を立ち上げる
- ECR(Amazon Elastic Container Registry)にRailsイメージをpushする
- ECRのイメージを使って、ECS(Amazon Elastic Container Service)-Fagateにデプロイ
まずは、ローカルでRails7.1を起動していきます。
ローカルでRialsを動かしてみる
アプリケーションの作成
以下のコマンドでアプリケーションを作成して、作成したアプリケーションのフォルダに移動します。
rails new test_app
cd test_app/
まずはDockerfileを修正します。
Dockerfileの修正
Rails newで作成されたDockerfileを修正します。
vi Dockerfile
以下の2点変更します。
<変更①>「ENV RAILS_ENV="production"」をコメントアウトして、「ENV RAILS_ENV=$ENVIROMENTS」を追記します。
#ENV RAILS_ENV="production" \ ENV RAILS_ENV=$ENVIROMENTS \ <変更②> 5行目のFORMの後に以下を追加 ARG ENVIROMENTS
上記変更を加えることで、Railsを以下の指定をして、起動できるようになります。
- production
- development
- tesst
コンテナを立ち上げて動作確認
以下のコマンドでビルドします。
docker build . -t test_app --build-arg ENVIROMENTS='development'
以下のコマンドでコンテナを起動します。
docker run -it -p 3000:3000 --env RAILS_MASTER_KEY=`cat config/master.key` test_app bin/rails server -b 0.0.0.0
http://localhost:3000/にアクセスし、以下の画面が表示されれば、動作確認OKー
ECR(Amazon Elastic Container Registry)にRailsイメージをpush
以下のコマンドで、AWSの接続設定をしておきます。
aws configure
次にECRログインします。
aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin {AWSアカウントID}.dkr.ecr.ap-northeast-1.amazonaws.com
以下のコマンドでリポジトリを作成します。
aws ecr create-repository \
--repository-name rails \
--image-scanning-configuration scanOnPush=true \
--region ap-northeast-1
Railsアプリのタグ作成します
docker tag test_app:latest {AWSアカウントID}.dkr.ecr.ap-northeast-1.amazonaws.com/rails:latest
Railsアプリのpushです
docker push {AWSアカウントID}.dkr.ecr.ap-northeast-1.amazonaws.com/rails:latest
次に、Fagateにデプロイします!
ECS(Amazon Elastic Container Service)-Fagateにデプロイ
クラスターの作成
以下の設定で作成します。指定箇所以外は任意の値で大丈夫です。
- インフラストラクチャ:AWS Fargate (サーバーレス)
タスク定義の作成
以下の設定で作成します。指定箇所以外は任意の値で大丈夫です。
- インフラストラクチャの要件
- 起動タイプ:AWS Fargate
- オペレーティングシステム/アーキテクチャ:自分のPCと一致するもの(基本はx86_64でOK、M1/M2 MacはARM64を選択)
- この設定に誤りがあると「exec /usr/local/bin/start-container: exec format error」エラーになります。
- タスクサイズ
- CPU:.5 vCPU
- メモリ:1GB
- コンテナ – 1
- 名前:app
- イメージURI:{AWSアカウントID}.dkr.ecr.ap-northeast-1.amazonaws.com/rails:latest
- コンテナポート:3000
- アプリケーションプロトコル:HTTP
- 環境変数
- キー:RAILS_MASTER_KEY
- 値:
「config/master.key」
の値を直接入力- 「
cat config/master.key
」を入力すると「ArgumentError: key must be 16 bytes (ArgumentError)」エラーになる
- 「
- Docker設定
- コマンドに以下を設定
- /rails/bin/rails,server,-b,0.0.0.0
- コマンドに以下を設定
タスク起動
作成したクラスターのタスクタブにある「新しいタスクの実行」を押下
- コンピューティング設定:起動タイプ
- デプロイ設定
- ファミリー:先ほど作成したタスクを設定
- リビジョン:最新
- ネットワーキング
- セキュリティグループ:ポート3000の許可を追加
動作確認
作成したクラスターのタスクタブの任意のタスクの詳細を開きます。
パブリックIPが表示されるので、http://パブリックIP:3000でブラウザからアクセスします。
以下の画面が表示されればOKです。