使用集合让一切井井有条 根据您的偏好保存内容并对其进行分类。

部署 Cloud Functions 函数

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

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

部署基础知识

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

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

gcloud

  1. 在 Google Cloud 控制台中,激活 Cloud Shell。

    激活 Cloud Shell

    Cloud Shell 会话随即会在 Google Cloud 控制台的底部启动,并显示命令行提示符。Cloud Shell 是一个已安装 Google Cloud CLI 且已为当前项目设置值的 Shell 环境。该会话可能需要几秒钟时间来完成初始化。

  2. 使用 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 是已部署函数的名称。在第 1 代中,函数名称必须以字母开头,后面最多可跟 62 个字母、数字、连字符或下划线,但必须以字母或数字结尾。第 2 代的规则是相同的,但第一个字母必须小写,并且不能使用下划线。

    • --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. 转到 Google Cloud 控制台中的 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. 点击部署

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

Cloud 控制台中已部署的函数

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

从本地机器部署

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

gcloud

  1. 在 Google Cloud 控制台中,激活 Cloud Shell。

    激活 Cloud Shell

    Cloud Shell 会话随即会在 Google Cloud 控制台的底部启动,并显示命令行提示符。Cloud Shell 是一个已安装 Google Cloud CLI 且已为当前项目设置值的 Shell 环境。该会话可能需要几秒钟时间来完成初始化。

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

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

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

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

控制台

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

从 Cloud Storage 部署

本部分介绍如何通过保存在 Cloud Storage 存储桶中的源代码部署函数。源代码必须打包为 ZIP 文件。

要让 Cloud Functions 从 Cloud Storage 存储桶中读取数据,需要具备适当的权限:

  • 在 Cloud Functions(第 1 代)中,执行部署的帐号需要具备从存储桶读取数据的权限。
  • 在 Cloud Functions(第 2 代)中,Cloud Functions 服务代理需要具备从存储桶读取数据的权限。如果源存储桶与您的函数位于同一项目中,则自动具备此权限。如果存储桶位于其他项目中,您必须手动授予此权限。

如需了解如何控制对存储桶的访问权限,请参阅 Cloud Storage 文档中的使用 IAM 权限部分。

之后,您便可以从 Cloud Storage 部署函数:

gcloud

  1. 在 Google Cloud 控制台中,激活 Cloud Shell。

    激活 Cloud Shell

    Cloud Shell 会话随即会在 Google Cloud 控制台的底部启动,并显示命令行提示符。Cloud Shell 是一个已安装 Google Cloud CLI 且已为当前项目设置值的 Shell 环境。该会话可能需要几秒钟时间来完成初始化。

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

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

控制台

  1. 使用 Google Cloud 控制台,按照上面的部署说明执行操作,直到进入源代码字段。
  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

  1. 在 Google Cloud 控制台中,激活 Cloud Shell。

    激活 Cloud Shell

    Cloud Shell 会话随即会在 Google Cloud 控制台的底部启动,并显示命令行提示符。Cloud Shell 是一个已安装 Google Cloud CLI 且已为当前项目设置值的 Shell 环境。该会话可能需要几秒钟时间来完成初始化。

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

通过 Google Cloud 控制台内嵌编辑器部署

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

  1. 使用 Google Cloud 控制台,按照上面的部署说明执行操作,直到进入源代码字段。
  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"

后续步骤