将函数的源代码部署到 Cloud Run 时,该源代码存储在 Cloud Storage 存储桶中。Cloud Build 随后会自动将您的代码构建到容器映像中,并将该映像推送到映像注册表。每个构建都在其自己的工作器上运行。当需要运行容器来执行函数时,Cloud Run 会访问此映像。
如果要自定义 Cloud Build 用于 VPC Service Controls 保护的构建上下文的构建工作器池,您可以自定义工作器池。本页面适用于在 Cloud Run 中部署函数以及配置 Cloud Build 所使用的专用池的平台开发者。
准备工作
启用 Cloud Build API
gcloud services enable cloudbuild.googleapis.com
所需的角色
如需获得从源代码部署所需的权限,请让管理员向您授予项目的以下 IAM 角色:
-
Cloud Run Source Developer (
roles/run.sourceDeveloper
) -
Service Account User (
roles/iam.serviceAccountUser
)
如需查看与 Cloud Run 关联的 IAM 角色和权限的列表,请参阅 Cloud Run IAM 角色和 Cloud Run IAM 权限。如果您的 Cloud Run 服务与 Google Cloud API(例如 Cloud 客户端库)进行交互,请参阅服务身份配置指南。如需详细了解如何授予角色,请参阅部署权限和管理访问权限。
使用专用池保护构建
默认情况下,Cloud Build 在构建过程中具有不受限制的互联网访问权限。如果您已设置 VPC Service Controls (VPC SC) 边界,并且希望限制构建仅可访问存储在边界内的依赖项(例如 npm 软件包),则可以使用 Cloud Build 专用工作器池功能。
一般来说,请按照以下步骤设置您的专用池:
- 创建专用工作器池。 请参阅创建和管理专用池。
配置 VPC Service Controls 边界。 请参阅使用 VPC Service Controls。
如果专用工作器池与 Cloud Run 函数位于不同的项目中,则需要向 Cloud Run Service Agent (
service-PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com
) 授予Cloud Build WorkerPool User (cloudbuild.workerPoolUser
) 角色,以便 Cloud Build 服务可以访问工作器池。gcloud projects add-iam-policy-binding PRIVATE_POOL_PROJECT_ID \ --member serviceAccount:service-PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com \ --role roles/cloudbuild.workerPoolUser
您需要将其中的:
- 将 PROJECT_NUMBER 替换为在其中运行函数的项目编号。
- 将 PRIVATE_POOL_PROJECT_ID 替换为工作器池所在项目的 ID。如需了解详情,请参阅在专用池中运行构建。
部署函数以使用专用池进行构建:
gcloud
如需在从源代码部署函数时指定要构建的专用池,请执行以下操作:
gcloud beta run deploy SERVICE \ --source . \ --function FUNCTION_ENTRY_POINT \ --build-worker-pool WORKER_POOL
您需要将其中的:
- 将 SERVICE 替换为您的函数的名称。
- 将 FUNCTION_ENTRY_POINT 替换为源代码中函数的入口点。
- 将 WORKER_POOL 替换为专用池的名称。
删除构建工作器池
您可以删除现有函数的构建工作器池。
gcloud
如需清除函数的 Cloud Build 工作器池,请执行以下操作:
gcloud beta run deploy SERVICE \ --source . \ --function FUNCTION_ENTRY_POINT \ --clear-build-worker-pool WORKER_POOL
您需要将其中的:
- 将 SERVICE 替换为您的函数的名称。
- 将 FUNCTION_ENTRY_POINT 替换为源代码中函数的入口点。
- 将 WORKER_POOL 替换为您要删除的专用池的名称。