部署 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 是已部署函数的名称。函数名称必须以字母开头,后面最多可跟 62 个字母、数字、连字符或下划线,但必须以字母或数字结尾。

    • --gen2 标志用于指定要部署到 Cloud Functions (第 2 代)。在第一次部署第 2 代函数时需要此标志。如需了解 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. 函数名称字段中,输入函数的名称。函数名称必须以字母开头,后面最多可跟 62 个字母、数字、连字符或下划线,但必须以字母或数字结尾。

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

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

    • 第 1 代
      1. HTTPS 身份验证部分中,根据是否允许函数进行未经身份验证的调用,选择相应的选项。系统默认要求进行身份验证。如需了解详情,请参阅进行身份验证以便调用
      2. 触发器类型字段中,选择触发器类型。如需了解详情,请参阅 Cloud Functions(第 1 代)支持的触发器
      3. 填写所选触发器类型的其他字段。
      4. 点击保存
    • 第 2 代
      1. 触发器类型字段中,选择要使用的触发器:
  7. (可选)展开页面末尾的运行时、构建... 部分,以查看更多配置安全选项。

  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. 目标存储桶字段中,点击浏览,以选择要在部署期间将源代码上传到的 Cloud Storage 存储桶。
  4. ZIP 文件字段中,点击浏览,以选择要从本地文件系统上传的 ZIP 文件。函数源文件必须位于 ZIP 文件的根目录下 - 请参阅源目录结构
  5. 点击部署

从 Cloud Storage 部署

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

为了让 Cloud Functions 从 Cloud Storage 存储桶中读取数据,请确保部署代理具有 storage.objects.get 权限:

  • 在 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"

后续步骤