部署 Cloud Functions 函数

本指南介绍了如何从源代码部署 Cloud Functions 函数。

部署过程会获取源代码和配置设置并构建可运行的映像,Cloud Functions 自动管理这一过程,以便处理对函数的请求。

部署基础知识

部署 Cloud Functions 函数的用户必须具有 Cloud Functions Developer IAM 角色或可提供相同权限的角色。另请参阅其他部署配置

以下是使用 gcloud CLI 或 Google Cloud 控制台部署函数的说明。

gcloud

使用 gcloud functions deploy 命令部署函数:

gcloud functions deploy YOUR_FUNCTION_NAME \
[--gen2] \
--region=YOUR_REGION \
--runtime=YOUR_RUNTIME \
--source=YOUR_SOURCE_LOCATION \
--entry-point=YOUR_CODE_ENTRYPOINT \
TRIGGER_FLAGS

第一个参数 YOUR_FUNCTION_NAME 是已部署函数的名称,可以由小写字母、数字、连字符和下划线组成。

  • --gen2 标志用于指定要部署到 Cloud Functions (第 2 代)。如果省略此标志,则会部署到 Cloud Functions (第 1 代)。如需了解 Cloud Functions (第 1 代) 和 Cloud Functions (第 2 代) 的比较,请参阅 Cloud Functions 版本比较

  • --region 标志用于指定要在其中部署函数的区域。如需查看 Cloud Functions 支持的区域列表,请参阅位置

  • --runtime 标志用于指定函数使用的语言运行时。Cloud Functions 支持多个运行时 - 如需了解详情,请参阅运行时

  • --source 标志用于指定函数源代码的位置。如需了解详情,请参阅以下部分:

  • --entry-point 标志用于指定源代码中函数的入口点。这是在函数运行时执行的代码。此标志的值必须是源代码中存在的函数名称或完全限定类名称。如需了解详情,请参阅函数入口点

  • 如需为函数指定触发器,需要使用额外的标志(上文表示为 TRIGGER_FLAGS),具体取决于您要使用的触发器:

触发器标志 触发器说明
--trigger-http 使用 HTTP(S) 请求触发函数。如需了解详情,请参阅 HTTP 触发器
--trigger-topic=YOUR_PUBSUB_TOPIC 在消息发布到指定的 Pub/Sub 主题时触发函数。如需了解详情,请参阅 Pub/Sub 触发器
--trigger-bucket=YOUR_STORAGE_BUCKET 在指定的 Cloud Storage 存储桶中创建或覆盖对象时触发函数。如需了解详情,请参阅 Cloud Storage 触发器
--trigger-event-filters=EVENTARC_EVENT_FILTERS (仅限第 2 代)当事件与指定过滤条件匹配时,使用 Eventarc 触发函数。需要指定 --gen2 标志。如需了解详情和其他选项,请参阅 Eventarc 触发器
--trigger-event=EVENT_TYPE
[--trigger-resource=RESOURCE]
(仅限第 1 代)在发生指定事件时触发函数。对于某些事件类型,需要指定资源。如需了解详情,请参阅 Cloud Functions (第 1 代) 支持的触发器

您可以视需要在部署函数时指定其他配置网络安全选项。

如需查看有关部署命令及其标志的完整参考信息,请参阅 gcloud functions deploy 文档。

如需了解一些示例部署命令,请参阅命令行示例

