建構程序總覽
將函式原始碼部署至 Cloud Run 函式時,該原始碼會儲存在 Cloud Storage 值區中。接著,Cloud Build 會自動將您的程式碼建構為容器映像檔,並將該映像檔推送至映像檔登錄檔。Cloud Run 函式需要執行容器來執行函式時,就會存取這個映像檔。
建構映像檔的程序完全自動化,不需要您直接輸入任何內容。在建構程序中使用的所有資源,都會在您自己的使用者專案中執行。
在專案中執行建構程序,代表:
您可以直接存取所有建構記錄。
雖然 Cloud Build 有自己的預設並行處理配額,但並未預先設定建構時間配額。
您可以查看目前的容器映像檔和先前部署的容器映像檔,這兩者都儲存在 Artifact Registry 中。
在專案中使用 Cloud Storage 來儲存函式的原始碼目錄。注意事項:
- 如果您建立函式,系統會建立上傳資料夾來儲存原始碼。這個上傳值區的名稱為
gcf-uploads-PROJECT_NUMBER-REGION.cloudfunctions.appspot.com
。 - 上傳程式碼後,函式程式碼會儲存在個別來源集區中:
- 如果您使用預設加密功能,這個值區的名稱會是
gcf-sources-PROJECT_NUMBER-REGION
。 - 如果您使用 CMEK 保護資料,值區名稱會是
gcf-sources-PROJECT_NUMBER-REGION-CMEK_KEY_HASH
。
- 如果您使用預設加密功能,這個值區的名稱會是
- 來源和上傳值區都沒有保留期限。
- 如果您建立函式,系統會建立上傳資料夾來儲存原始碼。這個上傳值區的名稱為
建構程序的特性
建構程序具有下列特性:
必須為專案啟用 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 函式會使用 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 函式」頁面:
前往「Cloud Run 函式」頁面按一下要使用 Artifact Registry 的函式名稱。
按一下 [編輯]。
按一下「Runtime, build...」展開進階設定選項。
按一下選單列中的「安全性和映像檔存放區」,開啟安全性分頁。
在「圖像存放區」下方,視您使用的 Artifact Registry 類型而定,選取下列其中一個選項:
- 客戶代管的 Artifact Registry。如果您設定自己的 Docker 存放區,請使用這個選項。
- Google 代管的 Artifact Registry。如果您想使用 Google 代管的 Docker 存放區,而非自行設定,請使用這個選項。
如果是客戶管理的 Artifact Registry,請使用「Artifact Registry」下拉式選單選取所需的 Artifact Registry 存放區,或是按照提示建立新的存放區。
點按「Next」。
按一下 [Deploy] (部署)。
如需詳細的定價資訊,請參閱 Cloud Run 函式的定價。
使用私人集區保護建構作業
為讓函式能夠使用依附元件 (例如 npm 套件),Cloud Build 在建構程序中預設會無限制地存取網際網路。如果您已設定 VPC Service Controls (VPC SC) 範圍,並希望限制建構作業只能存取範圍內儲存的依附元件,可以使用 Cloud Build 私人工作站集區功能。
一般來說,請按照下列步驟設定私人集區:
- 建立私人工作站集區。請參閱「建立及管理私人集區」。
設定 VPC Service Controls 範圍。請參閱「使用 VPC Service Controls」。
如果私人工作人員集區位於與函式不同的專案中,您必須將
cloudbuild.workerPoolUser
角色授予 Cloud Run 函式的 Service Agent 服務帳戶 (service-FUNCTION_PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com
),讓 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 控制台
在「Runtime, build...」專區中,按一下「Build」分頁,然後在「Build worker pools」文字方塊中輸入私人集區的完整資源名稱。
詳情請參閱「在私人集區中執行建構作業」。
使用自訂服務帳戶保護建構作業
Cloud Run 函式會擷取您的原始碼,並將其傳送至 Cloud Build 進行容器化。這個容器化函式會儲存在 Artifact Registry 中,並以服務形式部署至 Cloud Run。根據預設,Cloud Build 會在執行建構作業時,指派服務帳戶做為主要使用者。自 2024 年 7 月起,機構中的新專案將使用 Compute Engine 預設服務帳戶,做為執行建構作業的實體。詳情請參閱「Cloud Build 預設服務帳戶異動」。基於安全性考量,Compute Engine 預設服務帳戶的權限不足,無法執行建構作業。
對於 Google Cloud 2024 年 7 月前建立的專案,Cloud Build 會使用舊版 Cloud Build 服務帳戶。這個服務帳戶的設計目的是協助使用者執行廣泛的用途,但可能會對專案需求過於寬鬆。如果您想將現有專案從這個服務帳戶移除,可以採取下列步驟,進一步確保函式建構環境的安全性:
- 避免使用舊版 Cloud Build 服務帳戶進行建構作業。
- 避免使用預設的 Compute 服務帳戶建構。
- 設定新的服務帳戶,並授予適當的權限範圍,以便用於建構作業。
- 使用已設定的服務帳戶進行建構。
避免使用舊版 Cloud Build 服務帳戶進行建構作業
您可以檢查函式建構作業的詳細資料,確認專案是否使用舊版 Cloud Build 服務帳戶。預設 Build 服務帳戶的格式如下:
PROJECT_NUMBER@cloudbuild.gserviceaccount.com
。
您可以將機構政策限制 cloudbuild.useBuildServiceAccount
設為 Not Enforced
,藉此強制停用此服務帳戶。或者,您也可以移除所有角色授予權限,限制其存取 Google Cloud資源的權限。
避免使用預設運算服務帳戶進行建構作業
預設的運算服務帳戶格式為 PROJECT_NUMBER-compute@developer.gserviceaccount.com
。您可以將 org 政策 cloudbuild.useComputeServiceAccount
設為 Not Enforced
,藉此停用該政策,使其不再用於建構作業。或者,您也可以停用這個服務帳戶,避免有人使用該帳戶存取 Google Cloud 資源。
提供用於建構函式的服務帳戶
在部署函式時,您可以指定函式設定中的建構服務帳戶。如果系統禁止使用舊版 Cloud Build 服務帳戶和預設運算服務帳戶進行建構作業,您必須指定建構服務帳戶才能部署函式。
如要為您的函式設定及使用建構服務帳戶,請參閱「Cloud Build 的自訂服務帳戶」。