建構程序總覽
將函式的原始碼部署至 Cloud Run functions 時,該原始碼會儲存在 Cloud Storage bucket 中。Cloud Build 接著會自動在容器映像檔中建構原始碼,並將該映像檔推送至映像檔註冊資料庫。Cloud Run functions 需要執行容器來執行函式時,會存取這個映像檔。
建構映像檔的程序為全自動進行,您不需要直接輸入任何內容。建構程序中使用的所有資源都會在您的使用者專案中執行。
在專案中執行建構程序即表示:
您可以直接存取所有建構記錄。
Cloud Build 沒有預設的建構時間配額,但是有預設並行配額。
您可以查看目前的容器映像檔和先前部署的容器映像檔,這兩者都儲存在 Artifact Registry 中。
專案會使用 Cloud Storage 儲存函式的原始碼目錄。請注意:
- 如果您建立函式,系統會建立上傳 bucket 來存放原始碼。這個上傳 bucket 名為
gcf-uploads-PROJECT_NUMBER-REGION.cloudfunctions.appspot.com。 - 上傳程式碼後,函式程式碼會儲存在另一個來源 bucket 中:
- 如果您使用預設加密機制,系統會將這個 bucket 命名為
gcf-sources-PROJECT_NUMBER-REGION。 - 如果您使用 CMEK 保護資料,則系統會將 bucket 命名為
gcf-sources-PROJECT_NUMBER-REGION-CMEK_KEY_HASH。
- 如果您使用預設加密機制,系統會將這個 bucket 命名為
- 來源和上傳 bucket 皆無保留期限。
- 如果您建立函式,系統會建立上傳 bucket 來存放原始碼。這個上傳 bucket 名為
建構程序的特性
建構程序具有下列特性:
您必須為專案啟用 Cloud Build API。
如要手動啟用 API,請點按上方連結,從下拉式選單中選取專案,然後按照提示啟用 UI。
由於整個建構程序都是在專案環境中進行,因此專案會受到納入資源的價格影響:
由於建構程序會產生費用,因此專案必須附加 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 Overview」(Cloud Run functions 總覽) 視窗中,點按要調查的函式名稱。
- 點按「Details」(詳細資料) 分頁標籤。
- 在「General Information」(一般資訊)窗格中,點按「Container build log」(容器建構記錄) 連結,開啟「Logs Explorer」窗格。
- 點按任一資料列,即可查看該建構記錄項目的詳細資料。如果是與檔案相關聯的錯誤項目,這類詳細資料會包含檔案名稱、行號和欄號。
映像檔登錄
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 的函式名稱。
點按「Edit」(編輯)。
點按「Runtime, build...」(執行階段,建構...),展開進階設定選項。
點按選單列中的「Security and Image Repo」(安全性和映像檔存放區),開啟「Security」(安全性) 分頁。
在「Image repository」(映像檔存放區) 下方,依照您使用的 Artifact Registry 類型,選取以下其中一個選項:
- 客戶自行管理的 Artifact Registry。如果您已設定自己的 Docker 存放區,請使用這個選項。
- Google 代管的 Artifact Registry。如果您想使用 Google 代管的 Docker 存放區,而非自行設定,請選取這個選項。
如果您使用客戶自行管理的 Artifact Registry,請從「Artifact Registry」下拉式選單選取所需的 Artifact Registry 存放區,或按照提示建立新的存放區。
點按「Next」(繼續)。
點按「Deploy」(部署)。
如需詳細的定價資訊,請參閱「Cloud Run functions 定價」一文。
使用私人集區保護建構作業
為了讓函式使用依附元件 (例如 npm 套件),Cloud Build 預設會在建構程序中提供無限制的網際網路存取權。如果您已設定 VPC Service Controls (VPC SC) perimeter,並想限制建構作業只能存取儲存在 perimeter 中的依附元件,可以使用 Cloud Build 私人 worker 集區功能。
一般情況下,請按照下列步驟設定私人集區:
- 建立私人 worker 集區。詳情請參閱「建立及管理私人集區」一文。
設定 VPC Service Controls perimeter。詳情請參閱「使用 VPC Service Controls」一文。
如果您的私人 worker 集區與函式位於不同專案,您需要將
cloudbuild.workerPoolUser角色授予 Cloud Run functions 服務代理服務帳戶 (service-FUNCTION_PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com),Cloud Build 服務才能存取 worker 集區。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 則是 worker 集區所在專案的「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 overview」(Cloud Run functions 總覽) 頁面中,選取「Create function」(建立函式)。
在「Runtime, build...」(執行階段,建構...) 部分,點按「Build」(建構) 分頁標籤,然後在「Build worker pools」(建構 worker 集區) 文字方塊中,輸入私人集區的完整資源名稱。
詳情請參閱「在私人集區中執行建構作業」一文。
使用自訂服務帳戶保護建構作業
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 服務帳戶進行建構作業。
- 禁止使用預設的 Compute 服務帳戶執行建構作業。
- 設定新的服務帳戶來執行建構作業,並授予適當範圍的權限。
- 使用設定的服務帳戶進行建構作業。
禁止使用舊版 Cloud Build 服務帳戶進行建構作業
您可以檢查函式建構作業的詳細資料,確認專案是否使用舊版 Cloud Build 服務帳戶。預設建構服務帳戶的格式如下:
PROJECT_NUMBER@cloudbuild.gserviceaccount.com。
您可以將組織政策限制條件 cloudbuild.useBuildServiceAccount 設為 Not Enforced,強制停用這個服務帳戶,也可以移除所有角色授權,限制服務帳戶存取 Google Cloud資源。
禁止使用預設的運算服務帳戶進行建構作業
預設的運算服務帳戶格式為 PROJECT_NUMBER-compute@developer.gserviceaccount.com。如要停用這項功能,請將組織政策 cloudbuild.useComputeServiceAccount 設為 Not Enforced,這樣系統就不會預設使用這項功能。
或者,您也可以停用這個服務帳戶,防止系統使用該帳戶存取 Google Cloud 資源。
提供用於建構函式的服務帳戶
在函式設定中,您可以在部署函式時指定建構服務帳戶。如果禁止使用舊版 Cloud Build 服務帳戶和預設運算服務帳戶進行建構作業,您必須指定建構服務帳戶才能部署函式。
如要設定建構服務帳戶並用於函式,請參閱這篇文章。