Closed4
AppEngineのスタンダード環境からフレキシブル環境へと移行する(Ruby on Rails)
ZennのAPIはRails on AppEngineで動かしている。これまでスタンダード環境(Standard Enviroment)を使っていたが、事情があってフレキシブル環境(Flexibile Enviroment)へ移行することにした。
その経緯は別の記事に書くとして、このスクラップでは移行で行った手順をまとめておく。
前提:AppEngineのランタイムについて
ドキュメントがわかりやすい。
スタンダード環境のrubyランタイム
スタンダード環境でrubyアプリを動かす場合、ランタイムはapp.yaml
にruntime: ruby27
のように明記する。対応しているrubyバージョンは上記のドキュメントでチェックできる。
フレキシブル環境のrubyランタイム
フレキシブル環境の場合、ランタイムはDockerfileを作って自作することもできるし、AppEngineに用意されているものを使うこともできる。
既存のものを使う場合もルートのディレクトリに配置した.ruby-version
というファイルに指定する形で自由にrubyのバージョン選べる。既存のDockerfileではビルド時にrbenv
を使う仕組みになっている。
今回はフレキシブル環境にもともと用意されているランタイムを使うことにした。
具体的な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へウォームアップのためのリクエストを送ってくれるようになる)
フレキシブル環境の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にクローズされました