※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 Functionsとは
概要
サーバーレス関数。第一世代と第二世代の違いは、
トリガーはhttpやpub/subなど。今回はpub/subのイベントトリガーを使用する
トリガー | 内容 |
---|---|
HTTP (S) トリガー | Cloud Functions の URL エンドポイントを使用し HTTP リクエストをトリガーに関数を実行する |
イベントトリガー | Pub / Sub トピックのメッセージをトリガーに関数を実行する |
第1世代と第2世代
Cloud Functions gen2はCloud Runをベースとしている。基本的な変更点としては、性能の向上。
- リクエストのタイムアウト時間(最大実行時間)がHTTPトリガーの場合、9分→最大60分に延長
- CPU/メモリが第1世代の2倍に増加
- 同時実行数が最大1000件まで増加
- トラフィック分割のサポート(各関数の複数のリビジョンがサポートされ、各リビジョンへのルーティング指定が可能になった)
- EventarcのサポートやCloudEventsのサポートランタイム拡大により対応イベントソースが充実
- 料金
- 第1世代
- 関数を実行した回数,関数の呼び出しから完了までにかかった時間,関数から外に転送されるデータのサイズにより決定
- 第2世代
- Cloud Runの料金が適用される
- 第1世代
どちらを使う?
Google Cloudの以下の記事によると、
Cloud Functions と Cloud Run: それぞれの使いどころ
Pub/Subのトピック作成
GCPコンソールからPub/Subにアクセスし、トピックを作成をクリック
任意のトピックIDをつけ、作成をクリック
Cloud Functions作成
GCPコンソールからCloud Functionsにアクセスし、ファンクションを作成をクリック
環境は第1世代、関数名は任意、リージョンはasia-northeast1、トリガーはCloud Pub/Sub、トピックは先ほど作成したものを指定し、次へをクリック。今回は指定していないが、関数内で使用する環境変数やシークレットがあれば、それらも関数作成時に指定することができる
デプロイする関数のソースコードを編集する画面が表示される。ランタイムはpython3.11、エントリポイントと関数の実装はデフォルトのままでデプロイをクリック。
処理の内容としては、この関数の呼び出し時に渡されたeventの(処理内容はトピックから送られてくるデータ)メッセージをprint文で出力するというもの
動作確認として、ローカルからgcloudコマンドを使用し、トピックをpublishする
gcloud pubsub topics publish sample-topic --message "Hello World"
GCPで作成した関数のログを見て、Hello Worldが出力されていれば成功
Part1はここまで、次回はCloud Schedulerでスケジュール設定・CI/CDパイプライン構築を行う
まとめ
いかがでしたでしょうか。本記事では【サーバーレス 第一世代Cloud FunctionsをCloud Schedulerで定期実行】シリーズのPart1として、Cloud Functionsの導入とPub/SubトピックおよびCloud Functionsの作成と検証を行っています。ぜひ参考にしてみてください。