App Engine の 503 エラーの原因がわかりにくかった話

ハマった割に全然情報がなさそうだったので備忘録がてらまとめておく。
Standard 環境については使ったことがないので知らない。

何が起きたかと言うと、 App Engine をバージョン停止 → 起動を行うとサーバーが 503 エラーになった。

[追記ここから]

10分程度放っておいたら正常にアクセスできた。
ブラウザのコンソール上では正常可動しているように見えたが、実際にはまだ環境構築中だったらしい。

定期的にインスタンスも再起動されるようなので、このことを知らないと混乱しそう。

すべてのフレキシブル インスタンスが毎週再起動されます。再起動中には、下位互換性のある重要な更新が基盤オペレーティング システムに自動的に展開されます。アプリケーションのイメージは再起動後も同じままです。

https://cloud.google.com/appengine/docs/flexible/ruby/how-instances-are-managed?hl=ja

[追記ここまで]

以下、再現方法

とりあえず基本的に以下のURLに沿ってデプロイまでやる。

https://cloud.google.com/ruby/rails/appengine

rails プロジェクトを作成

rails new PROJECT_NAME
cd PROJECT_NAME

ローカル環境で動作確認
サーバーが起動したら http://localhost:3000/ にアクセスし、rails の画面が表示されればOK

bundle install
bundle exec rails server
bundle exec rails generate controller Welcome index

config/routes.rb に追記

root 'welcome#index'

SECRET_KEY_BASE を発行し、控えておく

bundle exec rails secret

app.yaml の作成
ここは少し変えた。

  • entrypoint を rails server を使うように修正
  • お金かけないようにインスタンス数は1固定。
entrypoint: bundle exec rails server -p $PORT
env: flex
runtime: ruby

env_variables:
  SECRET_KEY_BASE: xxxxx

manual_scaling:
  instances: 1

デプロイ

gcloud app create --project PROJECT_NAME
RAILS_ENV=production bundle exec rails assets:precompile
gcloud app deploy --project PROJECT_NAME

デプロイが終わるまでしばらく待つ。

起動したら画面を確認。表示された。

バージョンを停止 → 起動で再確認。503エラーになった。

503エラー画面

再度デプロイしたら正常に動いた。