使用 Functions 模拟器运行函数

借助 Google Cloud CLI Functions 模拟器,您可以通过 gcloud alpha functions local 命令管理 Cloud Functions 函数的本地实例。这样,您可以先在本地系统上部署和测试函数,然后再将其部署到 Google Cloud 环境。

此功能适用于第 1 代和第 2 代函数。

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:函数的入口点。

您可以使用以下可选标志进一步配置部署命令:

Flag 说明
--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 替换为用于在本地函数部署的名称。

此命令会取消部署函数,但不会删除函数代码。

后续步骤