控制台

  1. 进入控制台中的 Cloud Functions 概览页面:

    转到 Cloud Functions

    确保选择您要将 Cloud Functions 函数部署到的 Google Cloud 项目。

  2. 点击创建函数

  3. 环境字段中,选择第 1 代第 2 代。如需了解 Cloud Functions (第 1 代) 和 Cloud Functions (第 2 代) 的比较,请参阅 Cloud Functions 版本比较

  4. 函数名称字段中,输入函数的名称。此名称可以由小写字母、数字、连字符和下划线组成。

  5. 区域字段中,选择要在其中部署函数的区域。

  6. 触发器部分中,根据所选环境执行以下步骤:

    • 第 1 代
      1. 触发器类型字段中,选择触发器类型。如需了解详情,请参阅 Cloud Functions (第 1 代) 支持的触发器
      2. 填写所选触发器类型的其他字段。
      3. 点击保存
    • 第 2 代
      1. HTTPS 身份验证部分中,根据是否要允许对函数进行未经身份验证的调用,选择适当的选项。每个第 2 代函数都有一个 HTTP(S) 触发器的端点。默认情况下,需要进行身份验证。如需了解详情,请参阅进行身份验证以便调用
      2. 如需部署事件驱动型函数,请点击添加 Eventarc 触发器以添加触发器。如需了解详情,请参阅 Eventarc 触发器。填写 Eventarc 触发器窗格中的字段,然后点击保存触发器
  7. (可选)展开页面末尾的运行时、构建… (Runtime, build…) 部分,以访问其他配置安全选项。

  8. 点击下一步以继续执行代码步骤。

  9. 运行时字段中,选择函数使用的语言运行时。Cloud Functions 支持多个运行时 - 如需了解详情,请参阅运行时

  10. 入口点字段中,输入源代码中函数的入口点。这是在函数运行时执行的代码。此标志的值必须是源代码中存在的函数名称或完全限定类名称;如需了解详情,请参阅函数入口点

  11. 源代码字段中,选择有关如何提供函数源代码的适当选项。如需了解详情,请参阅以下部分:

  12. 点击部署

部署成功完成后,控制台的 Cloud Functions 概览页面中会显示带有绿色对勾标记的函数。

Cloud 控制台中已部署的函数

初始部署函数可能需要几分钟时间,而底层基础架构已预配。重新部署现有函数的速度会更快,并且传入的流量会自动迁移到最新版本。

从本地机器部署

本部分介绍如何从位于本地机器的源代码部署函数。

gcloud

使用 gcloud functions deploy 命令,按照上面的部署说明执行操作。

对于 --source 标志,请指定函数源代码根目录的本地文件系统路径 - 请参阅源目录结构。如果省略此标志,则系统会使用当前工作目录。

您还可以视需要使用 --stage-bucket 标志指定要在部署期间将源代码上传到的 Cloud Storage 存储桶。

在上传源代码期间,Cloud Functions 会通过 .gcloudignore 文件排除不必要的文件。

控制台

  1. 使用控制台,按照上面的部署说明执行操作,直到进入源代码字段。
  2. 源代码字段中,选择 ZIP 文件上传
  3. ZIP 文件字段中,点击浏览,以选择要从本地文件系统上传的 ZIP 文件。函数源文件必须位于 ZIP 文件的根目录下 - 请参阅源目录结构
  4. 暂存存储桶字段中,点击浏览,以选择要在部署期间将源代码上传到的 Cloud Storage 存储桶。
  5. 点击部署

从 Cloud Storage 部署

本部分介绍如何从位于 Cloud Storage 存储桶的源代码部署函数。源代码必须打包为 ZIP 文件。

gcloud

使用 gcloud functions deploy 命令,按照上面的部署说明执行操作。

对于 --source 标志,请指定以 gs:// 开头的 Cloud Storage 路径。该路径下的对象必须是包含函数源代码的 ZIP 文件。函数源文件必须位于 ZIP 文件的根目录下 - 请参阅源目录结构

控制台

  1. 使用控制台,按照上面的部署说明执行操作,直到进入源代码字段。
  2. 源代码字段中,选择 Cloud Storage 中的 ZIP 文件
  3. Cloud Storage 位置字段中,点击浏览,以从 Cloud Storage 中选择 ZIP 文件。函数源文件必须位于 ZIP 文件的根目录下 - 请参阅源目录结构
  4. 点击部署

从源代码库部署

本部分介绍了如何从位于 Cloud Source Repositories 的源代码部署函数。通过从 Cloud Source Repositories 进行部署,您还可以部署托管在 GitHub 或 Bitbucket 代码库中的代码。

您必须先设置代码库,并视需要将其连接到 GitHub 或 Bitbucket 代码库,然后才能从 Cloud Source Repositories 部署代码。

为了使 Cloud Functions 可以从源代码库读取数据,Cloud Functions 服务代理需要具有该代码库的 Source Repository Reader (roles/source.reader) IAM 角色。如果源代码库与函数属于同一项目,则此权限会自动包含在内。如果源代码库属于其他项目,您必须手动授予权限

然后,您可以从代码库部署函数:

gcloud

使用 gcloud functions deploy 命令,按照上面的部署说明执行操作。

对于 --source 标志,请指定引用函数源代码的位置的源代码库 - 请参阅源目录结构。Cloud Source Repositories 的最基本引用采用以下格式:

