ローカル関数を呼び出す

設定

このドキュメントでは、Functions Framework または Buildpack を使用して、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 を使用します。

  1. Cloud Shell メニューバーの [+] アイコンをクリックして、関数が実行されているシステムで新しいターミナル ウィンドウを開きます。
  2. そのウィンドウから 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"
        }
      }'