AWS App Runner × Railsでアプリ作ってみた

4 min read読了の目安(約3600字

今回は最近リリースされたAWS App Runnerを使って、ミニマルなRailsアプリケーションをデプロイしてみました!

App Runnerとは

https://aws.amazon.com/jp/apprunner/

コンテナ化されたウェブアプリケーションやAPIを開発者が簡単かつ迅速にデプロイできるフルマネージド型サービスです

事前のインフラ経験を必要とせずにデプロイすることができます

ソースコードからでも、コンテナイメージからでも始められます

2021/5現在ソースコードからのデプロイはNode.jsとPythonのみ対応しているので、今回はRailsのイメージから作成します

事前準備

  • AWSアカウントの作成
  • Dockerのインストール
  • AWS CLIのインストール

DockerとAWS CLIに関しては、ECRのパブリックレポジトリにビルド済みのRailsイメージを配置しているので、なくても大丈夫です

流れ

  1. Railsのイメージを作成
  2. ECRのレポジトリを作成し、ビルドしたイメージをpushする
  3. App Runnerにデプロイ

2021/05現在、RubyはApp Runnerのコードレポジトリからのデプロイに対応していないので、ECRにコンテナイメージを置いておく必要がある(他のコンテナプロバイダは利用不可)

手順

Railsのサンプルプロジェクトをcloneする or 新しくレポジトリを作る

git clone git@github.com:mzmt/rails6_docker_template.git

https://github.com/mzmt/rails6_docker_template

テンプレートとして使うことができます

docker-compose upして動くことを確認する

動くことが確認できたらctrl + Cで終了

AWS consoleを開く

https://console.aws.amazon.com/console/home

ECRレポジトリを作成する

Screen Shot 2021-05-28 at 11 12 05

可視性設定をプライベートにして、リポジトリ名に適当な名前を入力し、「レポジトリを作成」ボタンを押す

Screen Shot 2021-05-28 at 11 13 58

ECRにpushする

レポジトリを開き、「プッシュコマンドを表示」ボタンを押すと、画面上にコマンドが表示されるのでコピーして実行する
Screen Shot 2021-05-28 at 11 18 48

これでECRのレポジトリにビルド済みのRailsイメージが配置されたので、そのイメージを使ってApp Runnerにデプロイしていきます

App Runnerでデプロイ

App Runnerを開き、「サービスの作成」をクリック
Screen Shot 2021-05-28 at 11 25 25

レポジトリタイプはコンテナレジストリ、プロバイダはAmazon ECRを選択します。
コンテナイメージのURLの参照ボタンを押して、先ほどプッシュしたimageを選択します。

デプロイトリガーは手動・自動お好みの方を選んでください。自動にすると、ECRにイメージをプッシュするたびに自動でデプロイされます。

App RunnerからECRにアクセスするためのロールが必要なので作成します。既に作成済みの場合は、既存のロールを使用してください

サービス名を入力して、環境変数、ポート、開始コマンドを設定します。今回はテスト用なので最低限のスペックで作成しています。

その他はデフォルトの設定でokです

作成ボタンを押すと、AWSがリソースを作成します。完了するまで10分ほど待ちます

完了したらデフォルトドメインが設定されているので、クリックしてトップページを開いてみましょう! Hello, World!が表示されたら成功です

AWS CLIやDockerをインストールしていない場合

ECRのパブリックレポジトリの検索で、「mzmt/rails6_docker_template」と入力するとビルド済みのイメージを使用して、App Runnerへお試しデプロイできます
App Runnerのプロバイダーに「Amazon ECR パブリック」を選択し、以下のURIを入力すると利用可能です
public.ecr.aws/d5c5w7d9/mzmt/rails6_docker_template:latest

Screen Shot 2021-05-28 at 11 22 57

もしデプロイが失敗した場合

App Runnerの「ログ」タブ内の、デプロイログとアプリケーションログをチェックすると原因が分かると思います。

環境変数にRAILS_LOG_TO_STDOUTをセットしていない場合、アプリケーションログにログが流れないので注意してください。

まとめ

今回はAWS App RunnerにRailsで作ったアプリをデプロイしてみました。
使ってみた感想としては、Elastic Beanstalkよりはハマりどころが少なく楽で、Herokuに比べるとソースコードからのデプロイに対応していなかったり、DBを用意する手間は必要だと感じました。デプロイするだけでCloudWatchでログが見れるのはとてもありがたいです。今後のアップデートでより使いやすくなることが期待されます。

このままだとDBへの接続があるアプリはホストできないのと、デプロイのフローが面倒なので、第2回でDBとの接続、第3回ではGitHub Actionsを使った自動デプロイの記事を書く予定です。