12
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

GCPでPythonプログラムを定期実行する【GCP/Python】

Last updated at Posted at 2022-06-29

やりたいこと

Pythonプログラムを定期実行させる必要がありました。
が、cronだとPCを起動していないといけない。。。ちょっときついので、GCPにやってもらうことにします。
GCPのCloudFunctions、PubSub、CloudSchedulerを使用します。
各種サービスやジョブはコンソールからぽちぽちと作成します、ご了承ください。(terraform勉強中なので、いつかtfファイルで書き直したいです。。)

設計

image.png

CloudSchedulerで、定期的にPubSubトピックにメッセージをpublishさせる。
そのPubSubトピックにメッセージがpublishされることをトリガーに、CloudFunctionsの関数が実行される。
CloudFunctionsの実行結果はCloudLoggingに出力される。

手順

最後にも注意書きしましたが、定期実行は実験が終了したら止めるようにしましょう!課金が進みます

PubSubトピックを作成する

2022-06-25_18h30_12.png
つくります。

CloudFunctionsの関数を作成する

2022-06-25_18h01_00.png
トリガーのタイプをPubSubに変更し、先ほど作ったトピックを選択します。
これで、このトピックにmessageがpublishされたら、この関数が動くようになります。
外部からのアクセスを今回は行う必要がないため、ネットワークの設定のうち、上り(内向き)設定を「内部トラフィックのみを許可する」に変更しました。

今回はひとまずこんな関数にしました。
Cloud Loggingクライアントライブラリを使って、CloudLoggingにログを出力しています。

main.py
import base64
import datetime
import google.cloud.logging
from logging import getLogger, DEBUG

logging_client = google.cloud.logging.Client()
logging_client.setup_logging()
logger = getLogger(__name__)
logger.setLevel(DEBUG)

def hello_pubsub(event, context):
    pubsub_message = base64.b64decode(event['data']).decode('utf-8')
    now = datetime.datetime.now()

    logger.info("PubSubメッセージ: {}".format(pubsub_message))
    logger.info("now: {}".format(now))

CloudLoggingクライアントライブラリのバージョンをrequirements.txtに記載しておきます。

requirements.txt
google.cloud.logging>=3.0.0

CloudSchedulerのジョブを作成する

image.png
いったん毎分に設定しました。

image.png
ターゲットタイプをPubSubにし、トピックを選択します。
定期的に、PubSubトピックに対してmessageを送るよということですね。
トピックに送信するメッセージを設定します。今回は

定期実行のサンプルです。
This is sample of automation.

というメッセージをPubSubトピックに送るようにしました。
オプションは特にいじってないです。

image.png
CloudSchedulerのジョブが問題なく作成されたら、(今回は毎分の設定なので)次の0分のタイミングで、CloudFunctionsがPubSubにメッセージをパブリッシュします。

ログを確認する

CloudLoggingを確認してみると
image.png
問題なくログが出力されていました。
このあとも、1分おきに実行されログが出ていたのが確認できました。

注意事項

動作確認が終わったら、CloudSchedulerのジョブを一時停止or削除するのを忘れずに!!
今回は毎分でcronを設定しているので、放置すると順調に課金がすすんでしまいます。
CloudSchedulerのジョブ一覧の画面から該当のジョブを選択し、一時停止/削除を行ってください。
image.png

参考URL

12
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?