こんにちは、ミナピピン(@python_mllover)です。
前回はHerokuでPythonのプログラムを定期実行する環境を作成したのですが、痒いところに手が届かない仕様だったので今回はGCPの提供しているサービスであるを使ってCloud FunctionsとCloud Schedulerを組み合わせてPythonのプログラムを定期実行する環境を作成したいと思います。
関連記事:Python製プログラムを「Heroku scheduler」を使って無料で定期実行する
Cloud Functions とは
Google Cloud Functions は軽量なコンピューティング ソリューションで、デベロッパーはサーバーやランタイム環境を管理することなく、Cloud イベントに応答する単一目的のスタンドアロン関数を作成することができます。
URL:Cloud Functions
Cloud Scheduler とは
Cloud Scheduler は、エンタープライズ クラスのフルマネージド cron ジョブ スケジューラです。Unix cron 形式でスケジュールを定義して、1 日に複数回ジョブを実行したり、1 年のうちの特定の日や月にジョブを実行したりできます。herokuとの違いはlinuxのcronの書式をそのまま使えるので、herokuよりも細かい時間指定が可能になります。
自作のプログラムを定期実行する
関数を作成する
まずはCloud Functionsで定期実行する関数を作成します。Google Cloud Platform にてプロジェクトを作成して、左上のメニューから Cloud Functions を選択します。
プロジェクトの作成について:【GCP】GoogleCloudPlatformでプロジェクトを作成してAPI鍵の作成&有効化する
次に画面に中央上部にある「関数の作成」というボタンをクリックします。
トリガーのタイプはhttpではなく「Cloud Pub/Cub」を指定してください。その下のトピックは適当な名前のトピックを新規作成して選択してください。一応このトピックは「Cloud Scheduler」の方で使うため、わかりやすい命名をしたほうが良いです。
次は定期実行するスクリプトを作ります。サンプルとしてLINEの通知プログラムを使用します。アクセストークンの発行などについては https://qiita.com/moriita/items/5b199ac6b14ceaa4f7c9
を参考にしてください。
<test.py>
import requests def hello_pubsub(): url = "https://notify-api.line.me/api/notify" access_token = 'your_api_key' headers = {'Authorization': 'Bearer ' + access_token} message = 'hello!'.encode("utf-8").decode("latin1") payload = {'message': message} r = requests.post(url, headers=headers, params=payload,)
次にrequirements.txt には使用している外部モジュール名を記載します。今回はrequestsを使用しているので、以下の内容を入力してください。
# Function dependencies, for example: # package>=version requests
これで画面下の「デプロイ」をクリックしてください。
これでcloudfunctionのリストに関数が登録され、緑の〇が表示されていたらデプロイ成功です。
Cloud Schedulerで定期実行方法を指定する
関数を作成したら次はCloud Schedulerで実行頻度を指定しましょう。
まず「ジョブの作成」をクリックします。
実行頻度や曜日指定はcronの書き方で指定できます。
参考:https://www.yoheim.net/blog.php?q=20190902
今回は10分おきにプログラムを実行する設定を意味する「*/10 * * * *」を入力します。
ターゲットには 「Pub/Sub」 を指定して、トピックには Cloud Functions で作成したトピック名を入力します。ちなみにペイロードには関数に渡すデータを入力できます。ここでは「{}」で大丈夫です。
これでアクセストークンが正確であれば10分ごとにLINEに通知が飛んできます。確認出来たら頻度を変えるかジョブの削除を行いましょう。削除は右端の「操作」から行えます
参考:https://qiita.com/niwasawa/items/90476112dfced169c113
コメント