Heroku APIを使用するスクリプトを作成することで、スケジュールに従ってherokudynoをスケーリングできます。次に、Procfileにエントリを作成し、HerokuSchedulerアドオンを介して呼び出します。方法は次のとおりです。
requirements.txt
まず、「heroku」pythonモジュールを:に追加する必要があります。
heroku == 0.1.2
次に、スクリプトがAPIを使用できるように、APIキーを含む構成変数を作成します。
heroku config:add HEROKU_API_KEY = your_api_key_string
APIキーは、herokuアカウントページにあります。
これで、dynoをスケーリングするPythonスクリプトを作成できるようになります。これは、コマンドライン引数としてdynoの数を受け入れる非常に基本的なスクリプトです。
import os
import sys
import heroku
"""Scale heroku web processes using the heroku python API."""
# you may want to add better argument processing, use argparse, etc.
dynos = int(sys.argv[1])
cloud = heroku.from_key(os.environ.get('HEROKU_API_KEY'))
app = cloud.apps['your_app_name']
try:
# you may want to add a maximum dyno check here to prevent costly mistakes ;)
webproc = app.processes['web']
webproc.scale(dynos)
except KeyError:
# note: scaling to 0 dynos or attempting to scale up if 0 web dynos exist
# both throw this error. Make sure you have at least one dyno.
print >> sys.stderr, "Could not scale web processes - are there 0 web dynos running?"
次に、Heroku Scheduler Webページ内でタスク全体を定義するか、Procfile内でタスクを定義して、WebページからProcfileプロセス名を呼び出すことができます。herokuのWebサイトにログインしなくてもプロセスを簡単に更新または変更できるため、後者の方が好きです。
したがって、Procfileにエントリを作成します。
scale_up: python scale.py 2
scale_down: python scale.py 1
そして、それらをスケジュールします。
そして出来上がり!これで、dynoは指定された時刻にスケールアップまたはスケールダウンします。
-
スケジューラのWebページでスケジュールされたタスクを作成すると、実行する時刻を編集することはできませんが、新しいタスクを作成する場合は、時刻を設定してから古いタスクを削除できます。
注2: heroku python APIは、0 dynoにスケールダウンしようとした場合、または0 Web dynoが現在存在する場合にスケールアップしようとした場合に、KeyErrorをスローするようです。両方を回避するには、0dynoにスケールダウンしないでください。