部署 Cloud Run 函式

本頁說明如何部署及修改 Cloud Run 函式。如需部署 Hello World 函式的範例逐步說明,請參閱「部署範例函式」。

Cloud Run 函式部署作業會自動使用 Google Cloud 的建構套件和 Cloud Build,從函式的原始碼建構容器映像檔。您不需要在本機上安裝 Docker,也不必設定建構包或 Cloud Build。

Cloud Run 函式部署作業也會使用 Artifact Registry 儲存構件及管理容器映像檔。如果專案尚未建立名為 cloud-run-source-deploy 的 Artifact Registry 存放區,Artifact Registry 會自動建立。

如果您有現有函式,且需要使用 gcloud functions deploy 指令、Cloud Functions v2 API 或 google_cloudfunctions2_function Terraform 設定來確保回溯相容性,請參閱「使用 gcloud functions deploy 指令部署函式」。

事前準備

  1. 請確認您已按照設定頁面所述,為 Cloud Run 設定新專案。

  2. 啟用 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
    
  3. 如果您受到網域限制組織政策限制,專案無法進行未經驗證的呼叫,則必須按照「測試私人服務」一節的說明存取已部署的服務。

必要的角色

如要部署 Cloud Run 函式,您或管理員必須將下列 IAM 角色授予部署者帳戶和服務帳戶:

按一下即可查看部署者帳戶的必要角色

如要取得從來源建構及部署所需的權限,請要求管理員授予下列 IAM 角色:

按一下即可查看 Cloud Build 服務帳戶的必要角色

除非您覆寫這項行為,否則 Cloud Build 會自動使用 Compute Engine 預設服務帳戶做為預設的 Cloud Build 服務帳戶,建構您的原始碼和 Cloud Run 資源。如要讓 Cloud Build 建構來源,請要求管理員將 Cloud Run Builder (roles/run.builder) 授予專案中的 Compute Engine 預設服務帳戶:

  gcloud projects add-iam-policy-binding PROJECT_ID \
      --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
      --role=roles/run.builder
  

請將 PROJECT_NUMBER 替換為專案編號,並將 PROJECT_ID 替換為專案 ID。 Google CloudGoogle Cloud如需如何找出專案 ID 和專案編號的詳細操作說明,請參閱「建立及管理專案」。

將 Cloud Run 建構者角色授予 Compute Engine 預設服務帳戶後,需要幾分鐘才能傳播

如果使用 Eventarc,請按一下查看服務帳戶的必要角色

如果您使用 Eventarc,可以選擇將下列角色授予服務帳戶:

如要進一步瞭解如何為 Eventarc 觸發程序授予特定角色,請參閱「Cloud Run 目標的角色和權限」。

如需與 Cloud Run 相關聯的 IAM 角色和權限清單,請參閱 Cloud Run IAM 角色Cloud Run IAM 權限。如果 Cloud Run 服務與Google Cloud API (例如 Cloud 用戶端程式庫) 介接,請參閱服務身分設定指南。 如要進一步瞭解如何授予角色,請參閱部署權限管理存取權

建立及部署函式

您可以使用 Google Cloud 控制台或 gcloud CLI 部署 Cloud Run 函式。按一下分頁標籤,瞭解如何使用自選工具。

