Herokuのdynoは1日1回再起動する https://qiita.com/pilot/items/d42526c227ea322a2aa1 の続き
SchedulerアドオンでHeroku CLIを叩いて手動再起動する
- Heroku CLI用のBuild Packを追加
heroku buildpacks:add --index 1 https://github.com/heroku/heroku-buildpack-cli
- Heroku CLI用の長期間認証を作成
-
heroku authorizations:create --description "for <アプリケーション名> HEROKU_API_KEY"
★--descriptionでメモを付けておくと後でheroku authorizationsで確認できる
★後述するが実運用ではいわゆるシステムアカウントで作成するのがおすすめ - 結果の「Token」欄の値を使う
-
- 環境変数に設定
-
heroku config:set HEROKU_API_KEY=<長期間認証Token>
★環境変数を設定すると起動中のアプリが再起動するので注意★
-
- アプリをデプロイ (git push)
- ビルドログに「Heroku CLI installation done」が表示される
- Schedulerアドオン導入
heroku addons:create scheduler:standard
- 無料、Very Rareに動かない/重複実行あり https://devcenter.heroku.com/articles/scheduler
- スケジュール設定
-
heroku addons:open scheduler
- ブラウザが起動してスケジュール設定画面が表示される
- 例えば「/app/.heroku/bin/heroku restart -a <アプリ名> web.1」「Standard 1X」「Daily」「20:00 UTC」を設定
- web.1とweb.2で時刻をずらす等
- 「20:00 UTC」は日本時間の午前5時
-
Schedulerはheroku run bash
と同じくOne Off Dynoで実行されるので「長時間使用で無料枠を超える」等が起きないように留意のこと
再起動処理中もなるべくアプリを使えるようにするためにPrebootも設定しておく
heroku features:enable preboot
Prebootについて https://devcenter.heroku.com/articles/preboot
設定していないと「Dynoは立ち上がったがアプリの準備はまだできていない」状態でリクエストが振られ、エラーになることがある
長期間認証は「発行した個人アカウント」に紐づくため、その人が退職・チーム離脱・パスワード変更等を行うとキーが無効になるため、運用上は「人に紐づかない運用専用アカウント(いわゆるシステムアカウント)」での発行が必要
当該アカウントは当該アプリの再起動を行う権限(少なくともoperate権限)が必要なので、heroku access:add <対象アカウント(メアド)> --permissions=view,deploy,operate -a <アプリ名>
で権限を付与しておく
当該アプリに対する権限リストはheroku access -a <アプリ名>
で確認できる
以上