🛤️

AWS App RunnerでソースコードリポジトリでRails + PostgreSQL環境を作る

2023/01/03に公開

はじめに

AWS App RunnerでRailsとPostgreSQLを使って動かすことに成功したのでご紹介します。 AWS App Runner Advent Calendar 2022の記事やその中でも Rails on App Runner - マネージドランタイムで動かしてみた編 - がとても参考になりました。
Dockerfileを書いてECRレジストリを用意してというところはスキップしたかったのでソースコードリポジトリを使う方法を調査しました。

設定

項目 設定値
リポジトリタイプ ソースコードリポジトリ
デプロイトリガー 手動(自動でもおそらくOK)
設定ファイル ここですべての設定を構成する
ランタイム Ruby3.1
構築コマンド ./scripts/apprunner/build.sh;
開始コマンド ./scripts/apprunner/run.sh
ポート 3000
環境変数 後述

今設定ファイルは「ここですべての設定を構成する」を選択しました。apprunner.ymlではなくawsコンソールからすべての情報を入力します。

というのも、設定ファイルについては環境変数でデータベース接続のためのパスワードなどを記述するためリポジトリに設定ファイルをコミットすることができません。したがって秘匿値を渡す必要がある場合は画面から設定値を入れる方針に現状は絞り込まれます。

構築コマンド

事前にスクリプト./scripts/apprunner/build.shを準備しておいて呼び出します。注意点としては./scripts/apprunner/build.sh; のように末尾にセミコロンを付けないと、ruby3.1.3が入っていないと言われ失敗します。(こちらは後日もう少し検証しようと思います。)

スクリプトの中身は以下です。

#!/bin/bash

amazon-linux-extras install -y postgresql14
yum install -y postgresql-devel
bundle install
bundle exec rake assets:precompile
bundle exec rake assets:clean

開始コマンド

用意していたスクリプト./scripts/apprunner/run.shを呼んでいます。こちらはセミコロン無しで呼び出しても動作します。

#!/bin/bash

bin/rails db:migrate
bundle exec puma -t 5:5 -p 3000

migrationのコマンドは構築コマンドの方に含めたいところなのですが、構築コマンドの方には環境変数を渡すことができず開始コマンドに含めています。

環境変数

以下の環境変数を設定します

キー
DATABASE_URL データベースの接続情報をurl形式にした値
RAILS_ENV production
SECRET_KEY_BASE bin/rails secretの結果

databaseについては今回はrender.comを使って起動しました。awsのauroraやその他のサービスを利用しても良いと思います。

その他

ここまで設定を入れたら後は無事起動することを祈るだけです🙏🏻 もし起動に失敗した場合は設定を修正することはできないので、一度消して最初から作り直しになります。

まとめ

以上、Rails + PostgreSQLのアプリケーションをApp Runnerで動かす方法でした。過去触ってみたherokuやrender.comと比べるとはまりどころはありましたが、コンテナ化してbuildしてレジストリにあげて…という手順をスキップしてアプリケーションを起動できるのは大きなメリットになりそうです。

Discussion