调用本地函数
设置
本文档假设您已在 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
:
- 点击 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" }'
Storage
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=" } }'
Storage
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" } }'