Pub/Sub エミュレータを使用してローカルでテストする
Functions Framework と一緒に Pub/Sub エミュレータを使用すると、関数をデプロイする前にローカルでテストできます。このページの例は、Cloud Run functions に基づいています。
Pub/Sub エミュレータで Functions Framework を使用する
関数は、Pub/Sub エミュレータから push メッセージを使用してローカルでトリガーできます。
ここで説明するように、この機能をテストします。ここでは、3 つのターミナル インスタンスを使用する必要があります。
第一のターミナルでは、ローカル プロジェクトのポート 8043 で Pub/Sub エミュレータを起動します。
gcloud beta emulators pubsub start \ --project=abc \ --host-port='localhost:8043'
第二のターミナルでは、Pub/Sub トピックとサブスクリプションを作成します。
curl -s -X PUT 'http://localhost:8043/v1/projects/abc/topics/mytopic'
push サブスクリプションのエンドポイントとして
http://localhost:8080
を使用します。curl -s -X PUT 'http://localhost:8043/v1/projects/abc/subscriptions/mysub' \ -H 'Content-Type: application/json' \ --data '{"topic":"projects/abc/topics/mytopic","pushConfig":{"pushEndpoint":"http://localhost:8080/projects/abc/topics/mytopic"}}'
第三のターミナルでは、ローカルマシンにサンプル リポジトリのクローンを作成します。
Node.js
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
または、zip 形式のサンプルをダウンロードしてファイルを抽出してもかまいません。
Python
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
または、zip 形式のサンプルをダウンロードしてファイルを抽出してもかまいません。
Go
git clone https://github.com/GoogleCloudPlatform/golang-samples.git
または、zip 形式のサンプルをダウンロードしてファイルを抽出してもかまいません。
Cloud Run functions のサンプルコードが含まれているディレクトリに移動します。
Node.js
cd nodejs-docs-samples/functions/v2/helloPubSub/
Python
cd python-docs-samples/functions/v2/pubsub/
Go
cd golang-samples/functions/functionsv2/hellopubsub/
サンプルコードを見てみましょう。
Node.js
Python
Go
buildpack を作成します(数分かかる場合があります)。
Node.js
pack build \ --builder gcr.io/buildpacks/builder:v1 \ --env GOOGLE_FUNCTION_SIGNATURE_TYPE=event \ --env GOOGLE_FUNCTION_TARGET=helloPubSub \ my-function
Python
pack build \ --builder gcr.io/buildpacks/builder:v1 \ --env GOOGLE_FUNCTION_SIGNATURE_TYPE=event \ --env GOOGLE_FUNCTION_TARGET=subscribe \ my-function
Go
pack build \ --builder gcr.io/buildpacks/builder:v1 \ --env GOOGLE_FUNCTION_SIGNATURE_TYPE=event \ --env GOOGLE_FUNCTION_TARGET=HelloPubSub \ my-function
ポート 8080 で Pub/Sub 関数を起動します。エミュレータはここに push メッセージを送信します。
docker run --rm -p 8080:8080 my-function
第二のターミナルでは、メッセージを公開することで関数を呼び出します。メッセージ データは base64 でエンコードする必要があります。この例では、base64 でエンコードされた文字列
{"foo":"bar"}
を使用します。curl -s -X POST 'http://localhost:8043/v1/projects/abc/topics/mytopic:publish' \ -H 'Content-Type: application/json' \ --data '{"messages":[{"data":"eyJmb28iOiJiYXIifQ=="}]}'
第三のターミナルには、関数の出力が表示されます。
中止するには
Ctrl+C
を押します。