部署 Cloud Functions 函数
本指南介绍了如何从源代码部署 Cloud Functions 函数。
部署过程会获取源代码和配置设置并构建可运行的映像,Cloud Functions 自动管理这一过程,以便处理对函数的请求。
部署基础知识
部署 Cloud Functions 的用户必须具有 Cloud Functions Developer IAM 角色或具有提供相同权限的其他角色。另请参阅其他部署配置。
选择一个标签页以查看有关如何使用 gcloud CLI 或 Google Cloud 控制台部署函数的说明。
gcloud
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
使用
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
文档。如需了解一些示例部署命令,请参阅命令行示例。
控制台
转到 Google Cloud 控制台中的 Cloud Functions 概览页面:
确保选择您要将 Cloud Functions 函数部署到的 Google Cloud 项目。
点击创建函数。
在环境字段中,选择第 1 代或第 2 代。如需了解 Cloud Functions (第 1 代) 和 Cloud Functions (第 2 代) 的比较,请参阅 Cloud Functions 版本比较。
在函数名称字段中,输入函数的名称。函数名称必须以字母开头,后面最多可跟 62 个字母、数字、连字符或下划线,但必须以字母或数字结尾。
在区域字段中,选择要在其中部署函数的区域。
在触发器部分中,根据所选环境执行以下步骤:
- 第 1 代
- 在 HTTPS 身份验证部分中,根据是否允许函数进行未经身份验证的调用,选择相应的选项。系统默认要求进行身份验证。如需了解详情,请参阅进行身份验证以便调用。
- 在触发器类型字段中,选择触发器类型。如需了解详情,请参阅 Cloud Functions(第 1 代)支持的触发器。
- 填写所选触发器类型的其他字段。
- 点击保存。
- 第 2 代
- 在触发器类型字段中,选择要使用的触发器:
- 对于 HTTPS 触发器,请根据是否允许函数进行未经身份验证的调用,选择相应的选项。每个第 2 代函数都有一个 HTTP(S) 触发器的端点。系统默认要求进行身份验证。如需了解详情,请参阅进行身份验证以便调用。
- 对于事件驱动的函数,请选择以下选项之一:Cloud Pub/Sub、Cloud Storage、Cloud Firestore 或其他触发器。如需了解详情,请参阅 Eventarc 触发器。
- 填写必填字段后,点击保存触发器。
- 在触发器类型字段中,选择要使用的触发器:
- 第 1 代
点击下一步以继续执行代码步骤。
在运行时字段中,选择函数要使用的语言运行时。Cloud Functions 支持多种运行时;如需了解详情,请参阅运行时。
在入口点字段中,输入源代码中函数的入口点。这是在您的函数运行时执行的代码。此标志的值必须是源代码中存在的函数名称或完全限定类名称;如需了解详情,请参阅函数入口点。
在源代码字段中,选择有关如何提供函数源代码的适当选项。如需了解详情,请参阅以下部分:
点击部署。
部署成功完成后,Google Cloud 控制台的 Cloud Functions 概览页面中会显示带有绿色对勾标记的函数。
函数的初始部署可能需要几分钟时间,系统会同时对底层基础架构进行预配。重新部署现有函数时速度会更快,并且传入的流量会自动迁移到最新版本。
从本地机器部署
本部分介绍如何从位于本地机器的源代码部署函数。
gcloud
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
使用
gcloud functions deploy
命令,按照上面的部署说明执行操作。对于
--source
标志,请指定函数源代码根目录的本地文件系统路径;有关详情,请参阅源目录结构。如果省略此标志,系统会使用当前工作目录。您还可以视需要使用
--stage-bucket
标志指定要在部署期间将源代码上传到的 Cloud Storage 存储桶。在上传源代码期间,Cloud Functions 会通过
.gcloudignore
文件排除不必要的文件。
控制台
从 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
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
使用
gcloud functions deploy
命令,按照上面的部署说明执行操作。对于
--source
标志,请指定以gs://
开头的 Cloud Storage 路径。路径上的对象必须是包含函数源代码的 ZIP 文件。函数源文件必须位于 ZIP 文件的根目录下;有关详情,请参阅源目录结构。
控制台
从源代码库部署
本部分介绍了如何从位于 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
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
使用
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
附加到该路径。
控制台
通过 Google Cloud 控制台内嵌编辑器部署
本部分介绍了如何直接从 Google Cloud 控制台使用提供的内嵌编辑器编写和部署函数。
- 使用 Google Cloud 控制台,按照上面的部署说明执行操作,直到进入源代码字段。
- 在源代码字段中,选择內嵌编辑器。
- 根据需要使用提供的编辑器创建或修改源文件,请参阅源目录结构。
- 左侧窗格列出了源文件,并且可让您创建、重命名和删除文件。
- 右侧窗格是一个文本编辑器,您可使用该编辑器修改文件内容。
- 点击部署。
命令行示例
本部分介绍了一些示例部署场景的部署命令。
如需详细了解 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"
后续步骤
- 详细了解 Cloud Functions 触发器。
- 了解 Cloud Functions 函数构建流程。
- 了解更多 Cloud Functions 配置选项。
- 了解如何确保 Cloud Functions 的安全。
- 如需查看 Cloud Functions 的特定用例示例,请参阅教程。