【Heroku】Advanced SchedulerでメンテナンスモードをON/OFFする


はじめに

HerokuのDynoのメンテナンスモードをスケジューラーからON/OFFしたいなと思って、さっそくAddonのAdvanced Schedulerを試したが、Heroku Schedulerと同様に、これで起動するOne-off Dynoにも、やはりHeroku CLIが入ってないので、昔試したやり方を備忘録として残すことにした。

実行方式

Advanced Schedulerの中味は、One-off Dynoを起動して登録コマンドを実行するが、Heroku CLIは使えないので、HTTPS経由でHerokuのPlatform APIを使って操作することにする。

予め用意するもの

Platform APIを動かすためには、それを誰が動作させるのかを示す鍵が必要である。以下のコマンドでHerokuアカウントのAuthキーをスケジューラー用に新規作成しておく。

$ heroku authorizations:create

App Update

メンテナンスモードをON/OFFするため、Platform APIのApp Updateを利用する。以下のコマンドを実行してひとまずローカルの端末から動くか確認する。bodyのmaintenanceのvalueがtrueでメンテナンスON、falseでメンテナンスOFFになるので適宜変更。

$ curl -X PATCH https://api.heroku.com/apps/{ココにアプリケーション名} \
       -d '{"maintenance": false}' \
       -H "Content-Type: application/json" \
       -H "Accept: application/vnd.heroku+json; version=3" \
       -H "Authorization: Bearer {ココに予め作成しておいたAuthキー}"

Triggerを設定する

ここまできたらあとは確認が取れたCURLのコマンドをAdvanced SchedulerのTriggerにセットすればOK。

その他

Authキーは、自分自身のHerokuアカウントより作られたものであるため、アプリケーションから権限を剥奪されて自分のアカウントから見えなくなったアプリケーションを操作することはできないので、引き継ぎの際には注意しておく。