メンテナンスモード
最終更新日 2024年05月07日(火)
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 にスケールすると役立つことがあります。たとえば、データベーストランザクションの発生を防止できます。
まず、メンテナンスモードを次のように有効にします。
$ heroku maintenance:on
Enabling maintenance mode for myapp... done
現在の Dyno formation を確認し、メンテナンス後に復元する値を把握したら、dyno をゼロにスケールします。
$ heroku ps
web=3:Private-M worker=2:Private-M
$ heroku ps:scale worker=0
Scaling worker processes... done, now running 0
web
など、あらゆるアプリのプロセスタイプにも同じ操作を行うことができます。
Private Spaces では web=0
のスケーリングを避けてください。スケーリングを実行すると、メンテナンスページが提供される代わりにアプリ応答エラーが発生します。スペース内のルーティングプロキシが Web dyno のコンピュートインスタンス上に存在するためです。
One-off dynos を実行すると、メンテナンスアクティビティを実行したり、データベースのアップグレード後にアプリの健全性を確認したりすることができます。
$ heroku run bash
メンテナンスアクティビティが完了したら、dyno をスケールアップします。
$ heroku ps:scale worker=2
Scaling worker processes... done, now running 2
メンテナンスモードを無効にするには、次のように実行します。
$ heroku maintenance:off
Disabling maintenance mode for myapp... done
メンテナンスページのカスタマイズ
次の環境設定を設定することにより、アプリに応じたカスタムメンテナンスページを指定できます。
heroku config:set MAINTENANCE_PAGE_URL=//s3.amazonaws.com/<your_bucket>/your_maintenance_page.html
詳細については、この記事を参照してください。