はじめに
Rails アプリを実行するためのサーバー環境はたくさんあると思いますが、今回は手軽に始められる Cloud Run を利用して Rails アプリを動かしてみようと思います。
今回は Cloud Run に触れることを目的に超シンプル版で構築していきます。
Cloud Run とは
フルマネージドのサーバーレス プラットフォームでお好きな言語を使用して、スケーラブルなコンテナ型アプリを構築してデプロイできます。
Google Cloud が提供するプロダクトの1つです。
プログラミング言語の縛りはなく、リクエストが来たときにインスタンスが起動してレスポンスを返すサーバーレスタイプのプロダクトです。
利用している時間だけ課金されるタイプです。無料枠もありますので、個人で試したい時には良さそうですね。
前提
- Ruby 3.1.2
- Rails 7.0.4
- Google Cloud アカウント作成済み
- gcloud コマンドが使える
利用するプロダクト
- Cloud Run
- Cloud Build
- Container Registry
構築の流れ
- Rails アプリ作成
- Cloud Build でイメージ作成
- Cloud Run にデプロイ
Rails アプリ作成
scaffoldでシンプルなCRUDページを作成します。
# Rails アプリ作成. この後は sample-app 配下で作業します
$ rails new sample-app
$ cd sample-app
# scaffold でページ作成
$ bin/rails g scaffold Post title:string content:text
$ bin/rails db:migrate
# http://localhost:3000/posts で動作確認します。
$ bin/rails s
Cloud Build でイメージ作成
イメージ作成の設定ファイル Dockerfile を作成します。
$ touch Dockerfile
FROM ruby:3.1.2
RUN mkdir /myapp
WORKDIR /myapp
ADD Gemfile /myapp/Gemfile
ADD Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
ADD . /myapp
RUN bundle exec rails db:migrate
# Cloud Run はデフォルトポート8080で起動
EXPOSE 8080
CMD ["bin/rails", "server", "-b", "0.0.0.0", "-p", "8080"]
Cloud Build の設定ファイル cloudbuild.yaml を作成します。
$ touch cloudbuild.yaml
steps:
# Cloud Build でビルド
- id: "build image"
name: "gcr.io/cloud-builders/docker"
entrypoint: 'bash'
args: ["-c", "docker build -t gcr.io/${PROJECT_ID}/${_SERVICE_NAME} . "]
# Container Registry にアップロード
- id: "push image"
name: "gcr.io/cloud-builders/docker"
args: ["push", "gcr.io/${PROJECT_ID}/${_SERVICE_NAME}"]
substitutions:
_SERVICE_NAME: sample-app-service
images:
- "gcr.io/${PROJECT_ID}/${_SERVICE_NAME}"
Cloud Build でビルドして、Container Registry にアップロードします。
Cloud Build API の権限がない場合は、許可するか聞かれることがあります。
$ gcloud builds submit .
Cloud Run にデプロイ
Cloud Run にデプロイします。
こちらもAPI権限がない場合は、許可するか聞かれることがあります。
# --image は Container Registry にアップロードしたものを設定
# --allow-unauthenticated で誰でもアクセスできるようにする
$ gcloud run deploy sample-app-service \
--image gcr.io/cloud-run-build/sample-app-service \
--region asia-northeast1 \
--allow-unauthenticated
...
Service URL: https://sample-app-service-[xxx]-an.a.run.app
Service URL が表示される為、/posts/new
にアクセスして登録処理ができれば完了です!
まとめ
今回は超シンプルに Cloud Run でアプリを動かしました。
実際のサービスを運用するにはデータベースに Cloud SQL を使ったり、環境変数を Secret Manager で管理するなど、他のプロダクトの連携が必要になります。
実運用に近い形も検証して、また記事にしていきたいと思います!
Reference