调用本地函数

设置

本文档假设您已在 localhost 上使用 Functions 框架Buildpack 设置本地运行的函数。此外,还假设您已在本地机器上安装 curl 工具。

向本地函数发送请求

如需触发本地运行的函数,您可以向其发送通过本地服务进程路由的 HTTP 请求。

通过检查在您开始运行函数时显示的网址来确定函数在本地运行的位置。默认情况下,函数将托管在 localhost:8080 上。

HTTP 函数

从开发环境中测试 HTTP 函数时,它通常会监听 localhost:8080 上的请求。此接口只能从运行函数的机器或虚拟机访问,从任何其他系统发送的请求都无法访问此接口。因此,您必须从运行函数的同一系统发出 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/SubCloud 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/SubCloud 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"
        }
      }'