构建流程概览

将函数的源代码部署到 Cloud Functions 时,该源代码存储在 Cloud Storage 存储分区中。然后,Cloud Build 会自动将您的代码构建到容器映像中,并将该映像推送到映像注册表。当需要运行容器来执行函数时,Cloud 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 Build 价格,请参阅价格页面。此过程使用 Cloud Build 的默认实例大小,因为这些实例已经过预热,可以更快地投入使用。Cloud Build 提供了免费层级:请查看价格文档以进一步了解详情。

    • 如需了解 Cloud Storage 价格,请参阅价格页面。Cloud Storage 提供了免费层级:请查看价格文档以进一步了解详情。

    • 如需了解 Artifact Registry 价格,请参阅价格页面。

    • 如需了解 Container Registry(已弃用)价格,请参阅价格页面。

  • 由于构建过程需要计费,因此您的项目必须附加 Cloud Billing 账号

查看构建映像日志

将构建映像过程纳入您的用户项目的一个主要好处是可以访问构建日志。您可以使用 gcloud CLI 或 Google Cloud 控制台来访问日志,这些日志可通过 Cloud Logging 获得。

gcloud

  1. 使用 gcloud functions deploy 命令部署函数。

  2. 日志的网址在终端窗口中显示为响应的一部分。例如:

    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 控制台

  1. Cloud Functions 概览窗口中,点击要调查的函数的名称。
  2. 点击详情标签页。
  3. 一般信息窗格中,点击容器构建日志链接以打开日志浏览器窗格。
  4. 点击任何行即可查看该构建日志条目的详细信息。如果是与文件相关的错误条目,则这些详细信息包括文件的名称、行和列。

映像注册表

Cloud Functions(第 2 代)仅使用 Artifact Registry 来存储根据函数源代码构建的映像。映像存储在名为 REGION-docker.pkg.dev/PROJECT_ID/gcf-artifacts 的代码库中。

Cloud Functions (第 1 代) 默认使用 Artifact Registry。Container Registry 即将弃用

您的 Artifact Registry 必须与您的函数在同一个项目中。您可以按如下方式创建或更新基于 Artifact Registry 的函数:

gcloud

对于客户管理的 Artifact Registry,请运行以下命令:

gcloud functions deploy FUNCTION \
--docker-repository=REPOSITORY
[FLAGS...]

替换以下内容:

  • FUNCTION:函数的名称。
  • REPOSITORY:完全限定的 Artifact Registry 代码库名称,格式如下:projects/PROJECT_NAME/locations/LOCATION/repositories/REPOSITORY

对于 Google 管理的 Artifact Registry,请使用以下命令:

gcloud functions deploy FUNCTION \
--docker-registry=artifact-registry
[FLAGS...]

Google Cloud 控制台

  1. 转到 Google Cloud 控制台中的 Cloud Functions 页面:
    转到 Cloud Functions 页面

  2. 点击要为其使用 Artifact Registry 的函数的名称。

  3. 点击修改

  4. 点击运行时、构建...以展开高级配置选项。

  5. 点击菜单栏中的安全和映像代码库以打开“安全”标签页。

  6. 映像代码库下,根据您使用的 Artifact Registry 类型,选择以下选项之一:

    • 客户管理的 Artifact Registry如果您设置了自己的 Docker 代码库,请使用此选项。
    • Google 管理的 Artifact Registry。如果您想使用 Google 管理的 Docker 代码库而不是设置您自己的 Docker 代码库,请使用此选项。
  7. 对于客户管理的 Artifact Registry,请使用 Artifact Registry 下拉菜单来选择所需的 Artifact Registry 代码库,或者您也可以按照提示创建一个新的 Artifact Registry 代码库。

  8. 点击下一步

  9. 点击部署

如需详细了解价格信息,请参阅 Cloud Functions 价格

使用专用池保护构建

为了允许您的函数使用依赖项(例如 npm 软件包),Cloud Build 默认在构建过程中具有不受限制的互联网访问权限。如果您已设置 VPC Service Controls (VPC SC) 边界,并且希望限制构建仅可访问存储在边界内的依赖项,则可以使用 Cloud Build 专用工作器池功能。

一般来说,请按照以下步骤设置您的专用池:

  1. 创建专用工作器池。请参阅创建和管理专用池
  2. 配置 VPC Service Controls 边界。请参阅使用 VPC Service Controls

  3. 如果专用工作器池与函数不在同一个项目中,则需要向 Cloud 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。如需了解详情,请参阅在专用池中运行构建

  4. 部署函数以使用专用池进行构建:

gcloud

gcloud functions deploy FUNCTION_NAME \
  --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 \
  --runtime RUNTIME \
  --clear-build-worker-pool
  [FLAGS...]

其中,FUNCTION_NAME 是函数的名称,RUNTIME 是您正在使用的运行时。

Google Cloud 控制台

  1. Cloud Functions 概览页面上,选择创建函数

  2. 运行时、构建... 部分中,点击构建标签页,然后在构建工作器池文本框中输入专用池的完整资源名称。

如需了解详情,请参阅在专用池中运行构建