m's blog

備忘録とかメモとか

【GCP】Cloud Pub/SubとCloud Functionsを連携してみる

Cloud Functions + Cloud Pub / Sub

Cloud Functions + Cloud Pub / Sub のチュートリアルを試してみたので、簡単にまとめてみます。

目次

以下の Cloud Pub / Sub のチュートリアルを参考に解説を進めて行きます。

Cloud SDK のインストールなど、開発環境の準備は以下のリンクを参考にしてください。

Cloud Pub/Sub のチュートリアル | 始める前に

サンプルのダウンロード

以下のコマンドで、GCP のサンプルコードをクローンしてください。

git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git

ここからは、nodejs-docs-samples ディレクトリをルートディレクトリとして、解説を進めていきます。

以下のコマンドで nodejs-docs-samples ディレクトリへ移動していください。

cd nodejs-docs-samples

使用するのは、functions/helloworld/index.jshelloPubSub 関数です。

コードは以下のような感じ。

exports.helloPubSub = (data, context) => {
  const pubSubMessage = data;
  const name = pubSubMessage.data
    ? Buffer.from(pubSubMessage.data, 'base64').toString()
    : 'World';

  console.log(`Hello, ${name}!`);
};

※ 2020/05/06 時点のリポジトリだと functions/helloworld/index.js の 73 行目あたり。見当たらない場合は helloPubSub で検索してください。

Pub / Sub メッセージを取得して、コンソールに Hello, ○○! の形で出力するというシンプルなものです。

関数のデプロイ

以下のコマンドで、helloPubSub 関数をデプロイします。

cd functions/helloworld
TOPIC_NAME=test-topic-for-cloud-functions
gcloud functions deploy helloPubSub --runtime nodejs8 --trigger-topic $TOPIC_NAME

ここで、TOPIC_NAME は Pub / Sub トピックの名前です。

トピックの名前は何でも OK ですが、ここでは消し忘れたときにわかりやすいような名前を設定しています。

指定した Pub / Sub トピックが存在しない場合は、関数のデプロイと一緒に作成されます。

メッセージの送信

関数の準備ができたので、早速、メッセージを Pub / Sub トピックに公開してみます。

gcloud pubsub topics publish $TOPIC_NAME --message taro

以下のコマンドを実行して、メッセージによって関数が動作したことを確認してください。

gcloud functions logs read --limit 50

※ ログの表示には、少し時間がかかることがあります。想定した結果が表示されない場合は、少し時間をあけて、もう一度、ログを確認してみてください。

後始末

動作を確認で来たら、以下のコマンドで、今回作成した関数と Pub / Sub トピックを削除してください。

gcloud functions delete helloPubSub
gcloud pubsub topics delete $TOPIC_NAME

まとめ

以上、「 Cloud Functions と Cloud Pub / Sub の連携」について解説してみました。

Cloud Pub / Sub は、GCP 環境で開発する場合は、他サービスとの連携で楽ができそうです。

フルマネージドで、料金もそれほどしないので、今後、活用を検討したいと思います。

最後に、今回の内容について、簡単にまとめてみたいと思います。

  • --trigger-topic を指定して、関数をデプロイするだけ
  • トピックは関数デプロイと一緒に作成される
  • フルマネージドで、価格もお手頃