【GCP】Cloud Pub/SubとCloud Functionsを連携してみる
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.js
の helloPubSub
関数です。
コードは以下のような感じ。
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
を指定して、関数をデプロイするだけ- トピックは関数デプロイと一緒に作成される
- フルマネージドで、価格もお手頃