构建流程概览
将函数的源代码部署到 Cloud Run functions 时,该源代码存储在 Cloud Storage 存储桶中。Cloud Build 随后会自动将您的代码构建到容器映像中,并将该映像推送到映像注册表。当需要运行容器来执行函数时,Cloud Run functions 会访问此映像。
构建映像的过程完全自动执行,不需要您直接输入。构建过程中使用的所有资源都会在您自己的用户项目中执行。
在您的项目中执行构建过程意味着:
您可以直接访问所有构建日志。
尽管 Cloud Build 确实有自己的默认并发配额,但没有预设的构建时间配额。
您可以查看当前容器映像和以前部署的容器映像,这两个映像均存储在 Artifact Registry 中。
Cloud Storage 会直接在项目中使用,并且函数的源代码目录存储在项目内的存储桶中。 注意事项:
- 如果您使用的是默认加密,则该存储桶的名称为
gcf-sources-PROJECT_NUMBER-REGION
。 - 如果您使用 CMEK 保护数据,则该存储桶的名称为
gcf-sources-PROJECT_NUMBER-REGION-CMEK_KEY_HASH
。 - 存储桶没有保留期限。
- 如果您使用的是默认加密,则该存储桶的名称为
构建流程的特征
构建流程具有以下特征:
您必须为您的项目启用 Cloud Build API。
如需手动启用 API,请点击上面的链接,从下拉菜单中选择您的项目,然后按照提示启用界面。
因为整个构建流程都是在您的项目环境内进行的,所以该项目需要根据所包含资源的价格进行计费:
由于构建过程需要计费,因此您的项目必须附加 Cloud Billing 账号。
查看构建映像日志
将构建映像过程纳入您的用户项目的一个主要好处是可以访问构建日志。您可以使用 gcloud CLI 或 Google Cloud 控制台来访问日志,这些日志可通过 Cloud Logging 获得。
gcloud
使用
gcloud functions deploy
命令部署函数。日志的网址在终端窗口中显示为响应的一部分。例如:
Deploying function (may take a while - up to 2 minutes)...⠹ **For Cloud Build Stackdriver Logs**, visit: https://console.cloud.google.com/logs/viewer?project=
&advancedFilter=resource.type% 3Dbuild%0Aresource.labels.build_id%3D38d5b662-2315-45dd-8aa2- 380d50d4f5e8%0AlogName%3Dprojects%2F % 2Flogs%2Fcloudbuild Deploying function (may take a while - up to 2 minutes)...done.
Google Cloud 控制台
- 在 Cloud Run functions 概览窗口中,点击要调查的函数的名称。
- 点击详情标签页。
- 在一般信息窗格中,点击容器构建日志链接以打开日志浏览器窗格。
- 点击任何行即可查看该构建日志条目的详细信息。如果是与文件相关的错误条目,则这些详细信息包括文件的名称、行和列。
映像注册表
Cloud Run functions 函数使用 Artifact Registry 来存储根据函数源代码构建的映像。映像存储在名为 REGION-docker.pkg.dev/PROJECT_ID/gcf-artifacts
的代码库中。
您的 Artifact Registry 必须与您的函数在同一个项目中。您可以按如下方式创建或更新基于 Artifact Registry 的函数:
gcloud
对于客户管理的 Artifact Registry,请运行以下命令:
gcloud functions deploy --no-gen2 FUNCTION \ --docker-repository=REPOSITORY [FLAGS...]
替换以下内容:
- FUNCTION:函数的名称。
- REPOSITORY:完全限定的 Artifact Registry 代码库名称,格式如下:
projects/PROJECT_NAME/locations/LOCATION/repositories/REPOSITORY
。
对于 Google 管理的 Artifact Registry,请使用以下命令:
gcloud functions deploy --no-gen2 FUNCTION \ --docker-registry=artifact-registry [FLAGS...]
Google Cloud 控制台
前往 Google Cloud 控制台中的 Cloud Run functions 页面:
前往 Cloud Run functions 页面点击要为其使用 Artifact Registry 的函数的名称。
点击修改。
点击运行时、构建...以展开高级配置选项。
点击菜单栏中的安全和映像代码库以打开“安全”标签页。
在映像代码库下,根据您使用的 Artifact Registry 类型,选择以下选项之一:
- 客户管理的 Artifact Registry如果您设置了自己的 Docker 代码库,请使用此选项。
- Google 管理的 Artifact Registry。如果您想使用 Google 管理的 Docker 代码库而不是设置您自己的 Docker 代码库,请使用此选项。
对于客户管理的 Artifact Registry,请使用 Artifact Registry 下拉菜单来选择所需的 Artifact Registry 代码库,或者您也可以按照提示创建一个新的 Artifact Registry 代码库。
点击下一步。
点击部署。
如需详细了解价格信息,请参阅 Cloud Run functions 价格。
使用专用池保护构建
为了允许您的函数使用依赖项(例如 npm 软件包),Cloud Build 默认在构建过程中具有不受限制的互联网访问权限。如果您已设置 VPC Service Controls (VPC SC) 边界,并且希望限制构建仅可访问存储在边界内的依赖项,则可以使用 Cloud Build 专用工作器池功能。
一般来说,请按照以下步骤设置您的专用池:
- 创建专用工作器池。请参阅创建和管理专用池。
配置 VPC Service Controls 边界。请参阅使用 VPC Service Controls。
如果专用工作器池与函数不在同一个项目中,则需要向 Cloud Run functions Service Agent 服务账号 (
service-FUNCTION_PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com
) 授予cloudbuild.workerPoolUser
角色,以便 Cloud Build 服务可以访问工作器池。gcloud projects add-iam-policy-binding PRIVATE_POOL_PROJECT_ID \ --member serviceAccount:service-FUNCTION_PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com --role roles/cloudbuild.workerPoolUser
其中,FUNCTION_PROJECT_NUMBER 是运行函数的项目的编号,PRIVATE_POOL_PROJECT_ID 是工作器池所在项目的 id。如需了解详情,请参阅在专用池中运行构建。
部署函数以使用专用池进行构建:
gcloud
gcloud functions deploy FUNCTION_NAME --no-gen2\ --runtime RUNTIME \ --build-worker-pool PRIVATE_POOL_NAME [FLAGS...]
其中,FUNCTION_NAME 是函数的名称,RUNTIME 是您正在使用的运行时,PRIVATE_POOL_NAME 是池的名称。
如需停止使用给定专用池,并使用默认 Cloud Build 池,请在重新部署时使用 --clear-build-worker-pool
标志。
gcloud functions deploy FUNCTION_NAME --no-gen2 \ --runtime RUNTIME \ --clear-build-worker-pool [FLAGS...]
其中,FUNCTION_NAME 是函数的名称,RUNTIME 是您正在使用的运行时。
Google Cloud 控制台
在 Cloud Run functions 概览页面上,选择创建函数。
在运行时、构建... 部分中,点击构建标签页,然后在构建工作器池文本框中输入专用池的完整资源名称。
如需了解详情,请参阅在专用池中运行构建。
使用自定义服务账号保护 build
Cloud Run functions 函数会获取您的源代码,并将其发送到 Cloud Build 进行容器化。容器化函数存储在 Artifact Registry 中,并作为服务部署到 Cloud Run。默认情况下,Cloud Build 会在执行构建时分配一个服务账号充当主账号。从 2024 年 7 月开始,组织中的新项目将使用 Compute Engine 默认服务账号作为运行构建的主账号。如需了解详情,请参阅 Cloud Build 默认服务账号变更。出于安全原因,Compute Engine 默认服务账号的权限不足以执行构建。
对于在 2024 年 7 月之前创建的 Google Cloud 项目,Cloud Build 会使用旧版 Cloud Build 服务账号。该服务账号旨在帮助用户执行广泛的用例,这些用例可能对于您的项目需求来说过于宽松。如果您想将现有项目从此服务账号中移出,则可以采取以下步骤进一步保护您的函数构建环境:
- 禁止将旧版 Cloud Build 服务账号用于 build。
- 禁止将默认的计算服务账号用于 build。
- 配置具有适当范围的权限的新服务账号,以用于 build。
- 使用为 build 配置的服务账号。
禁止将旧版 Cloud Build 服务账号用于 build
您可以检查函数 build 的详细信息,以验证您的项目是否使用了旧版 Cloud Build 服务账号。默认 build 服务账号的格式如下:
PROJECT_NUMBER@cloudbuild.gserviceaccount.com
。
您可以将组织政策限制条件 cloudbuild.useBuildServiceAccount
设置为 Not Enforced
,从而强制停用此服务账号。或者,移除其所有角色授权也会限制其访问 Google Cloud资源的权限。
禁止将默认的计算服务账号用于 build
默认的计算服务账号的格式为 PROJECT_NUMBER-compute@developer.gserviceaccount.com
。您可以将组织政策 cloudbuild.useComputeServiceAccount
设为 Not Enforced
,以禁止将其用作 build 的默认值。或者,您也可以停用此服务账号,以防止其用于访问 Google Cloud 资源。
提供用于构建函数的服务账号
在配置函数的过程中,可以在部署函数时指定 build 服务账号。当旧版 Cloud Build 服务账号和默认的 Compute 服务账号无法用于 build 时,您必须指定 build 服务账号才能部署函数。
如需为您的函数配置和使用 build 服务账号,请参阅 Cloud Build 的自定义服务账号。