AWS App RunnerでソースコードリポジトリでRails + PostgreSQL環境を作る
はじめに
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