主控台

  1. 前往 Google Cloud 控制台的 Cloud Run 頁面:

    前往 Cloud Run

  2. 按一下「編寫函式」

  3. 在「Service name」(服務名稱) 欄位中,輸入描述函式的名稱。服務名稱開頭須為英文字母,且最多只能包含 49 個字元,包括英文字母、數字或連字號。服務名稱結尾不得為連字號,且每個區域和專案的服務名稱不得重複。 服務名稱一經設定即無法變更,而且會公開顯示。

  4. 在「Region」(區域) 清單中,使用預設值,或選取要部署函式的區域

  5. 在「執行階段」清單中,使用預設值或選取執行階段版本。

  6. (選用) 在「觸發條件」部分中,按一下「新增觸發條件」,然後選取所需選項。「Eventarc 觸發條件」窗格隨即開啟,您可以在其中修改觸發條件的下列詳細資料:

    1. 在「觸發條件名稱」欄位中,輸入觸發條件名稱或使用預設名稱。

    2. 從清單中選取「觸發條件類型」,指定下列其中一種觸發條件類型:

      • Google 來源:指定 Pub/Sub、Cloud Storage、Firestore 和其他 Google 事件供應商的觸發條件。

      • 自訂:透過應用程式程式碼產生及取用事件。按照「Eventarc 觸發條件」窗格中的提示建立管道。 管道是一種資源,用做從生產者向消費者傳送自訂事件的管道。自訂事件會發布至管道,而 Eventarc 觸發條件會訂閱這些事件。

      • 第三方:與提供 Eventarc 來源的非 Google 提供者整合。詳情請參閱「Eventarc 中的第三方事件」。

    3. 從清單中選取「事件供應商」,然後選取提供事件類型的產品,以觸發函式。如需事件提供者清單,請參閱事件提供者和目的地

    4. 從清單中選取「活動類型」。觸發條件設定會因支援的事件類型而異。詳情請參閱「事件類型」。

    5. 在「Region」(地區) 欄位中,選取 Eventarc 觸發程序的位置。一般來說,Eventarc 觸發條件的位置應與要監控事件的 Google Cloud 資源位置一致。在多數情況下,您也應該在相同區域中部署函式。如要進一步瞭解 Eventarc 觸發條件的所在位置,請參閱「瞭解 Eventarc 位置」。

    6. 在「服務帳戶」欄位中,選取服務帳戶。 Eventarc 觸發程序會連結至服務帳戶,在叫用函式時做為身分。Eventarc 觸發程序的服務帳戶必須具備叫用函式的權限。根據預設,Cloud Run 會使用 Compute Engine 預設服務帳戶

    7. 視需要指定服務網址路徑,將傳入要求傳送至該路徑。這是目的地服務上的相對路徑,觸發條件的事件應傳送至該路徑。例如://routerouteroute/subroute

    8. 填妥必填欄位後,按一下「儲存觸發條件」

  7. 在「驗證」下方,設定下列項目:

    • 如果您要建立公開 HTTP 函式 (例如 Webhook),請選取「Allow unauthenticated invocations」(允許未經驗證的叫用)。如果選取這個選項,系統會將「IAM 叫用者」角色指派給特殊 ID allUser。您可以在建立服務之後使用 IAM 編輯這項設定。如果沒有選取這個選項的權限 (Cloud Run 管理員角色),服務會部署並要求驗證。

    • 如要建立事件觸發函式,請選取「需要驗證」

  8. (選用) 更新函式的下列其他設定:

    1. 視需要設定「帳單」

    2. 在「服務調度」下方,如果您使用預設的 Cloud Run 自動調度,可以選擇指定最少執行個體。如果您使用手動調整資源配置,請指定服務的執行個體數量。

    3. 視需要設定 Ingress 控制項設定。

    4. 展開「容器、磁碟區、網路與安全性」部分,在適當的分頁標籤中設定其他選用設定:

  9. 按一下「建立」,然後等待 Cloud Run 使用預留位置修訂版本建立服務。

  10. 主控台會將您重新導向至「來源」分頁,您可以在這裡查看函式的原始碼。按一下「儲存並重新部署」

  11. 在「來源」分頁中,您可以視需要按一下「顯示酬載」,查看傳入事件的酬載範例。

  12. 部署完成後,按一下「測試」按鈕,測試建立的函式。

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    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.

  2. gcloud 元件更新到最新版本:

    gcloud components update
  3. 在包含範例程式碼的目錄中執行下列指令:

    gcloud run deploy FUNCTION \
           --source . \
           --function FUNCTION_ENTRYPOINT \
           --base-image BASE_IMAGE \
           --region REGION
    

    取代:

    • FUNCTION 改為您要部署的函式名稱。您可以完全省略這個參數,但這樣系統會提示您輸入名稱。

    • FUNCTION_ENTRYPOINT,並在原始碼中輸入函式的進入點。這是 Cloud Run 在函式執行時執行的程式碼。這個旗標的值必須是來源程式碼中存在的函式名稱或完整類別名稱。

    • BASE_IMAGE,例如 nodejs22python313go123java21dotnet8ruby34php84,做為函式的基礎映像檔環境。如要進一步瞭解基礎映像檔和每個映像檔中包含的套件,請參閱「執行階段基礎映像檔」。

    • REGION,其中 Google Cloud是您要部署函式的地區。例如:europe-west1

    選用:

    • 如要建立公開 HTTP 函式 (例如 Webhook),請指定 --allow-unauthenticated 旗標。這個標記會將 Cloud Run IAM 叫用者角色指派給特殊 ID allUser。您可以在建立服務之後使用 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,請建立新觸發條件並刪除舊觸發條件。視需要重複使用 --event-filters 旗標,並以 ATTRIBUTE=VALUE 形式新增更多支援的篩選器。

  • EVENTARC_TRIGGER_SERVICE_ACCOUNT,並使用服務帳戶。 Eventarc 觸發程序會連結至服務帳戶,在叫用函式時做為身分。Eventarc 觸發程序的服務帳戶必須具備叫用函式的權限。根據預設,Cloud Run 會使用預設的運算服務帳戶

Terraform

如要使用 Terraform 管理函式,您必須先將函式程式碼建構為容器映像檔,然後使用 Google Cloud Platform Providergoogle_cloud_run_v2_service 資源,在 Terraform 設定中定義 Cloud Run 服務。

  1. 請按照從頭建構函式的操作說明,建立與自動安全性更新相容的容器映像檔。複製容器映像檔的完整路徑,以供下一個步驟使用的 IMAGE_URL 變數。

  2. 建立新的 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 地區。例如:europe-west1
    • SERVICE 改為您的 Cloud Run 服務名稱。 服務名稱不得超過 49 個字元,且每個區域和專案的服務名稱不得重複。
    • IMAGE_URL,並參照只包含已建構函式的容器映像檔
    • BASE_IMAGE,例如 nodejs22python313go123java21dotnet8ruby34php84,做為函式的基礎映像檔環境。如要進一步瞭解基礎映像檔和每個映像檔中包含的套件,請參閱「執行階段基礎映像檔」。
    • FUNCTION_TARGET,並將您要使用的函式名稱做為進入點。

    這項設定允許公開存取 (相當於 --allow-unauthenticated)。如要將服務設為私有,請移除 google_cloud_run_v2_service_iam_member 節。

  3. 初始化 Terraform:

    terraform init
  4. 套用 Terraform 設定:

    terraform apply

    輸入 yes,確認要套用所述動作。

Cloud Run 位置

Cloud Run 具有「地區性」,這表示執行 Cloud Run 服務的基礎架構位於特定地區,並由 Google 代管,可為該地區內所有區域提供備援功能。

選擇 Cloud Run 服務的執行地區時,請將延遲時間、可用性或耐用性需求做為主要考量。一般而言,您可以選擇最靠近使用者的地區,但您應考量 Cloud Run 服務所使用的其他 Google Cloud 產品位置。使用分散在不同位置的 Google Cloud 產品,可能會影響服務的延遲時間和費用。

Cloud Run 可在下列地區使用:

採用級別 1 定價

採用級別 2 定價

如果您已建立 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,例如 nodejs22python313go123java21dotnet8ruby34php84,做為函式的基礎映像檔環境。如要進一步瞭解基礎映像檔和每個映像檔中包含的套件,請參閱「執行階段基礎映像檔」。

  • REGION,其中 Google Cloud是您要部署函式的地區。例如:europe-west1

  • 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 位於與函式不同的區域,資料就會跨區域傳輸。

修改現有函式

您可以修改函式的設定或程式碼:

修改設定

如要修改設定參數 (例如計費方案、記憶體和虛擬私有雲連線),請按照適當分頁中的操作說明進行:

控制台

  1. 前往 Google Cloud 控制台的 Cloud Run 頁面:

    前往 Cloud Run

  2. 在服務清單中找出要更新的服務,然後按一下開啟該服務的詳細資料。

  3. 按一下「Edit and deploy new revision」(編輯及部署新的修訂版本),隨即會顯示修訂版本部署表單。

  4. 修改任何設定。

  5. 按一下「Deploy」(部署),然後等待部署完成。

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    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.

  2. 如要更新一或多項服務設定,請使用 gcloud run services update SERVICE 指令,並搭配要更新的設定指令列旗標。將 SERVICE 改為服務名稱。

重新部署新的原始碼

您可以使用 Google Cloud 控制台或 gcloud CLI 修改函式的基礎映像檔、執行階段和原始碼。

按一下分頁標籤,瞭解如何使用自選工具。

主控台

  1. 前往 Google Cloud 控制台的 Cloud Run 頁面:

    前往 Cloud Run

  2. 在「Services」(服務) 清單中找出要更新的函式,然後按一下開啟該函式的詳細資料。

  3. 前往「來源」分頁,然後按一下「編輯來源」

  4. 按一下「基礎映像檔」旁的「編輯執行階段和安全性更新」,然後視需要從清單中選取其他「執行階段」或「環境」,並按一下「儲存」

  5. 視需要修改函式進入點

  6. 在「檔案」部分,選取「新增檔案」 建立新檔案、「重新命名檔案」 重新命名檔案,或「刪除檔案」 刪除檔案。

  7. 在「程式碼」部分中,視需要修改原始碼。

  8. 按一下「儲存並重新部署」,然後等待部署完成。

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    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.

  2. 在包含函式原始碼的目錄中執行下列指令:

    gcloud run deploy FUNCTION \
           --source . \
           --function FUNCTION_ENTRYPOINT \
           --base-image BASE_IMAGE \
           --region REGION
    

    取代:

    • FUNCTION 替換為要修改的函式名稱。

    • FUNCTION_ENTRYPOINT,並在原始碼中輸入函式的進入點。

    • ,並為函式提供基礎映像檔環境,例如 nodejs22python313go123java21dotnet8ruby34php84BASE_IMAGE

      或者,如要在堆疊中使用特定系統套件,或指定要從哪個區域下載基礎映像檔,可以指定下列其中一項:

      • 完整的基本映像檔路徑,例如 us-central1-docker.pkg.dev/serverless-runtimes/google-22-full/runtimes/nodejs22。 這個選項可讓您指定基礎映像檔、堆疊中的特定系統套件,以及基礎映像檔的下載來源區域。
      • 完整基本圖片路徑的別名,例如 google-22/nodejs22google-22-full/nodejs22。這個較短的別名選項可讓您指定堆疊中的基礎映像檔和特定系統套件。

      如要進一步瞭解基礎映像檔和每個映像檔中包含的套件,請參閱「執行階段基礎映像檔」。

    • REGION,其中 Google Cloud是您要部署函式的地區。例如:europe-west1

    選用標記

    修改函式時,您可以設定下列選用標記:

    • 建構環境變數標記,用於在建構步驟中指定環境變數,例如設定建構時間專屬的憑證或參數。

    • 工作站集區標記,用於指定要在 VPC Service Controls 安全建構環境中使用哪個工作站集區。

    • 自訂 Build 服務帳戶標記,可指定預設 Build 服務帳戶的替代方案,進一步提升安全性。

    • 自動更新基本映像檔 旗標,可停用自動更新。根據預設,函式會啟用自動安全性更新。

後續步驟

部署新的 Cloud Run 函式後,您可以執行下列操作: