メンテナンスモード
最終更新日 2020年03月09日(月)
Table of Contents
Heroku アプリへのアクセスを一時的に無効にする必要がある場合は (大規模な移行を実行するなど)、Heroku のビルトインメンテナンスモードを有効にできます。メンテナンスモードの間、アプリは静的なメンテナンスページをすべての訪問者に表示します。
メンテナンスモードがアクティブである間、エラーコード H80 がログで返されます。
アプリがメンテナンスモードになっている間も、スケジューラージョブは実行できます。実行するように設定されたジョブがある場合は注意してください。
使用
メンテナンスモードを有効にするには、次のように実行します。
$ heroku maintenance:on
Enabling maintenance mode for myapp... done
メンテナンスモードを無効にするには、次のように実行します。
$ heroku maintenance:off
Disabling maintenance mode for myapp... done
アプリの現在のメンテナンスステータスを調べるには、次のように実行します。
$ heroku maintenance
off
メンテナンスモードと dyno
メンテナンスモードを有効または無効にしても、アプリの dyno 形式は変更されません。メンテナンスモードの間、dyno では請求時間が発生し続けます。 Web dyno は実行し続けますが、Heroku のルーターはすべての自らへの受信 HTTP リクエストをブロックします。他のタイプの dyno (Worker dyno など) も実行し続け、通常どおり、One-off dynos を実行できます。
メンテナンスモードでの dyno のスケーリング
メンテナンス操作中、アプリの dyno を 0 にスケールすると役立つことがあります。たとえば、データベーストランザクションの発生を防止できます。
次のように、メンテナンスモードに移行して web
dyno を 0 にスケールします。
$ heroku maintenance:on
Enabling maintenance mode for myapp... done
$ heroku ps:scale web=0
Scaling web processes... done, now running 0
worker
など、アプリの他のプロセスタイプにも同じ操作を行えます。
メンテナンスモードの間に dyno をスケールダウンした場合は、必ずアプリへのトラフィックを復元する前に、dyno を元どおりにスケールアップしてください。
アプリの Web dyno を 0 にスケールした場合、メンテナンスモードの動作は、アプリが Common Runtime で実行するか、Private Space で実行するかによって異なります。
- Common Runtime では、メンテナンスページは共有ルーティングクラスターで提供されるので、引き続き提供されます。
- Private Space では、メンテナンスページは提供されません。これは、Web dyno と同じコンピューティングインスタンス上に存在するルーティングプロキシによって提供されるためです。
メンテナンスページのカスタマイズ
次の環境設定を設定することにより、アプリに応じたカスタムメンテナンスページを指定できます。
heroku config:set MAINTENANCE_PAGE_URL=//s3.amazonaws.com/<your_bucket>/your_maintenance_page.html
詳細については、この記事を参照してください。