GoogleCloudPubSub
GoogleCloudFunctions

Google Cloud Functions を Google Cloud Pub/Sub からトリガーしてみる

本記事でやること

Google Cloud Pub/Sub から Google Cloud Functions をトリガーしてみます。

背景

諸事情により Google Cloud Functions を定期実行してみたいと思い調べてみると、この辺りの記事が引っかかりました。

なるほど。大きく分けると以下の2パターンがありそう。

  1. GCP 内で完結する方法
    • App Engine Cron, Cloud Pub/Sub を使う
  2. 外部サービスを使って定期実行してあげる方法
    • HTTP 関数を定期的に叩く

2番目の方法だと、一見簡単そうですが、そのままだと URL さえ知っていれば誰でも叩けることになり、認証の仕組みを入れようとすると面倒臭そうな印象。(参考 : Cloud FunctionsでIAMを利用する - Studio Andy

ということで、今回は1番目の GCP 内で完結する方法を採用してみようと思いました。

まずは App Engine Cron は使わずに Google Cloud Pub/Sub から Google Cloud Functions をトリガーしてみることにしました。

環境

  • macOS High Sierra 10.13.6
$ gcloud --version
Google Cloud SDK 217.0.0
beta 2018.07.16
bq 2.0.34
core 2018.09.17
gsutil 4.34

Google Cloud Functions を動かしてみる

私は クイックスタート: gcloud コマンドライン ツールの使用  |  Cloud Functions のドキュメント  |  Google Cloud を参考に Google Cloud Functions 単体で動かしてみました。既に Google Cloud Functions を動かしたことがある人は、飛ばして良いと思います。

region の設定

東京リージョンに設定します。

$ gcloud beta functions regions list # 利用できるリージョンの確認
$ gcloud config set functions/region asia-northeast1 # 東京リージョンに設定
$ gcloud config list
[core]
account = xxx@xxx.xxx
disable_usage_reporting = False
project = xxx
[functions]
region = asia-northeast1

Google Cloud Functions を Google Cloud Pub/Sub からトリガーしてみる

ようやく本題です。
バックグラウンド関数  |  Cloud Functions のドキュメント  |  Google Cloud を参考に進めていきます。

Cloud Pub/Sub の例 を参考に、以下のようにしてみました。

exports.helloPubSub = (event, callback) => {
  const pubsubData = event.data;
  console.log(pubsubData.message);

  callback();
};

Google Cloud Pub/Sub トリガー  |  Cloud Functions のドキュメント  |  Google Cloud を参考にデプロイする。

$ gcloud beta functions deploy helloPubSub --trigger-resource hello_world --trigger-event google.pubsub.topic.publish 

ちなみに

から、Pub/Sub と Functions が作成されていることを確認できる。

動作確認

$ gcloud beta functions call helloPubSub --data '{"message":"Hello, GCF!!"}'

https://console.cloud.google.com/logs からログに Hello, GCF!! が出力されていることを確認できました。