Masayan tech blog.

  1. ブログ記事一覧>
  2. 【サーバーレス 第一世代Cloud FunctionsをCloud Schedulerで定期実行】Part2:Cloud Schedulerでスケジュール設定・CI/CDパイプライン構築

【サーバーレス 第一世代Cloud FunctionsをCloud Schedulerで定期実行】Part2:Cloud Schedulerでスケジュール設定・CI/CDパイプライン構築

公開日

※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仮想環境の構築は以下を参照されたし

Pythonのvenv仮想環境で環境変数を設定する方法

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パイプライン構築を行っています。ぜひ参考にしてみてください。