※GCPアカウントの作成、プロジェクト作成、課金有効化、Cloud SDKのインストールなどは完了している前提で進める。また、使用する言語はpythonとする
環境
- macOS Ventura v13.5.2
- Python 3.11
シリーズ構成
【サーバーレス 第一世代Cloud FunctionsをCloud Schedulerで定期実行】Part1:導入/Pub/SubトピックとCloud Functions作成
【サーバーレス 第一世代Cloud FunctionsをCloud Schedulerで定期実行】Part2:Cloud Schedulerでスケジュール設定・CI/CDパイプライン構築
イメージ図
Cloud SchedulerとCloud Pub/Subを利用することでCloud Functionsを定期実行することが可能。例えば、これらのリソースを用いることで、X等のプラットフォームに自動投稿ができたりする。
Cloud Schedulerジョブで設定されたスケジュールに応じてPub/Subのトピックにメッセージが発行され、トピックのサブスクライバ(Cloud Functions)内の処理が実行される、という流れ

Cloud Schedulerでスケジュール設定
ジョブをスケジュール
GCPでCloud Schedulerを開き、ジョブを作成をクリック。
※Cloud Schedulerを利用するためには、App Engineアプリケーションがプロジェクト内で作成してある必要があるのでもしエラーになる場合はその辺りを確認

名前、リージョン、頻度、タイムゾーンを指定。頻度はcron形式で指定する

配信先には先ほど作成したトピック名を入力。適当なメッセージを入力。メッセージは最終的にCloud Functionsで関数の引数として渡される。最後に作成をクリック

ジョブの実行
指定した時刻になるまで待つか、手動実行することで動作を検証できる。
手動で実行する場合は、スケジューラーの一覧から強制実行を選択すれば良い。

再度Cloud Functionsのログを開き、指定したメッセージが出力されていれば成功。

CI/CDパイプライン構築
一度デプロイした関数はCloud Functions上でインライン編集できるが、バージョン管理等はできないのでローカルからGithubを経由してデプロイできる継続的なフローを構築する
ローカル開発環境の作成
プロジェクトディレクトリ作成
mkdir cf_sample && cd cf_sample
main.pyを作成し、Cloud Functions上でインラインで作成した内容をそのまま貼り付け。requirements.txtは今回依存関係は特にないが、必要な場合はこちらに記述する。
cs_sample
┗main.py
┗requirements.txt
┗cloudbuild.yaml
main.py
import base64
def hello_pubsub(event, context):
"""Triggered from a message on a Cloud Pub/Sub topic.
Args:
event (dict): Event payload.
context (google.cloud.functions.Context): Metadata for the event.
"""
pubsub_message = base64.b64decode(event["data"]).decode("utf-8")
print(pubsub_message)
venvでpythonを実行できるようにする。venvを用いたpython仮想環境の構築は以下を参照されたし
cloudbuild.yamlにデプロイ手順を記述
steps:
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
args:
- gcloud
- functions
- deploy
# デプロイするfunction名
- my-function-1
- --region=asia-northeast1
# 関数のソースコードの場所
- --source=./
# ソースコード内に存在する関数名または完全修飾クラス名
- --entry-point=hello_pubsub
Cloud Buildトリガー設定
githubへのpushをトリガーとしてcloud functionsのデプロイが実行されるように、パイプラインを構築する。詳細については以下の記事を参照されたし
※Cloud Buildの設定からCloud Functions開発者のロールをCloud Buildのトリガーに指定するのを忘れずに。
Google Cloud Buildを使用してCI/CDパイプラインをサクッと構築する
最後に、ソースコードをpushして変更箇所がGCPのCloud Functionsから確認できれば成功。あとはこれの繰り返しで、開発を進めればOK
まとめ
いかがでしたでしょうか。本記事では【サーバーレス 第一世代Cloud FunctionsをCloud Schedulerで定期実行】シリーズのPart2として、Cloud Schedulerでスケジュール設定・CI/CDパイプライン構築を行っています。ぜひ参考にしてみてください。