Closed4

AppEngineのスタンダード環境からフレキシブル環境へと移行する(Ruby on Rails)

catnosecatnose

ZennのAPIはRails on AppEngineで動かしている。これまでスタンダード環境(Standard Enviroment)を使っていたが、事情があってフレキシブル環境(Flexibile Enviroment)へ移行することにした。

その経緯は別の記事に書くとして、このスクラップでは移行で行った手順をまとめておく。

catnosecatnose

前提:AppEngineのランタイムについて

ドキュメントがわかりやすい。

スタンダード環境のrubyランタイム

スタンダード環境でrubyアプリを動かす場合、ランタイムはapp.yamlruntime: ruby27のように明記する。対応しているrubyバージョンは上記のドキュメントでチェックできる。

フレキシブル環境のrubyランタイム

フレキシブル環境の場合、ランタイムはDockerfileを作って自作することもできるし、AppEngineに用意されているものを使うこともできる。

既存のものを使う場合もルートのディレクトリに配置した.ruby-versionというファイルに指定する形で自由にrubyのバージョン選べる。既存のDockerfileではビルド時にrbenvを使う仕組みになっている。

今回はフレキシブル環境にもともと用意されているランタイムを使うことにした。

catnosecatnose

具体的なapp.ymlの変更点は以下

スタンダード環境のapp.yml

service: default
runtime: ruby27 # ruby 2.7
instance_class: F4_1G
entrypoint: bundle exec rackup -p $PORT
automatic_scaling:
  target_cpu_utilization: 0.5
  min_instances: 2
  max_instances: 20
  min_idle_instances: 2
  max_idle_instances: 3
  max_concurrent_requests: 80 # これ以上の同時リクエストで新しいインスタンスを立ち上げる(デフォルトは10)
env_variables:
  TZ: "Asia/Tokyo"
  RAILS_LOG_TO_STDOUT: "1"
  # その他環境変数をここに
inbound_services:
  - warmup # warmupリクエスト(/ah/warmupへウォームアップのためのリクエストを送ってくれるようになる)

catnosecatnose

フレキシブル環境のapp.yml

service: default
runtime: ruby
env: flex
resources:
  cpu: 2
  memory_gb: 4
  disk_size_gb: 10
entrypoint: bundle exec rackup -p $PORT

# スケーリング設定の書き方がスタンダードとは異なる
automatic_scaling:
  min_num_instances: 1
  max_num_instances: 5
  cpu_utilization:
    target_utilization: 0.6

# 準備チェック(pathを叩いたときに200がすぐ返ってきたら準備ができたとしてリクエストが流れるように)
readiness_check:
  path: "/_ah/readiness_check"

env_variables:
  TZ: "Asia/Tokyo"
  RAILS_LOG_TO_STDOUT: "1"
  # その他環境変数をここに
# CloudSQLに接続する場合は下記の設定が必要... https://cloud.google.com/ruby/rails/using-cloudsql-postgres
beta_settings:
  cloud_sql_instances: CloudSQLインスタンス接続名

これ以外については同じなのでスムーズに移行できた。

このスクラップは2020/12/19にクローズされました