使用 Functions 模拟器运行函数
借助 Google Cloud CLI Functions 模拟器,您可以通过 gcloud alpha functions local 命令管理 Cloud Run functions 函数的本地实例。这样,您可以先在本地系统上部署和测试函数,然后再将其部署到 Google Cloud 环境。
Functions 模拟器使用 Google Cloud 的 Buildpack 将函数代码打包为可在本地运行的容器映像。然后,您可以使用 Docker 在本地运行这些映像。
安装前提条件
在继续操作之前,请确保您已安装以下各项:
在本地部署函数
如需使用 Functions 模拟器在本地部署函数,请使用 gcloud functions
命令:
Node.js
gcloud alpha functions local deploy LOCAL_DEPLOYMENT_NAME \ --entry-point=ENTRY_POINT \ --runtime=nodejs20
Python
gcloud alpha functions local deploy LOCAL_DEPLOYMENT_NAME \ --entry-point=ENTRY_POINT \ --runtime=python312
Go
gcloud alpha functions local deploy LOCAL_DEPLOYMENT_NAME \ --entry-point=ENTRY_POINT \ --runtime=go121
Java
gcloud alpha functions local deploy LOCAL_DEPLOYMENT_NAME \ --entry-point=ENTRY_POINT \ --runtime=java17
C#
gcloud alpha functions local deploy LOCAL_DEPLOYMENT_NAME \ --entry-point=ENTRY_POINT \ --runtime=dotnet6
Ruby
gcloud alpha functions local deploy LOCAL_DEPLOYMENT_NAME \ --entry-point=ENTRY_POINT \ --runtime=ruby32
PHP
gcloud alpha functions local deploy LOCAL_DEPLOYMENT_NAME \ --entry-point=ENTRY_POINT \ --runtime=php82
您需要进行如下替换:
- LOCAL_DEPLOYMENT_NAME:用于在本地部署函数的名称。
- ENTRY_POINT:函数的入口点。
您可以使用以下可选标志进一步配置部署命令:
标志 | 说明 |
---|---|
--port |
用于监听请求的端口(默认值:8080 )。 |
--builder |
要使用的 Buildpack 构建器的名称 |
--builder
值默认为函数语言的 App Engine 构建器。例如,对于 Python,默认为 gcr.io/gae-runtimes/buildpacks/google-gae-22/python/builder
。
首次使用 gcloud alpha
命令时,gcloud
命令会提示您安装 gcloud alpha 命令集。
调用本地函数
如需在不使用数据的情况下调用本地函数,请使用以下命令:
gcloud alpha functions local call LOCAL_DEPLOYMENT_NAME
将 LOCAL_DEPLOYMENT_NAME 替换为您要用于在本地部署函数的名称。
如需在对本地函数的调用中包含数据,请选择与您的函数类型匹配的标签页:
HTTP 函数
按如下所示调用本地 HTTP 函数:
gcloud alpha functions local call LOCAL_DEPLOYMENT_NAME \
--data='{"message": "MESSAGE"}'
您需要进行如下替换:
- LOCAL_DEPLOYMENT_NAME:用于在本地函数部署的名称。
- ENTRY_POINT:函数的入口点。
- MESSAGE:要作为 HTTP 请求正文传入的文本字符串。
CloudEvent 函数
如需调用本地 CloudEvent 函数,您必须提供一个 CloudEvent
JSON 对象,用于描述触发器事件:
gcloud alpha functions local call LOCAL_DEPLOYMENT_NAME \
--cloud-event="CLOUD_EVENT_JSON"
您需要进行如下替换:
- LOCAL_DEPLOYMENT_NAME:用于在本地函数部署的名称。
- ENTRY_POINT:函数的入口点。
- CLOUD_EVENT_JSON:结构化内容模式下的 JSON 编码字符串,用于描述触发事件。如需了解详情和示例,请参阅 CloudEvent - JSON 事件格式。
以下是一个命令行示例:
gcloud alpha functions local call my-function --cloud-event='{
"specversion" : "1.0",
"type" : "com.github.pull.create",
"source" : "https://github.com/cloudevents/spec/pull",
"subject" : "123",
"id" : "ce",
"time" : "2021-01-27T18:30:00Z", "data" : "{\n \"subscription\": \"projects\/test-project\/subscriptions\/my-subscription\",\n \"message\": {\n \"attributes\": {\n \"attr1\":\"attr1-value\"\n },\n \"data\": \"d29ybGQ=\",\n \"messageId\": \"message-id\",\n \"publishTime\":\"2021-02-05T04:06:14.109Z\",\n \"orderingKey\": \"ordering-key\"\n }\n}"
}'
如需详细了解如何为 CloudEvent 定义 JSON 格式,请参阅 CloudEvent 规范。
删除本地函数部署
使用以下命令删除本地函数部署:
gcloud alpha functions local delete LOCAL_DEPLOYMENT_NAME
将 LOCAL_DEPLOYMENT_NAME 替换为用于在本地函数部署的名称。
此命令会取消部署函数,但不会删除函数代码。
后续步骤
- 了解如何在 Google Cloud 上部署 Cloud Run functions 函数。