Heroku 上で動く Hubot をうまく休ませる

  • 67
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

残念ながら、Heroku の料金プラン変更 により、Free Plan のままでは Bot を動かし続けることができなくなりました。Sleep しないように、自分自身を起こし続ける hubot-heroku-keepalive(https://github.com/hubot-scripts/hubot-heroku-keepalive) も、早速今回の変更に対応したようなので、設定してみましょう。

hubot-heroku-keepalive の設定

Free Plan に対応するため、2つの環境変数が追加になっています。

  • HUBOT_HEROKU_WAKEUP_TIME
  • HUBOT_HEROKU_SLEEP_TIME

この設定により、HUBOT_HEROKU_WAKEUP_TIMEHUBOT_HEROKU_SLEEP_TIME の間だけ Keep Alive の仕組みが動作することになります。

また、30分何もしていないと Sleep してしまうので、HUBOT_HEROKU_KEEPALIVE_INTERVAL を 30分より短くする必要があります。デフォルトが 5分なので、特に問題はないでしょう。

しかし、これだけでは永続的に Hubot を動かすことはできません。hubot-heroku-keepalive には、Sleep した Dyno を起こす方法を持っていません。

今回は、Heroku の Add-on である Process Scheduler を利用します。

Process Scheduler の設定

heroku コマンドでインストール 〜 設定画面を開くところまで行います。

$ heroku addons:create process-scheduler
Creating process-scheduler-hogehoge... done, (free)
Adding process-scheduler-hogehoge to your-app... done
Setting PROCESS_SCHEDULER_URL and restarting your-app... done, v43
Use `heroku addons:docs process-scheduler` to view documentation.

$ heroku addons:open process-scheduler
Opening process-scheduler (process-scheduler-hogehoge) for your-app... done

まず、Heroku の API Key を要求されるので、Manage Account で API Key を取得しておきましょう。

注意ポイントは Time Zone の設定です。この設定と Heroku の Time Zone が一致している必要があります。日本時間の場合は、Add-on の設定は、(GMT + 9:00) Tokyo を指定し、Heroku は環境変数に、

  • TZ=Asia/Tokyo

と設定しておきましょう。

後は、hubot-heroku-keepalive で設定した時間と Process Scheduler の時間に同じものを設定すれば完了です。