★悩み★
・HerokuでPythonのプログラムを定期実行(10分間隔で実行など)できる?
・無料(クレジットカード登録不要)でPythonプログラムを定期実行したい。
・HerokuのclockでPythonのプログラムを定期実行する手順を知りたい。
こういった「悩み」に答えます。
★本記事の内容★
① HerokuのclockでPythonのプログラムを定期実行するための準備を解説
② HerokuのclockでPythonのプログラムを定期実行する手順を解説
これからご紹介する「【無料】HerokuのclockでPythonのプログラムを定期実行する手順」を実践したことで、筆者は15分以内で「HerokuでPythonのプログラムを10分間隔で定期実行」できました。
記事の前半では「HerokuのclockでPythonのプログラムを定期実行するための準備」を解説します。記事の後半では「HerokuのclockでPythonのプログラムを定期実行する手順」を紹介します。
この記事を読み終えることで、「Herokuを用いてPythonのプログラムを無料(クレジットカードをWebサイトに登録不要)で定期実行できる」状態になります。
★Herokuのclockとは★
Herokuは、機能の1つとして「Custom Clock Processes(clockは略称)」を提供しています。本機能を利用すること、Heroku上で定期的にある処理(Pythonで作った処理など)を実行できます。また、本機能は無料で利用できる機能です。(クレジットカードの登録など不要)
Herokuの特徴(メリットとデメリット)やユースケースを知りたい方には、以下の記事がオススメです。
>> 【要点】Herokuとはを解消!初心者向けに特徴から使い方まで解説
HerokuのclockでPythonのプログラムを定期実行するための準備
「HerokuのclockでPythonのプログラムを定期実行するための準備」に関してご紹介します。
★HerokuのclockでPythonのプログラムを定期実行するための準備★
手順1:Herokuのアカウントを新規作成
手順2:HerokuのCLI(herokuコマンド)をインストール
手順3:HerokuのCLI経由でHerokuにログイン
上記手順を実施することで、「HerokuのCustom Clock ProcessesでPythonのプログラムを定期実行するための準備」ができます。
上記の各手順は、以下の日時と環境で動作確認済みです。
動作確認済み日時:2021年12月7日
動作確認済み環境:CentOS Linux release 7.7.1908 (Core)
以降で、上記「HerokuのclockでPythonのプログラムを定期実行するための準備」の各手順に関してご説明します。
手順1:Herokuのアカウントを新規作成
「手順1:Herokuのアカウントを新規作成」に関して解説します。
HerokuのCustom Clock Processesを使いプログラムを定期実行するためには、Herokuのアカウントが必要です。
Herokuのアカウントを新規作成する手順に関しては、以下の記事をごらんください。
既にHerokuのアカウントを持っている場合、本手順を省略してください。
以上で、「手順1:Herokuのアカウントを新規作成」は完了です。
手順2:HerokuのCLI(herokuコマンド)をインストール
「手順2:HerokuのCLI(herokuコマンド)をインストール」に関して解説します。
HerokuのCustom Clock Processesを使いプログラムを定期実行するために、HerokuのCLI(herokuコマンド)をインストールしましょう。
HerokuのCLI(herokuコマンド)をインストールする手順に関しては、以下の記事をごらんください。
既にHerokuのCLI(herokuコマンド)をインストールしている場合、本手順を省略してください。
以上で、「手順2:HerokuのCLI(herokuコマンド)をインストール」は完了です。
手順3:HerokuのCLI経由でHerokuにログイン
「手順3:HerokuのCLI経由でHerokuにログイン」に関して解説します。
HerokuのCustom Clock Processesを使うには、HerokuのCLI経由でHerokuにログインしておく必要があります。
HerokuのCLI(herokuコマンド)経由でHerokuにログインする手順に関しては、以下の記事をごらんください。
既にHerokuのCLI(herokuコマンド)経由でHerokuにログインしている場合、本手順を省略してください。
以上で、「手順3:HerokuのCLI経由でHerokuにログイン」は完了です。
上記の流れで、HerokuのCustom Clock ProcessesでPythonのプログラムを定期実行するための準備ができました。
HerokuのclockでPythonのプログラムを定期実行する手順
「HerokuのclockでPythonのプログラムを定期実行する手順」に関してご紹介します。
★HerokuのclockでPythonのプログラムを定期実行する流れ★
手順1:HerokuにデプロイしたいPythonアプリを作成
手順2:定期実行するためのAPScheduler(Pythonライブラリ)をインストール
手順3:定期実行したいPythonのプログラムを作成
手順4:作成したPythonのアプリとプログラムをHerokuにデプロイ(配備)
手順5:HerokuのCustom Clock Processesを起動(有効化)
手順6:起動したHerokuのCustom Clock Processesの動作確認
上記手順を実施することで、「HerokuのCustom Clock ProcessesでPythonのプログラムを定期実行」ができます。
上記の各手順は、以下の日時と環境で動作確認済みです。
動作確認済み日時:2021年12月7日
動作確認済み環境:CentOS Linux release 7.7.1908 (Core)
以降で、上記「HerokuのclockでPythonのプログラムを定期実行する流れ」の各手順に関してご説明します。
手順1:HerokuにデプロイしたいPythonアプリを作成
「手順1:HerokuにデプロイしたいPythonアプリを作成」に関して解説します。
HerokuのCustom Clock Processesを使うために、HerokuにデプロイできるPythonアプリを作成しましょう。
Herokuにデプロイできる「Pythonアプリ」の作成手順に関しては、以下の記事をごらんください。
上記記事で作成したPythonアプリを想定として、以降の手順を解説します。
以上で、「手順1:HerokuにデプロイしたいPythonアプリを作成」は完了です。
手順2:定期実行するためのAPScheduler(Pythonライブラリ)をインストール
「手順2:定期実行するためのAPScheduler(Pythonライブラリ)をインストール」に関して解説します。
HerokuのCustom Clock Processesを使うために、手順1で作成したPythonアプリで「APScheduler」ライブラリを利用できる状態にしましょう。
手順1で作成したPythonアプリで「APScheduler」ライブラリを利用できる状態にするために、「requirements.txt」に「apscheduler」を追記してください。
# cd <FastAPIアプリケーションのディレクトリ>
# ls -1
Procfile # Heroku上でFastAPIアプリを起動するためのコマンドを記載
main.py # FastAPIアプリのプログラム
requirements.txt # FastAPIアプリで利用するPythonのライブラリを記載
runtime.txt # 利用するPythonのバージョンを記載
# cat Procfile
web: uvicorn main:app --reload --host=0.0.0.0 --port=${PORT:-5000}
# cat runtime.txt
python-3.8.5
#
# cat requirements.txt
fastapi
uvicorn
apscheduler ★この行を追加★
requests ★定期実行したいPythonプログラムで使うため追加★
以上で、「手順2:定期実行するためのAPScheduler(Pythonライブラリ)をインストール」は完了です。
手順3:定期実行したいPythonのプログラムを作成
「手順3:定期実行したいPythonのプログラムを作成」に関して解説します。
HerokuのCustom Clock Processesを使って、定期実行したいPythonのプログラムを作成しましょう。
「Heroku上に配備したPythonアプリに定期的にアクセスする」Pythonプログラムを作成します。プログラムは以下となります。プログラム中の「適宜変更」と書いてある部分は、自分用に書き換えてください。
## 利用するライブラリをインポート
from apscheduler.schedulers.blocking import BlockingScheduler
import requests
## 定期実行したい処理
def job_0():
## Heroku上にデプロイしたPythonアプリのURL
url = "URL"# 適宜変更
## Heroku上にデプロイしたPythonアプリにアクセス
response = requests.get(url)
print("curl for wake on を投げました。status code:" + str(response.status_code))
## APSchedulerの変数を作成
scheduler = BlockingScheduler()
## APSchedulerに定期実行したい処理を登録
scheduler.add_job(job_0, 'cron', minute=10)
## APSchedulerを開始
scheduler.start()
上記プログラムを「clock.py」として、以下の場所に保存してください。
# cd <FastAPIアプリケーションのディレクトリ>
# ls -1
Procfile # Heroku上でFastAPIアプリを起動するためのコマンドを記載
main.py # FastAPIアプリのプログラム
requirements.txt # FastAPIアプリで利用するPythonのライブラリを記載
runtime.txt # 利用するPythonのバージョンを記載
clock.py # HerokuのCustom Clock Processesで実行するPythonプログラム
ちなみに、APSchedulerの詳しい使い方を知りたい方は、以下の記事をごらんください。
以上で、「手順3:定期実行したいPythonのプログラムを作成」は完了です。
手順4:作成したPythonのアプリとプログラムをHerokuにデプロイ(配備)
「手順4:作成したPythonのアプリとプログラムをHerokuにデプロイ(配備)」に関して解説します。
「HerokuのCustom Clock Processesを使用する」設定にした後に、Herokuにデプロイしましょう。
HerokuのCustom Clock Processesするために、「Procfile」に「clock」を追記してください。
# cat Procfile
web: uvicorn main:app --reload --host=0.0.0.0 --port=${PORT:-5000}
clock: python clock.py ★この行を追加★
ファイル編集後、作成したPythonのアプリとプログラムをHerokuにデプロイ(配備)しましょう。Herokuにデプロイする手順に関しては、以下の記事をごらんください。
以上で、「手順4:作成したPythonのアプリとプログラムをHerokuにデプロイ(配備)」は完了です。
手順5:HerokuのCustom Clock Processesを起動(有効化)
「手順5:HerokuのCustom Clock Processesを起動(有効化)」に関して解説します。
Herokuにデプロイしただけでは、「Custom Clock Processes」は起動されません。
HerokuのCustom Clock Processesを起動(有効化)するために、以下のコマンドを順に実行して下さい。
# cd <FastAPIアプリケーションのディレクトリ>
# ↓↓ Heroku上で稼働しているプロスセスを確認 ↓↓
# heroku ps
Free dyno hours quota remaining this month: 550h 0m (100%)
Free dyno usage for this app: 0h 0m (0%)
For more information on dyno sleeping and how to upgrade, see:
https://devcenter.heroku.com/articles/dyno-sleeping
=== web (Free): uvicorn main:app --reload --host=0.0.0.0 --port=${PORT:-5000} (1)
web.1: up 2021/11/30 14:40:57 +0900 (~ 6m ago)
# ↓↓ Heroku上でCustom Clock Processesを起動 ↓↓
# heroku ps:scale clock=1
Scaling dynos... done, now running clock at 1:Free
# heroku ps
Free dyno hours quota remaining this month: 550h 0m (100%)
Free dyno usage for this app: 0h 0m (0%)
For more information on dyno sleeping and how to upgrade, see:
Free Dyno Hours | Heroku Dev CenterEvery personal Heroku account is allocated a pool of hours which you can use with Free dynos. This article describes the behavior of apps using Free dynos.
=== clock (Free): python clock.py (1)
clock.1: starting 2021/11/30 14:49:02 +0900 (~ 2s ago)
=== web (Free): uvicorn main:app --reload --host=0.0.0.0 --port=${PORT:-5000} (1)
web.1: up 2021/11/30 14:40:57 +0900 (~ 8m ago)
コマンド実行後、「clock (Free): python clock.py」が表示された場合、「HerokuのCustom Clock Processesを起動(有効化)できた」と判断できます。
★heroku ps:scaleコマンドのリファレンス★
heroku ps:scale <対象機能>=<起動数>
処理内容:Herokuの機能を指定した数だけ起動
参照:heroku ps:scaleコマンドのリファレンス(公式サイト)
以上で、「手順5:HerokuのCustom Clock Processesを起動(有効化)」は完了です。
手順6:起動したHerokuのCustom Clock Processesの動作確認
「手順6:起動したHerokuのCustom Clock Processesの動作確認」に関して解説します。
HerokuのCustom Clock Processes機能により、定期的にPythonプログラムが実行されているかを確認しましょう。
HerokuのCustom Clock Processes機能により、定期的にPythonプログラムが実行されているかを確認するために、以下のコマンドを実行してください。
# cd <FastAPIアプリケーションのディレクトリ>
# heroku logs --tail
2021-12-07T03:20:00.037022+00:00 app[clock.1]: curl for wake on を投げました。status code:200
2021-12-07T03:19:59.922146+00:00 app[web.1]: INFO: 18.234.51.126:0 - "GET / HTTP/1.1" 200 OK
コマンド実行後、「curl for wake on を投げました。」が出力された場合、「HerokuのCustom Clock Processesを用いて定期的にPythonプログラムを実行できた」と判断できます。
以上で、「手順6:起動したHerokuのCustom Clock Processesの動作確認」は完了です。
上記の流れで、HerokuのCustom Clock Processesを用いて、定期的にPythonのプログラムを実行できました。
ちなみに、「Herokuを用いたWebアプリケーション作成手順」を体系的に学びたい方には、以下がおすすめです。無料体験もあるので、検討する価値ありです。
【まとめ】HerokuのclockでPythonのプログラムを定期実行する手順【無料】
いかがでしたでしょうか?「Pythonの処理を定期実行するためのAPSchedulerライブラリの紹介」、「HerokuのCustom Clock Processesで定期的にPythonプログラムを実行するまでの流れ」を解説し、以下の悩みを解決しました。
★悩み★
・HerokuでPythonのプログラムを定期実行(10分間隔で実行など)できる?
・無料(クレジットカード登録不要)でPythonプログラムを定期実行したい。
・HerokuのclockでPythonのプログラムを定期実行する手順を知りたい。
「PythonのAPSchedulerライブラリ」と「HerokuのCustom Clock Processes機能」を使うだけで、Heroku上でPythonのプログラムを定期実行できます。「無料でかつクレジットカードもWeb上に登録したくない」と考えているあなたに本記事はおすすめですので、本記事を参考に「HerokuでPythonのプログラムを定期実行」を実践してください。
コメント