https://source.developers.google.com/projects/PROJECT_ID/repos/REPOSITORY_NAME

在上述路径中,PROJECT_ID 是您的 Google Cloud 项目 ID,REPOSITORY_NAME 是您的源代码库的名称。使用此路径时,系统会使用标有 master 的修订版本上的代码库根目录中的源代码。

如需从 master 以外的修订版本进行部署,请将以下其中一项附加到上述路径:

  • /revisions/REVISION_NAME
  • /moveable-aliases/MOVEABLE_ALIAS
  • /fixed-aliases/FIXED_ALIAS

如需从代码库根目录以外的目录部署源代码,请指定修订版本、可移动别名或固定别名(如上所示),并将 /paths/PATH_TO_YOUR_SOURCE_DIRECTORY 附加到该路径。

控制台

  1. 使用控制台,按照上面的部署说明执行操作,直到进入源代码字段。
  2. 源代码字段中,选择 Cloud Source Repositories 代码库
  3. 代码库字段中,输入源代码库的名称。
  4. 分支/标记字段中,选择分支标记,具体取决于您要从何处进行部署。
  5. 根据指示输入分支或标记名称。
  6. 源代码所在目录字段中,输入代码库中包含函数源代码的目录的路径 - 请参阅源目录结构
  7. 点击部署

从控制台内嵌编辑器部署

本部分介绍了如何使用提供的内嵌编辑器直接从控制台编写和部署函数。

  1. 使用控制台,按照上面的部署说明执行操作,直到进入源代码字段。
  2. 源代码字段中,选择內嵌编辑器
  3. 根据需要使用提供的编辑器创建或修改源文件,请参阅源目录结构
    • 左侧窗格列出了源文件,并且可让您创建、重命名和删除文件。
    • 右侧窗格是一个文本编辑器,可让您修改文件内容。
  4. 点击部署

命令行示例

本部分介绍了一些示例部署场景的部署命令。

如需详细了解 Cloud Functions 支持的不同触发器,请参阅 Cloud Functions 触发器

来自本地源代码的 HTTP 函数

假设您有一个 HTTP 函数,如下所示:

  • 该函数使用 Node.js 16
  • 源代码位于当前工作目录 (.) 中
  • 代码中的入口点名为 myHttpFunction

如需将该函数部署到区域 us-central1 中名为 my-http-function 的 Cloud Functions (第 2 代),请使用以下命令:

gcloud functions deploy my-http-function \
  --gen2 \
  --region=us-central1 \
  --runtime=nodejs16 \
  --source=. \
  --entry-point=myHttpFunction \
  --trigger-http

来自 Cloud Storage 中源代码的 Pub/Sub 函数

假设您有一个事件驱动型函数,如下所示:

  • 该函数处理 Pub/Sub 消息发布事件
  • 该函数使用 Python 3.9
  • 源代码位于 Cloud Storage 中的 gs://my-bucket/my_function_source.zip 路径下
  • 代码中的入口点名为 pubsub_handler

如需将该函数部署到区域 europe-west1 中名为 my-pubsub-function 的 Cloud Functions (第 2 代),并使该函数由 Pub/Sub 主题 my-topic 中的消息触发,请使用以下命令:

gcloud functions deploy my-pubsub-function \
  --gen2 \
  --region=europe-west1 \
  --runtime=python39 \
  --source=gs://my-bucket/my_function_source.zip \
  --entry-point=pubsub_handler \
  --trigger-topic=my-topic

来自本地源代码的 Cloud Storage 函数

假设您有一个事件驱动型函数,如下所示:

  • 该函数处理 Cloud Storage 对象删除事件
  • 该函数使用 Java 11
  • 源代码位于本地 ./functions/storage-function 路径下
  • 代码中的入口点名为 myproject.StorageFunction

如需将该函数部署到区域 asia-northeast1 中名为 my-storage-function 的 Cloud Functions (第 2 代),并使该函数由 Cloud Storage 存储桶 my-bucket 中的事件触发,请使用以下命令:

gcloud functions deploy my-storage-function \
  --gen2 \
  --region=asia-northeast1 \
  --runtime=java11 \
  --source=./functions/storage-function \
  --entry-point=myproject.StorageFunction \
  --trigger-event-filters="type=google.cloud.storage.object.v1.deleted" \
  --trigger-event-filters="bucket=my-bucket"

后续步骤