Pub/SubをトリガとしてCloud Functionsの関数をCloud Schedulerジョブで呼び出し、バッチ処理を実行する方法をご紹介します。
目次
Cloud Schedulerによる自動スクレイピング構成図
今回は上記構成図でいう、Cloud SchedulerからCloud Functionsを実行する流れを紹介します。
Cloud SchedulerとCloud Functionsを経由するPub/Subトピックを作成
ナビゲーションメニューからPub/Subを選択します。
トピックを作成から新規でトピックを作成します。ここでは「sample」というトピックIDとしています。
暗号化は「Googleが管理する鍵」を選択し、「トピック作成」を押下します。
Cloud Functionsで関数を作成
ナビゲーションメニューからCloud Functionsを選択し、「関数を作成」を押下します。
関数の名前を入力します。ここでは「sample」としました。割り当てられるメモリは128MBから2GBまで選択することができます。
トリガーは「Cloud Pub/Sub」を選択し、トピックを先ほど作成した「sample」を選択します。
ソースコードはバッチで動かした処理を記述します。今回はバッチ処理で動かすことが目的なので、デフォルトのままにしておきます。
その他、リージョンやタイムアウトなども設定できます。
タイムアウトはデフォルト1分で最大9分まで延ばすことができます。
Cloud Schedulerでジョブを作成
ナビゲーションメニューからCloud Schedulerを選択し、「ジョブを作成」を押下します。
ジョブの名前と説明を入力します。頻度は以下の公式サイトを参考に入力します。今回は毎分で設定しています。
参考:
タイムゾーンは「日本標準時(JST)」を選択します。
ターゲットは「Pub/Sub」を選択し、トピックは先ほど作成した「sample」を入力します。
ペイロードはPub/Sub ターゲットに送信する文字列です。
Cloud SchedulerでCloud Functionsをバッチ処理してみる
ここまできたら、バッチ処理の準備完了です。
Cloud Schedulerのジョブが実行されたら、ログを確認してみましょう。
Cloud Functionsの作成した関数から「ログを表示」を押下します。すると以下のようにペイロードで渡した「sample message」がログに表示されているはずです。
これはCloud Schedulerのジョブで渡した「sample message」がPub/Subを経由して、Cloud Functionsで作成した関数の以下の処理でログを表示しています。
hello_pubsubの引数であるeventのevent[‘data’]にbase64でエンコードされた状態で格納されており、それをデコードしてprintしています。
1 2 | pubsub_message = base64.b64decode(event['data']).decode('utf-8') print(pubsub_message) |
以上、Cloud SchedulerでCloud Functionsをバッチ処理を実行する方法でした。
参考: