本頁說明如何部署及修改 Cloud Run 函式。如需部署 Hello World 函式的示範逐步操作說明,請參閱「部署範例函式」。
Cloud Run 函式部署作業會自動使用 Google Cloud 的 Buildpacks 和 Cloud Build,從函式的原始碼建構容器映像檔。您不需要在電腦上安裝 Docker,也不需要設定 Buildpack 或 Cloud Build。
Cloud Run 函式部署作業也會使用 Artifact Registry 儲存構件並管理容器映像檔。如果專案尚未建立名為 cloud-run-source-deploy
的 Artifact Registry 存放區,Artifact Registry 會自動建立這個存放區。
如果您已有函式,且需要使用 gcloud functions deploy
指令、Cloud Functions 第 2 版 API 或 google_cloudfunctions2_function
Terraform 設定來支援向下相容性,請參閱「使用 gcloud functions deploy
指令部署函式」一文。
事前準備
請確認您已按照設定頁面所述,設定 Cloud Run 的新專案。
啟用 Artifact Registry、Cloud Build、Cloud Run Admin API 和 Cloud Logging API:
gcloud services enable artifactregistry.googleapis.com \ cloudbuild.googleapis.com \ run.googleapis.com \ logging.googleapis.com
您可以視需要啟用 Eventarc API 以使用事件觸發條件:
gcloud services enable eventarc.googleapis.com
必要的角色
如要部署 Cloud Run 函式,您或系統管理員必須將下列 IAM 角色授予部署者帳戶和服務帳戶:
按一下即可查看部署者帳戶的必要角色
如要取得從原始碼建構及部署所需的權限,請管理員授予您下列 IAM 角色:
- 在專案中使用 Cloud Run 原始碼開發人員 (
roles/run.sourceDeveloper
) - 專案中的服務使用情形消費者 (
roles/serviceusage.serviceUsageConsumer
) - Cloud Run 服務身分中的服務帳戶使用者 (
roles/iam.serviceAccountUser
)
按一下即可查看 Cloud Build 服務帳戶的必要角色
除非您覆寫這項行為,否則 Cloud Build 會自動使用 Compute Engine 預設服務帳戶做為預設 Cloud Build 服務帳戶,以便建構您的原始碼和 Cloud Run 資源。如要讓 Cloud Build 建構來源,請要求管理員將 Cloud Run 建構工具 (roles/run.builder
) 授予專案的 Compute Engine 預設服務帳戶:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER[email protected] \ --role=roles/run.builder
請將 PROJECT_NUMBER
替換為您的 Google Cloud專案編號,並將 PROJECT_ID
替換為您的 Google Cloud專案 ID。如需查詢專案 ID 和專案編號的詳細操作說明,請參閱「建立及管理專案」。
將 Cloud Run 建構工具角色授予 Compute Engine 預設服務帳戶後,需要幾分鐘的時間才能套用。
點選即可查看使用 Eventarc 時,服務帳戶所需的角色
如有需要,如果您使用的是 Eventarc,請將下列角色授予服務帳戶:
- Cloud Build 編輯器 (
roles/cloudbuild.builds.editor
) - Cloud Run 管理員 (
roles/run.admin
) - 建立服務帳戶 (
roles/iam.serviceAccountCreator
) - Cloud Run 叫用器 (
roles/run.invoker
) - Eventarc 管理員 (
roles/eventarc.admin
) - 專案 IAM 管理員 (
roles/resourcemanager.projectIamAdmin
) - 服務用量消費者 (
roles/serviceusage.serviceUsageConsumer
) - 儲存空間管理員 (
roles/storage.admin
)
如要進一步瞭解如何為 Eventarc 觸發事件授予特定角色,請參閱「Cloud Run 目標的角色和權限」。
如需與 Cloud Run 相關聯的 IAM 角色和權限清單,請參閱「Cloud Run IAM 角色」和「Cloud Run IAM 權限」。如果您的 Cloud Run 服務會與Google Cloud API 互動 (例如 Cloud 用戶端程式庫),請參閱服務身分設定指南。如要進一步瞭解如何授予角色,請參閱部署權限和管理存取權。
建立及部署函式
您可以使用 Google Cloud 控制台或 gcloud CLI 部署 Cloud Run 函式。按一下分頁標籤,瞭解如何使用自選工具。
主控台
前往 Google Cloud 控制台的「Cloud Run」頁面:
按一下「編寫函式」。
在「Service name」欄位中,輸入描述函式的名稱。服務名稱開頭須為英文字母,且最多只能包含 49 個字元 (包括英文字母、數字或連字號)。服務名稱結尾不得使用連字號,且每個區域和專案的名稱不得重複。服務名稱一經設定即無法變更,而且會公開顯示。
在「Region」清單中,使用預設值,或選取要部署函式的區域。
在「Runtime」清單中,使用預設值或選取執行階段版本。
您也可以在「觸發條件」部分中按一下「新增觸發條件」,然後選取所需選項。Eventarc 觸發條件窗格隨即開啟,您可以修改觸發條件的下列詳細資料:
在「Trigger name」欄位中輸入觸發條件名稱,或使用預設名稱。
從清單中選取「觸發條件類型」,指定下列其中一種觸發條件類型:
Google 來源:指定 Pub/Sub、Cloud Storage、Firestore 和其他 Google 事件供應器的觸發事件。
自訂:透過應用程式程式碼產生及取用事件。按照 Eventarc 觸發條件窗格中的提示建立管道。管道是用來將自訂事件從供應端傳送至用戶端的資源。自訂事件會發布至管道,而 Eventarc 觸發條件會訂閱這些事件。
第三方:整合提供 Eventarc 來源的非 Google 供應商。詳情請參閱「Eventarc 中的第三方事件」。
從清單中選取事件供應器,即可選取提供觸發函式的事件類型產品。如要查看事件提供者清單,請參閱「事件提供者和目的地」。
從清單中選取「事件類型」。觸發條件設定會因支援的事件類型而異。詳情請參閱「事件類型」。
在「Region」欄位中,選取 Eventarc 觸發事件的位置。一般來說,Eventarc 觸發條件的位置應與您要監控事件的 Google Cloud 資源位置一致。在大多數情況下,您也應在相同的地區部署函式。如要進一步瞭解 Eventarc 觸發條件的所在位置,請參閱「瞭解 Eventarc 位置」。
在「服務帳戶」欄位中,選取服務帳戶。Eventarc 觸發事件會連結至服務帳戶,以便在叫用函式時做為身分使用。Eventarc 觸發事件的服務帳戶必須具備叫用函式的權限。根據預設,Cloud Run 會使用 Compute Engine 預設服務帳戶。
您可以視需要指定要傳送傳入要求的服務網址路徑。這是目的地服務中的相對路徑,應將觸發事件傳送至此路徑。例如:
/
、/route
、route
和route/subroute
。填妥必填欄位後,按一下「儲存觸發條件」。
在「Authentication」下方,設定下列項目:
如果您要建立公開的 HTTP 函式 (例如 webhook),請選取「Allow unauthenticated invocations」。如果選取這個選項,系統會將「IAM 叫用者」角色指派給特殊 ID
allUser
。您可以在建立服務之後使用 IAM 編輯這項設定。如果您沒有權限 (Cloud Run 管理員角色) 選取這項功能,系統會部署服務並要求驗證。如果您要建立事件觸發函式,請選取「需要驗證」。
您可以視需要為函式更新下列其他設定:
按一下「Create」(建立),然後等待 Cloud Run 使用預留位置修訂版本建立服務。
主控台會將您重新導向至「來源」分頁,您可以在該分頁中查看函式的原始碼。按一下「儲存並重新部署」。
在「Source」分頁中,您可以選擇按一下「Show Payload」,查看傳入事件的酬載範例。
部署完成後,按一下「Test」按鈕,測試所建立的函式。
gcloud
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
將
gcloud
元件更新至最新版本:gcloud components update
在包含範例程式碼的目錄中執行下列指令:
gcloud run deploy FUNCTION \ --source . \ --function FUNCTION_ENTRYPOINT \ --base-image BASE_IMAGE \ --region REGION
取代:
FUNCTION 替換為您要部署的函式名稱。您可以將這個參數完全省略,這樣系統會提示您輸入名稱。
FUNCTION_ENTRYPOINT 與原始碼中函式的進入點。這是 Cloud Run 在函式執行時執行的程式碼。這個標記的值必須是來源程式碼中存在的函式名稱或完全限定的類別名稱。
BASE_IMAGE 搭配函式的基礎映像檔環境,例如
nodejs22
、python313
、go123
、java21
、dotnet8
、ruby34
或php84
。如要進一步瞭解基準映像檔和各個映像檔所包含的套件,請參閱「執行階段基準映像檔」。REGION 與您要部署函式的 Google Cloud 區域。例如:
europe-west1
。
選用:
- 如果您要建立公開的 HTTP 函式 (例如 webhook),請指定
--allow-unauthenticated
標記。這個標記會將 Cloud Run IAM 叫用者角色指派給特殊 IDallUser
。您可以在建立服務之後使用 IAM 編輯這項設定。如果您要建立事件觸發函式或經過驗證的服務,可以省略這個標記。
您可以選擇在部署函式後,將 Eventarc 觸發事件新增至函式。如要新增觸發條件,請執行下列指令:
gcloud eventarc triggers create EVENTARC_TRIGGER_NAME \
--location=EVENTARC_TRIGGER_LOCATION \
--destination-run-service=FUNCTION \
--destination-run-region=REGION \
--event-filters="type=EVENTARC_FILTER_TYPE" \
--event-filters="EVENTARC_EVENT_FILTER" \
--service-account=EVENTARC_TRIGGER_SERVICE_ACCOUNT
取代:
EVENTARC_TRIGGER_NAME 替換為 Eventarc 觸發事件的名稱。
EVENTARC_TRIGGER_LOCATION 與 Eventarc 觸發條件的所在位置。一般來說,Eventarc 觸發條件的位置應與您要監控事件的 Google Cloud 資源位置一致。在大多數情況下,您也應在相同的地區部署函式。如要進一步瞭解 Eventarc 觸發條件的所在位置,請參閱「瞭解 Eventarc 位置」。
FUNCTION 替換為您已部署函式的名稱。
REGION 與函式的 Cloud Run 區域。
EVENTARC_FILTER_TYPE 與觸發條件監控的事件篩選器。符合所有
--event-filters
篩選條件的事件會觸發對函式的呼叫。每個觸發條件都必須有支援的事件類型,格式為--event-filters="type=EVENTARC_FILTER_TYPE"
。此事件類型建立後即無法變更。如要變更EVENT_FILTER_TYPE
,請建立新的觸發條件並刪除舊的觸發條件。您也可以在ATTRIBUTE=VALUE
表單中使用支援的篩選器重複--event-filters
標記,以便新增更多篩選器。EVENTARC_TRIGGER_SERVICE_ACCOUNT 與服務帳戶。Eventarc 觸發事件會連結至服務帳戶,以便在叫用函式時做為身分使用。Eventarc 觸發事件的服務帳戶必須具備叫用函式的權限。根據預設,Cloud Run 會使用預設的運算服務帳戶。
Terraform
如要使用 Terraform 管理函式,您必須將函式程式碼建構為容器映像檔,然後在 Terraform 設定中使用 Google Cloud Platform 供應器的 google_cloud_run_v2_service
資源,定義 Cloud Run 服務。
請按照從頭開始建構函式的操作說明,建立與自動安全性更新相容的容器映像檔。複製下一個步驟中使用的 IMAGE_URL 變數容器映像檔完整路徑。
建立新的
main.tf
檔案,並加入下列內容:provider "google" { project = "PROJECT-ID" } resource "google_cloud_run_v2_service" "default" { name = "SERVICE" location = "REGION" client = "terraform" template { containers { name = "SERVICE" image = "IMAGE_URL" # Container image built from your function in the previous step. base_image_uri = "BASE_IMAGE" } } build_config{ function_target = "FUNCTION_TARGET" image_uri = "IMAGE_URL" base_image = "BASE_IMAGE" enable_automatic_updates = true } } resource "google_cloud_run_v2_service_iam_member" "noauth" { location = google_cloud_run_v2_service.default.location name = google_cloud_run_v2_service.default.name role = "roles/run.invoker" member = "allUsers" }
取代:
- PROJECT-ID 與 Google Cloud 專案 ID。
- 將 REGION 替換為 Google Cloud 區域。
- SERVICE 改為 Cloud Run 服務名稱。服務名稱長度不得超過 49 個字元,且每個區域和專案的名稱不得重複。
- IMAGE_URL,參照僅包含已建構函式的容器映像檔
- BASE_IMAGE 搭配函式的基礎映像檔環境,例如
nodejs22
、python313
、go123
、java21
、dotnet8
、ruby34
或php84
。如要進一步瞭解基準映像檔和各個映像檔所包含的套件,請參閱「執行階段基準映像檔」。 - FUNCTION_TARGET 與您要用來做為進入點的函式名稱。
這項設定可允許公開存取 (等同於
--allow-unauthenticated
)。如要將服務設為私人,請移除google_cloud_run_v2_service_iam_member
節。初始化 Terraform:
terraform init
套用 Terraform 設定:
terraform apply
輸入
yes
確認要套用所述動作。
Cloud Run 位置
Cloud Run 具有「地區性」,這表示執行 Cloud Run 服務的基礎架構位於特定地區,並由 Google 代管,可為該地區內所有區域提供備援功能。
選擇 Cloud Run 服務的執行地區時,請將延遲時間、可用性或耐用性需求做為主要考量。一般而言,您可以選擇最靠近使用者的地區,但您應考量 Cloud Run 服務所使用的其他 Google Cloud產品位置。使用分散在不同位置的 Google Cloud 產品,可能會影響服務的延遲時間和費用。
Cloud Run 可在下列地區使用:
採用級別 1 定價
asia-east1
(臺灣)asia-northeast1
(東京)asia-northeast2
(大阪)asia-south1
(印度孟買)europe-north1
(芬蘭)低二氧化碳
europe-north2
(斯德哥爾摩)二氧化碳排放量低
europe-southwest1
(馬德里)低二氧化碳
europe-west1
(比利時)二氧化碳排放量低
europe-west4
(荷蘭)二氧化碳排放量低
europe-west8
(米蘭)europe-west9
(巴黎)二氧化碳排放量低
me-west1
(特拉維夫)northamerica-south1
(墨西哥)us-central1
(愛荷華州)二氧化碳排放量低
us-east1
(南卡羅來納州)us-east4
(北維吉尼亞州)us-east5
(哥倫布)us-south1
(達拉斯)二氧化碳排放量低
us-west1
(奧勒岡州)二氧化碳排放量低
採用級別 2 定價
africa-south1
(約翰尼斯堡)asia-east2
(香港)asia-northeast3
(韓國首爾)asia-southeast1
(新加坡)asia-southeast2
(雅加達)asia-south2
(印度德里)australia-southeast1
(雪梨)australia-southeast2
(墨爾本)europe-central2
(波蘭華沙)europe-west10
(柏林)二氧化碳排放量低
europe-west12
(都靈)europe-west2
(英國倫敦)二氧化碳排放量低
europe-west3
(德國法蘭克福)二氧化碳排放量低
europe-west6
(瑞士蘇黎世)二氧化碳排放量低
me-central1
(杜哈)me-central2
(達曼)northamerica-northeast1
(蒙特婁)二氧化碳排放量低
northamerica-northeast2
(多倫多)二氧化碳排放量低
southamerica-east1
(巴西聖保羅)二氧化碳排放量低
southamerica-west1
(智利聖地牙哥)二氧化碳排放量低
us-west2
(洛杉磯)us-west3
(鹽湖城)us-west4
(拉斯維加斯)
如果您已建立 Cloud Run 服務,即可在 Google Cloud 控制台的 Cloud Run 資訊主頁中查看地區。
啟用事件重試
Eventarc 使用 Pub/Sub 做為傳輸層,且預設重試政策可能無法順利運作您的函式。
建立 Eventarc 觸發條件後,我們強烈建議您更新 Eventarc 中的重試政策,並在 Pub/Sub 中設定死信主題。
指定映像檔存放區
Cloud Run 函式部署作業會使用 Artifact Registry 儲存構件並管理容器映像檔。如果專案尚未建立同名 Artifact Registry 存放區,Artifact Registry 會自動建立 REGION-docker.pkg.dev/PROJECT_ID/cloud-run-source-deploy
。
如要指定自行建立的 Artifact Registry 存放區,請使用下列指令:
gcloud
gcloud run deploy FUNCTION \ --source . \ --function FUNCTION_ENTRYPOINT \ --base-image BASE_IMAGE \ --region REGION \ --image IMAGE_URL
更改下列內容:
FUNCTION 替換為您要部署的函式名稱。您可以將這個參數完全省略,這樣系統會提示您輸入名稱。
FUNCTION_ENTRYPOINT 與原始碼中函式的進入點。這是 Cloud Run 在函式執行時執行的程式碼。這個標記的值必須是來源程式碼中存在的函式名稱或完全限定的類別名稱。
BASE_IMAGE 搭配函式的基礎映像檔環境,例如
nodejs22
、python313
、go123
、java21
、dotnet8
、ruby34
或php84
。如要進一步瞭解基準映像檔和各個映像檔所包含的套件,請參閱「執行階段基準映像檔」。REGION 與您要部署函式的 Google Cloud 區域。例如:
us-central1
。IMAGE_URL,其中引用映像檔路徑使用您選擇的 Artifact Registry 映像檔存放區,例如
projects/PROJECT_NAME/locations/LOCATION/repositories/REPOSITORY_NAME/FUNCTION
。圖片名稱必須與您要建立的函式名稱相符。如果只提供存放區路徑,系統會使用函式名稱 FUNCTiON 建立映像檔。
指定位於其他專案或區域的 Artifact Registry 存放區時,請務必考量以下事項:
IAM 設定:
- 確認您已設定 IAM 權限,可部署其他 Google Cloud 專案的映像檔
- 此外,請確認建構服務帳戶已授權存取 REPOSITORY 的讀取和寫入權限。
網路設定:
- 請確認目標 REPOSITORY 可從目前的專案設定存取。
VPC Service Controls 設定:
- 請確認建構服務帳戶可在 VPC-SC 範圍內存取目標 REPOSITORY。
資料落地限制:
- 請注意,如果您在函式所在區域以外的區域指定 REPOSITORY,系統就會在不同區域之間移轉資料。
修改現有函式
您可以修改函式的設定或程式碼:
修改設定
如要修改設定參數 (例如帳單選項、記憶體和 VPC 連線),請按照對應分頁中的操作說明進行:
控制台
前往 Google Cloud 控制台的「Cloud Run」頁面:
在服務清單中找出您要更新的服務,然後按一下該服務的詳細資料。
按一下「Edit & deploy new revision」,即可顯示修訂版本部署表單。
修改任何設定。
按一下「Deploy」,然後等待部署作業完成。
gcloud
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
如要更新一或多項服務設定,請使用
gcloud run services update SERVICE
指令,搭配要更新的設定的指令列標記。將 SERVICE 改為服務名稱。
重新部署新的原始碼
您可以使用 Google Cloud 控制台或 gcloud CLI 修改函式的基礎映像檔、執行階段和原始碼。
按一下分頁標籤,瞭解如何使用自選工具。
主控台
前往 Google Cloud 控制台的「Cloud Run」頁面:
在「Services」清單中找出要更新的函式,然後按一下該函式的詳細資料。
前往「來源」分頁,然後按一下「編輯來源」。
按一下「Base image」旁的
「Edit runtime and security updates」,然後視需要從清單中選取其他「Runtime」或「Environment」,然後按一下「Save」。視需要修改函式進入點。
在「檔案」部分,選取
「新增檔案」來建立新檔案,選取 「重新命名檔案」來重新命名檔案,或是選取 「刪除檔案」來刪除檔案。在「Code」部分,視需要修改原始碼。
按一下「儲存並重新部署」,然後等待部署作業完成。
gcloud
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
在包含函式原始碼的目錄中執行下列指令:
gcloud run deploy FUNCTION \ --source . \ --function FUNCTION_ENTRYPOINT \ --base-image BASE_IMAGE \ --region REGION
取代:
FUNCTION 與您要修改的函式名稱。
FUNCTION_ENTRYPOINT 與原始碼中函式的進入點。
BASE_IMAGE 搭配函式的基礎映像檔環境,例如
nodejs22
、python313
、go123
、java21
、dotnet8
、ruby34
或php84
。或者,如果您想在堆疊中使用特定系統套件,或指定下載基本映像檔的區域,可以指定下列任一項目:
- 完整的基本映像檔路徑,例如
us-central1-docker.pkg.dev/serverless-runtimes/google-22-full/runtimes/nodejs22
。您可以使用這個選項指定基礎映像檔、堆疊中的特定系統套件,以及基礎映像檔的下載區域。 - 完整基本圖片路徑的別名,例如
google-22/nodejs22
或google-22-full/nodejs22
。這個較短的別名選項可讓您指定堆疊中的基礎映像檔和特定系統套件。
如要進一步瞭解基礎映像檔和各個映像檔所包含的套件,請參閱「執行階段基礎映像檔」。
- 完整的基本映像檔路徑,例如
REGION 與您要部署函式的 Google Cloud 區域。例如:
us-central1
。
選用標記
您可以在修改函式時設定下列選用標記:
建構環境變數標記,用於在建構步驟期間指定環境變數,例如設定建構時的特定憑證或參數。
Worker pool 標記,用於指定在 VPC Service Controls 安全建構情境中要使用的 worker pool。
自訂 Build 服務帳戶標記,可指定預設 Build 服務帳戶的替代方案,以提升安全性。
自動更新基本映像檔標記,停用自動更新功能。根據預設,函式會啟用自動安全性更新功能。
後續步驟
部署新的 Cloud Run 函式後,您可以執行下列操作: