ローカル関数を呼び出す
設定
このドキュメントでは、Functions Framework または Buildpacks を使用して、localhost
にローカルで実行する関数を設定していることを前提としています。また、ローカルマシンに curl
ツールがインストールされている必要があります。
ローカル関数にリクエストを送信する
ローカルで実行される関数をトリガーするには、ローカル処理プロセス経由でルーティングされる HTTP リクエストを送信します。
関数の実行を開始したときに表示される URL を確認して、関数がローカルで実行されている場所を特定します。デフォルトでは、関数は localhost:8080
にホストされます。
HTTP 関数
開発環境から HTTP 関数をテストすると、通常は localhost:8080
でリクエストをリッスンします。このインターフェースには、関数が実行されているマシンまたは VM からのみアクセスできます。他のシステムから送信したリクエストからはアクセスできません。このため、関数が実行されているシステムから HTTP リクエストを発行する必要があります。次の例では、関数が 8080 以外のポートをリッスンしている場合は、この例の 8080 を関数のポート番号に置き換えます。
Cloud Shell を使用した HTTP 関数のテスト
Cloud Shell を使用して関数をビルドしてテストする場合は、Cloud Shell ターミナル ウィンドウで関数をローカルに起動し、次のようにブラウザまたは curl
インスタンスから HTTP トリガー リクエストを発行します。
ブラウザ
Cloud Shell ツールバーの アイコンをクリックし、[ポート 8080] または [ポートを変更] を選択して別のポートを選択します。これにより、正しいシステムでブラウザ ウィンドウが開き、指定されたポートに対して GET リクエストが発行されます。
Curl
HTTP リクエストの形式を制御するか、形式設定されていないレスポンスを表示するには、curl
を使用します。
- Cloud Shell メニューバーの [+] アイコンをクリックして、関数が実行されているシステムで新しいターミナル ウィンドウを開きます。
そのウィンドウから
curl
コマンドを実行して関数をトリガーします。次に例を示します。curl localhost:8080
デスクトップ サーバーでの HTTP 関数のテスト
ローカル デスクトップ システムで関数をビルドして実行する場合は、まず関数をローカルで起動してから、次のようにブラウザまたは curl
インスタンスから HTTP トリガー リクエストを発行します。
ブラウザ
新しいブラウザ ウィンドウまたはタブを開き、ブラウザのアドレスバーに「http://localhost:8080
」と入力します。これにより、デスクトップ サーバー上の localhost:8080
へのブラウザ ウィンドウが開き、関数がトリガーされます。
Curl
ローカル デスクトップで新しいターミナル ウィンドウを開き、そのウィンドウで curl
コマンドを実行して関数をトリガーします。次に例を示します。
curl localhost:8080
これにより、指定された curl
コマンドが実行されて関数がトリガーされ、フォーマットされていないレスポンスが表示されます。
CloudEvent 関数
curl
を使用して、サンプル イベントを CloudEvent 関数に送信できます。次の curl
リクエストは、サンプルの Cloud Pub/Sub イベントと Cloud Storage イベントを localhost:8080
で実行中の CloudEvent 関数に送信します。
Pub/Sub
curl localhost:8080 \ -X POST \ -H "Content-Type: application/json" \ -H "ce-id: 123451234512345" \ -H "ce-specversion: 1.0" \ -H "ce-time: 2020-01-02T12:34:56.789Z" \ -H "ce-type: google.cloud.pubsub.topic.v1.messagePublished" \ -H "ce-source: //pubsub.googleapis.com/projects/MY-PROJECT/topics/MY-TOPIC" \ -d '{ "message": { "data": "d29ybGQ=", "attributes": { "attr1":"attr1-value" } }, "subscription": "projects/MY-PROJECT/subscriptions/MY-SUB" }'
ストレージ
curl localhost:8080 \ -X POST \ -H "Content-Type: application/json" \ -H "ce-id: 123451234512345" \ -H "ce-specversion: 1.0" \ -H "ce-time: 2020-01-02T12:34:56.789Z" \ -H "ce-type: google.cloud.storage.object.v1.finalized" \ -H "ce-source: //storage.googleapis.com/projects/_/buckets/MY-BUCKET-NAME" \ -H "ce-subject: objects/MY_FILE.txt" \ -d '{ "bucket": "MY_BUCKET", "contentType": "text/plain", "kind": "storage#object", "md5Hash": "...", "metageneration": "1", "name": "MY_FILE.txt", "size": "352", "storageClass": "MULTI_REGIONAL", "timeCreated": "2020-04-23T07:38:57.230Z", "timeStorageClassUpdated": "2020-04-23T07:38:57.230Z", "updated": "2020-04-23T07:38:57.230Z" }'
バックグラウンド関数
curl
を使用して、サンプル イベントをバックグラウンド関数に送信できます。次の curl
リクエストは、サンプルの Cloud Pub/Sub イベントと Cloud Storage イベントを localhost:8080
で実行中のバックグラウンド関数に送信します。
Pub/Sub
# 'world' base64-encoded is 'd29ybGQ=' curl localhost:8080 \ -X POST \ -H "Content-Type: application/json" \ -d '{ "context": { "eventId":"1144231683168617", "timestamp":"2020-05-06T07:33:34.556Z", "eventType":"google.pubsub.topic.publish", "resource":{ "service":"pubsub.googleapis.com", "name":"projects/sample-project/topics/gcf-test", "type":"type.googleapis.com/google.pubsub.v1.PubsubMessage" } }, "data": { "@type": "type.googleapis.com/google.pubsub.v1.PubsubMessage", "attributes": { "attr1":"attr1-value" }, "data": "d29ybGQ=" } }'
ストレージ
curl localhost:8080 \ -X POST \ -H "Content-Type: application/json" \ -d '{ "context": { "eventId": "1147091835525187", "timestamp": "2020-04-23T07:38:57.772Z", "eventType": "google.storage.object.finalize", "resource": { "service": "storage.googleapis.com", "name": "projects/_/buckets/MY_BUCKET/MY_FILE.txt", "type": "storage#object" } }, "data": { "bucket": "MY_BUCKET", "contentType": "text/plain", "kind": "storage#object", "md5Hash": "...", "metageneration": "1", "name": "MY_FILE.txt", "size": "352", "storageClass": "MULTI_REGIONAL", "timeCreated": "2020-04-23T07:38:57.230Z", "timeStorageClassUpdated": "2020-04-23T07:38:57.230Z", "updated": "2020-04-23T07:38:57.230Z" } }'