访问 700 多个实验和课程

Cloud Run functions:Qwik Start

实验 1 小时 universal_currency_alt 1 积分 show_chart 入门级
info 此实验可能会提供 AI 工具来支持您学习。
访问 700 多个实验和课程

GSP1089

Google Cloud 自學實驗室標誌

總覽

Cloud Run functions 是 Google Cloud 的函式即服務 (FaaS) 產品,提供全套進階功能,並採用 Cloud RunEventarc。透過 Cloud Run functions,您可以進一步掌控效能及調度資源,並加強控管函式執行階段和 90 多個事件來源的觸發條件。

在本實驗室中,您會建立 Cloud Run 函式,可回應 HTTP 呼叫,並由 Cloud Storage 事件和 Cloud 稽核記錄觸發。此外,您也會部署特定 Cloud Run 函式的多個修訂版本,以及探索新設定。

最新資訊

新版 Cloud Run functions 採用 Cloud Run、Cloud Build、Artifact Registry 和 Eventarc,提供更完善的 FaaS 體驗。

強化基礎架構

  • 延長要求處理時間:Cloud Run 函式的執行時間可超過預設的 5 分鐘,即使是耗時較長的要求工作負載,也能輕鬆執行,例如處理來自 Cloud Storage 或 BigQuery 的大量資料串流。HTTP 函式的執行時間最長可達 60 分鐘,而事件導向函式的上限目前則為 10 分鐘。
  • 擴充執行個體規模:Cloud Run 函式最多可使用 16 GB 的 RAM 和 4 個 vCPU,能支援記憶體用量更大、運算資源需求更高和同時處理作業數更多的工作負載。
  • 提升並行處理能力:單一函式執行個體最多可處理 1,000 個並行要求,能將冷啟動次數降至最少,並改善資源調度時的延遲情況。
  • 保留最低數量的執行個體:透過執行個體預先暖機來減少冷啟動次數,並確保應用程式的啟動時間不會影響本身的效能。
  • 分配流量:支援多個函式版本、可在不同版本之間分配流量,以及將函式復原為先前版本。

擴大事件涵蓋範圍並支援 CloudEvents

  • 整合 Eventarc:Cloud Run functions 現在原生支援 Eventarc,可透過 Cloud 稽核記錄 (BigQuery、Cloud SQL、Cloud Storage 等) 接收超過 125 種來源的事件,同時也繼續支援自訂來源的事件,只要將事件直接發布至 Cloud Pub/Sub 即可。
  • 支援 CloudEvent 格式:無論來源為何,所有事件導向函式都會遵循業界標準 CloudEvents (cloudevents.io),確保開發人員體驗一致。酬載會透過包含 cloudevent.data 酬載的結構化 CloudEvent 傳送,並實施 CloudEvent 標準。

目標

在本實驗室中,您將瞭解如何執行下列工作:

  • 編寫會回應 HTTP 呼叫的函式。
  • 編寫會回應 Cloud Storage 事件的函式。
  • 編寫會回應 Cloud 稽核記錄的函式。
  • 部署特定 Cloud Run 函式的多個修訂版本。
  • 設定執行個體數量下限,避免冷啟動發生。
  • 設定並行處理數量。

設定和需求

瞭解以下事項後,再點選「Start Lab」按鈕

請詳閱以下操作說明。實驗室活動會計時,且中途無法暫停。點選「Start Lab」後就會開始計時,顯示可使用 Google Cloud 資源的時間。

您將在真正的雲端環境完成實作實驗室活動,而不是模擬或示範環境。為此,我們會提供新的暫時憑證,供您在實驗室活動期間登入及存取 Google Cloud。

為了順利完成這個實驗室,請先確認:

  • 可以使用標準的網際網路瀏覽器 (Chrome 瀏覽器為佳)。
注意事項:請使用無痕模式 (建議選項) 或私密瀏覽視窗執行此實驗室,這可以防止個人帳戶和學員帳戶之間的衝突,避免個人帳戶產生額外費用。
  • 是時候完成實驗室活動了!別忘了,活動一旦開始將無法暫停。
注意事項:務必使用實驗室專用的學員帳戶。如果使用其他 Google Cloud 帳戶,可能會產生額外費用。

如何開始研究室及登入 Google Cloud 控制台

  1. 點選「Start Lab」按鈕。如果實驗室會產生費用,畫面上會出現選擇付款方式的對話方塊。左側的「Lab Details」窗格會顯示下列項目:

    • 「Open Google Cloud console」按鈕
    • 剩餘時間
    • 必須在這個研究室中使用的臨時憑證
    • 完成這個實驗室所需的其他資訊 (如有)
  2. 點選「Open Google Cloud console」;如果使用 Chrome 瀏覽器,也能按一下滑鼠右鍵,選取「在無痕視窗中開啟連結」

    接著,實驗室會啟動相關資源,並開啟另一個分頁,顯示「登入」頁面。

    提示:您可以在不同的視窗中並排開啟分頁。

    注意:如果頁面中顯示「選擇帳戶」對話方塊,請點選「使用其他帳戶」
  3. 如有必要,請將下方的 Username 貼到「登入」對話方塊。

    {{{user_0.username | "Username"}}}

    您也可以在「Lab Details」窗格找到 Username。

  4. 點選「下一步」

  5. 複製下方的 Password,並貼到「歡迎使用」對話方塊。

    {{{user_0.password | "Password"}}}

    您也可以在「Lab Details」窗格找到 Password。

  6. 點選「下一步」

    重要事項:請務必使用實驗室提供的憑證,而非自己的 Google Cloud 帳戶憑證。 注意:如果使用自己的 Google Cloud 帳戶來進行這個實驗室,可能會產生額外費用。
  7. 按過後續的所有頁面:

    • 接受條款及細則。
    • 由於這是臨時帳戶,請勿新增救援選項或雙重驗證機制。
    • 請勿申請免費試用。

Google Cloud 控制台稍後會在這個分頁開啟。

注意:如要使用 Google Cloud 產品和服務,請點選「導覽選單」,或在「搜尋」欄位輸入服務或產品名稱。「導覽選單」圖示和搜尋欄位

啟動 Cloud Shell

Cloud Shell 是搭載多項開發工具的虛擬機器,提供永久的 5 GB 主目錄,而且在 Google Cloud 中運作。Cloud Shell 提供指令列存取權,方便您使用 Google Cloud 資源。

  1. 點按 Google Cloud 控制台頂端的「啟用 Cloud Shell」圖示 「啟動 Cloud Shell」圖示

  2. 系統顯示視窗時,請按照下列步驟操作:

    • 繼續操作 Cloud Shell 視窗。
    • 授權 Cloud Shell 使用您的憑證發出 Google Cloud API 呼叫。

連線建立完成即代表已通過驗證,而且專案已設為您的 Project_ID。輸出內容中有一行文字,宣告本工作階段的 Project_ID

Your Cloud Platform project in this session is set to {{{project_0.project_id | "PROJECT_ID"}}}

gcloud 是 Google Cloud 的指令列工具,已預先安裝於 Cloud Shell,並支援 Tab 鍵自動完成功能。

  1. (選用) 您可以執行下列指令來列出使用中的帳戶:
gcloud auth list
  1. 點按「授權」

輸出內容:

ACTIVE: * ACCOUNT: {{{user_0.username | "ACCOUNT"}}} To set the active account, run: $ gcloud config set account `ACCOUNT`
  1. (選用) 您可以使用下列指令來列出專案 ID:
gcloud config list project

輸出內容:

[core] project = {{{project_0.project_id | "PROJECT_ID"}}} 注意:如需 gcloud 的完整說明,請前往 Google Cloud 參閱 gcloud CLI 總覽指南

工作 1:啟用 API

請先啟用相關 API,再開始建立 Cloud Run 函式。

  • 執行下列指令,啟用所有必要服務。
gcloud services enable \ artifactregistry.googleapis.com \ cloudfunctions.googleapis.com \ cloudbuild.googleapis.com \ eventarc.googleapis.com \ run.googleapis.com \ logging.googleapis.com \ pubsub.googleapis.com

在 Cloud Shell IDE 啟用 Gemini Code Assist

您可以在 Cloud Shell 等整合式開發環境 (IDE) 中使用 Gemini Code Assist,取得程式碼相關指引或解決程式碼問題。Gemini Code Assist 必須先啟用,才能開始使用。

  1. 在 Cloud Shell 執行下列指令,啟用 Gemini for Google Cloud API:
gcloud services enable cloudaicompanion.googleapis.com
  1. 點按 Cloud Shell 工具列中的「開啟編輯器」
注意:如要開啟 Cloud Shell 編輯器,請點選 Cloud Shell 工具列中的「開啟編輯器」。如要在 Cloud Shell 與程式碼編輯器之間切換,請視需要點選「開啟編輯器」或「開啟終端機」
  1. 在左側窗格中,點按「設定」圖示,然後在「設定」檢視畫面中搜尋「Gemini Code Assist」

  2. 找到「Geminicodeassist: Enable」,確認已勾選核取方塊,然後關閉「設定」

  3. 點選畫面底部狀態列中的「Cloud Code - No Project」

  4. 依指示授權外掛程式。如果系統未自動選取專案,請點按「選取 Google Cloud 專案」,然後選擇

  5. 確認狀態列的 Cloud Code 狀態訊息中已顯示 Google Cloud 專案 ()。

工作 2:建立 HTTP 函式

首先,請建立經過驗證的 Node.js 函式來回應 HTTP 要求,並將逾時設為 10 分鐘,展示如何讓函式有更多時間回應 HTTP 要求。

建立

  1. 在 Cloud Shell 終端機執行下列指令,為應用程式建立資料夾和檔案,並前往該資料夾:
mkdir ~/hello-http && cd $_ touch index.js && touch package.json
  1. 在 Cloud Shell 工具列點選「開啟編輯器」按鈕。

  2. 將下列程式碼加入 hello-http/index.js 檔案,回應 HTTP 要求:

const functions = require('@google-cloud/functions-framework'); functions.http('helloWorld', (req, res) => { res.status(200).send('HTTP with Node.js in GCF 2nd gen!'); });
  1. hello-http/package.json 檔案加入下列內容,指定依附元件。
{ "name": "nodejs-functions-gen2-codelab", "version": "0.0.1", "main": "index.js", "dependencies": { "@google-cloud/functions-framework": "^2.0.0" } }
  1. 在檔案總管開啟 index.js 檔案。這項動作會啟用 Gemini Code Assist,編輯器右上角出現 Gemini Code Assist:智慧動作 圖示時,代表該工具已啟用。

  2. 點選「Gemini Code Assist: Smart Actions」Gemini Code Assist:智慧動作 圖示,然後選取「Explain this」

  3. Gemini Code Assist 會開啟對話窗格,並預先填入提示詞 Explain this。在 Code Assist 對話的內嵌文字方塊中,將預先填入的提示詞改成下列內容,然後點選「Send」

你是 Cymbal AI 的資深雲端開發人員,有位新團隊成員不熟悉這個 Cloud 函式的實作方式。請詳細解釋「hello-http」資料夾中的「index.js」和「package.json」檔案,並說明這些檔案在應用程式程式碼中扮演的關鍵角色。如有建議改善的地方,請勿直接更新檔案內容。

Gemini Code Assist 會在對話視窗中,詳細解釋 index.jspackage.json 程式碼。

部署

  1. 在 Cloud Shell 終端機執行下列指令來部署函式,並在「unauthenticated invocations」彈出式視窗輸入 y
gcloud functions deploy nodejs-http-function \ --gen2 \ --runtime nodejs22 \ --entry-point helloWorld \ --source . \ --region {{{project_0.default_region|Region}}} \ --trigger-http \ --timeout 600s \ --max-instances 1 注意:如果收到 permissions error 訊息,請稍候幾分鐘,再試著重新部署。API 要過幾分鐘才會啟用。

雖然這個步驟不一定要設定逾時,但我們還是設了 600 秒,讓函式有更充裕的時間回應 HTTP 要求。

  1. 函式部署完畢後,在搜尋列輸入 Cloud Run functions,然後點選搜尋結果,系統就會將您重新導向至「Cloud Run」控制台。請確認函式是否部署成功。

確認函式是否已部署

測試

  • 使用下列指令測試函式:
gcloud functions call nodejs-http-function \ --gen2 --region {{{project_0.default_region|Region}}}

您應該會看到下列回應訊息:

HTTP with Node.js in GCF 2nd gen!

點選「Check my progress」,確認目標已達成。 建立 HTTP 函式

工作 3:建立 Cloud Storage 函式

在本節中,您會建立 Node.js 函式來回應 Cloud Storage bucket 的事件。

設定

  • 為使用 Cloud Storage 函式,請先執行下列程式碼,將 pubsub.publisher IAM 角色授予 Cloud Storage 服務帳戶:
PROJECT_NUMBER=$(gcloud projects list --filter="project_id:{{{ project_0.project_id | PROJECT_ID }}}" --format='value(project_number)') SERVICE_ACCOUNT=$(gsutil kms serviceaccount -p $PROJECT_NUMBER) gcloud projects add-iam-policy-binding {{{ project_0.project_id | PROJECT_ID }}} \ --member serviceAccount:$SERVICE_ACCOUNT \ --role roles/pubsub.publisher

建立

  1. 執行下列指令,為應用程式建立資料夾和檔案,並前往該資料夾:
mkdir ~/hello-storage && cd $_ touch index.js && touch package.json
  1. 在 Cloud Shell 工具列點選「開啟編輯器」按鈕。

  2. 將下列程式碼加入 hello-storage/index.js 檔案,回應 Cloud Storage 事件:

const functions = require('@google-cloud/functions-framework'); functions.cloudEvent('helloStorage', (cloudevent) => { console.log('Cloud Storage event with Node.js in GCF 2nd gen!'); console.log(cloudevent); });
  1. hello-storage/package.json 檔案加入下列內容,指定依附元件:
{ "name": "nodejs-functions-gen2-codelab", "version": "0.0.1", "main": "index.js", "dependencies": { "@google-cloud/functions-framework": "^2.0.0" } }
  1. 在檔案總管中,開啟「hello-storage」資料夾內的 index.js 檔案。這項動作會啟用 Gemini Code Assist,編輯器右上角出現 Gemini Code Assist:智慧動作 圖示時,代表該工具已啟用。

  2. 點選「Gemini Code Assist: Smart Actions」Gemini Code Assist:智慧動作 圖示,然後選取「Explain this」

  3. Gemini Code Assist 會開啟對話窗格,並預先填入提示詞 Explain this。在 Code Assist 對話的內嵌文字方塊中,將預先填入的提示詞改成下列內容,然後點選「Send」

你是 Cymbal AI 的資深雲端開發人員,有位新團隊成員不熟悉這個 Cloud 函式的實作方式。請詳細解釋「hello-storage」資料夾中的「index.js」和「package.json」檔案,並說明這些檔案在應用程式程式碼中扮演的關鍵角色。 如有建議改善的地方,請勿直接更新檔案內容。

Gemini Code Assist 會在對話視窗中,詳細解釋 index.jspackage.json 程式碼。

部署

  1. 首先,執行下列指令,建立要用來產生事件的 Cloud Storage bucket:
BUCKET="gs://gcf-gen2-storage-{{{ project_0.project_id | PROJECT_ID }}}" gsutil mb -l {{{project_0.default_region|Region}}} $BUCKET
  1. 輸入下列指令來部署函式:
gcloud functions deploy nodejs-storage-function \ --gen2 \ --runtime nodejs22 \ --entry-point helloStorage \ --source . \ --region {{{project_0.default_region|Region}}} \ --trigger-bucket $BUCKET \ --trigger-location {{{project_0.default_region|Region}}} \ --max-instances 1 注意:如前所述,若收到 permissions error 訊息,請稍候幾分鐘,再試著重新部署。API 可能要過幾分鐘才會啟用。
  1. 部署完畢後,請確認函式是否出現在「Cloud Run」控制台中。

兩個函式

測試

  1. 執行下列指令,將檔案上傳至 bucket 來測試函式:
echo "Hello World" > random.txt gsutil cp random.txt $BUCKET/random.txt
  1. 執行下列指令。記錄中應會顯示收到的 CloudEvent:
gcloud functions logs read nodejs-storage-function \ --region {{{project_0.default_region|Region}}} --gen2 --limit=100 --format "value(log)" 注意:可能需要一點時間才會產生記錄。

輸出結果應該會類似下列內容。

輸出內容:

} traceparent: '00-c74cb472d1e78f7225b6f617a31d9c08-96f0380bb62be2c1-01' }, etag: 'CKOx1L3wofoCEAE=' crc32c: 'R1jUOQ==', mediaLink: 'https://storage.googleapis.com/download/storage/v1/b/gcf-gen2-storage-qwiklabs-gcp-00-101b4b9ca9bb/o/random.txt?generation=1663625646643363&alt=media', md5Hash: '5Z/5eUEET4XfUpfhwwLSYA==', size: '12', timeStorageClassUpdated: '2022-09-19T22:14:06.657Z', storageClass: 'STANDARD', updated: '2022-09-19T22:14:06.657Z', timeCreated: '2022-09-19T22:14:06.657Z', contentType: 'text/plain', metageneration: '1', generation: '1663625646643363', bucket: 'gcf-gen2-storage-qwiklabs-gcp-00-101b4b9ca9bb', name: 'random.txt', selfLink: 'https://www.googleapis.com/storage/v1/b/gcf-gen2-storage-qwiklabs-gcp-00-101b4b9ca9bb/o/random.txt', id: 'gcf-gen2-storage-qwiklabs-gcp-00-101b4b9ca9bb/random.txt/1663625646643363', kind: 'storage#object', data: { bucket: 'gcf-gen2-storage-qwiklabs-gcp-00-101b4b9ca9bb', time: '2022-09-19T22:14:06.657124Z', subject: 'objects/random.txt', type: 'google.cloud.storage.object.v1.finalized', specversion: '1.0', source: '//storage.googleapis.com/projects/_/buckets/gcf-gen2-storage-qwiklabs-gcp-00-101b4b9ca9bb', id: '5693030851428996', { Cloud Storage event with Node.js in GCF 2nd gen!

點選「Check my progress」,確認目標已達成。 建立 Cloud Storage 函式

工作 4:建立 Cloud 稽核記錄函式

在本節中,您將建立 Node.js 函式,在 Compute Engine VM 執行個體建立時接收 Cloud 稽核記錄事件。該函式會回應事件,為新建立的 VM 加上標籤,註明 VM 的建立者。

判斷新建立的 Compute Engine VM

每當 VM 建立時,Compute Engine 會產生兩個稽核記錄。

第一個是在 VM 開始建立時產生,如下圖所示:

稽核記錄 1

第二個是在 VM 建立後產生,如下圖所示:

稽核記錄 2

請注意,operation 欄位的值分別為 first: truelast: true。第二個稽核記錄包含為執行個體加上標籤所需的全部資訊,因此您可以使用 last: true 旗標,在 Cloud Run 函式偵測該記錄。

設定

您必須為 Eventarc 啟用稽核記錄,並使用具備 eventarc.eventReceiver 角色的服務帳戶,才能使用 Cloud 稽核記錄函式。

  1. 從「導覽選單」依序前往「IAM 與管理」>「稽核記錄」
注意:您可以忽略缺少 resourcemanager.folders.getIamPolicy 權限的警告訊息。
  1. 找到「Compute Engine API」,然後勾選旁邊的核取方塊。如果找不到,請在下一頁搜尋。

  2. 在右側的資訊窗格中,勾選「管理員讀取」、「資料讀取」和「資料寫入」記錄類型旁的核取方塊,然後點選「儲存」。

勾選「管理員讀取」、「資料讀取」、「資料寫入」

  1. eventarc.eventReceiver IAM 角色授予預設的 Compute Engine 服務帳戶:
gcloud projects add-iam-policy-binding {{{ project_0.project_id | PROJECT_ID }}} \ --member serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role roles/eventarc.eventReceiver

取得程式碼

  1. 執行下列程式碼,複製包含應用程式的存放區:
cd ~ git clone https://github.com/GoogleCloudPlatform/eventarc-samples.git
  1. 在 Cloud Shell 工具列點選「開啟編輯器」按鈕。

  2. 在檔案總管中,依序前往「eventarc-samples」>「gce-vm-labeler」>「gcf」>「nodejs」>「index.js」

  3. 開啟 index.js 檔案。這項動作會啟用 Gemini Code Assist,編輯器右上角出現 Gemini Code Assist:智慧動作 圖示時,代表該工具已啟用。

  4. 點選「Gemini Code Assist: Smart Actions」Gemini Code Assist:智慧動作 圖示,然後選取「Explain this」

  5. Gemini Code Assist 會開啟對話窗格,並預先填入提示詞 Explain this。在 Code Assist 對話的內嵌文字方塊中,將預先填入的提示詞改成下列內容,然後點選「Send」

你是 Cymbal AI 的資深雲端開發人員,有位新團隊成員不熟悉這個 Cloud 函式的實作方式。請詳細解釋「index.js」檔案,並說明這個檔案在應用程式程式碼中扮演的關鍵角色。 如有建議改善的地方,請勿直接更新檔案內容。

index.js 檔案包含應用程式程式碼,會接收包裝成 CloudEvent 的稽核記錄,然後擷取 Compute Engine VM 執行個體詳細資料,並在 VM 執行個體加上標籤。您也可以自行深入研究 index.js

Gemini Code Assist 會在對話視窗中,詳細解釋 index.js 程式碼。

部署

  1. 在 Cloud Shell 終端機執行下列指令,前往應用程式目錄:
cd ~/eventarc-samples/gce-vm-labeler/gcf/nodejs
  1. 執行下列指令,透過 gcloud 部署函式,做法和之前一樣。請留意函式如何使用 --trigger-event-filters 旗標篩選稽核記錄,找出 Compute Engine 插入作業:
gcloud functions deploy gce-vm-labeler \ --gen2 \ --runtime nodejs22 \ --entry-point labelVmCreation \ --source . \ --region {{{project_0.default_region|Region}}} \ --trigger-event-filters="type=google.cloud.audit.log.v1.written,serviceName=compute.googleapis.com,methodName=beta.compute.instances.insert" \ --trigger-location {{{project_0.default_region|Region}}} \ --max-instances 1 注意:雖然稽核記錄函式觸發條件會立即建立,但最多可能需要 10 分鐘才會正常運作。

點選「Check my progress」,確認目標已達成。 建立 Cloud 稽核記錄函式

測試

為測試稽核記錄函式,您必須在 Cloud 控制台建立 Compute Engine VM (也可以使用 gcloud 建立 VM,但這似乎不會產生稽核記錄)。

  1. 從「導覽選單」依序前往「Compute Engine」>「VM 執行個體」

  2. 點選「建立執行個體」,將執行個體的「名稱」設為「instance-1」,並將「可用區」設為

  3. 其餘欄位均保留預設值,然後點選「建立」

VM 建立完畢後,Cloud 控制台的「基本資訊」專區應該會顯示函式為 VM 加上的 creator 標籤。

creator 標籤

  1. 使用下列指令驗證:
gcloud compute instances describe instance-1 --zone {{{project_0.default_zone | "Zone"}}}

輸出內容應會顯示標籤,如下例所示。

輸出內容範例:

... labelFingerprint: ULU6pAy2C7s= labels: creator: student-02-19b599a0f901 ...

點選「Check my progress」,確認目標已達成。 建立 VM 執行個體

  1. 執行下列指令來刪除 VM。出現提示時,請輸入 Y 來確認操作。
gcloud compute instances delete instance-1 --zone {{{project_0.default_zone | "Zone"}}}

工作 5:部署不同的修訂版本

Cloud Run functions 支援多個函式修訂版本,可將流量分配給不同修訂版本,以及將函式復原至先前的版本。在本節中,您將部署 Cloud Run 函式的兩個修訂版本。

建立

  1. 執行下列指令,為應用程式建立資料夾和檔案,並前往該資料夾:
mkdir ~/hello-world-colored && cd $_ touch main.py touch requirements.txt
  1. 將下列程式碼加入 hello-world-colored/main.py 檔案,建立 Python 函式來讀取顏色環境變數,並以該背景顏色回應 Hello World
import os color = os.environ.get('COLOR') def hello_world(request): return f'<body style="background-color:{color}"><h1>Hello World!</h1></body>'

部署

  1. 執行下列指令,部署函式的第一個修訂版本,並將背景設為橘色:
COLOR=orange gcloud functions deploy hello-world-colored \ --gen2 \ --runtime python39 \ --entry-point hello_world \ --source . \ --region {{{project_0.default_region|Region}}} \ --trigger-http \ --allow-unauthenticated \ --update-env-vars COLOR=$COLOR \ --max-instances 1

此時,如果在瀏覽器查看 HTTP 觸發條件 (先前執行部署指令後輸出的 URI) 來測試函式,應該會看到背景為橘色的 Hello World

背景為橘色的 Hello World

  1. 前往「Cloud Run functions」頁面,系統會將您重新導向至「Cloud Run」控制台,接著點選「hello-world-colored」函式。

  2. 點選「編輯及部署新的修訂版本」

  3. 所有設定均保留預設值,接著向下捲動並選取「變數與密鑰」分頁標籤。在「環境變數」專區,將「COLOR」環境變數的值更新為 yellow

函式修訂版本

  1. 點選「部署」

由於這是最新修訂版本,因此測試函式時,應該會看到背景為黃色的 Hello World

背景為黃色的 Hello World

點選「Check my progress」,確認目標已達成。 部署不同的修訂版本

工作 6:設定執行個體數量下限

在 Cloud Run functions 中,您可以指定至少有多少函式執行個體維持在暖機狀態,隨時可處理要求。這樣做有助於減少冷啟動次數。在本節中,您將部署初始化速度緩慢的函式,並觀察冷啟動問題。接著,部署執行個體數量下限設為 1 的函式,避免冷啟動發生。

建立

  1. 執行下列指令,為應用程式建立資料夾和檔案,並前往該資料夾:
mkdir ~/min-instances && cd $_ touch main.go touch go.mod
  1. 將下列程式碼加入 min-instances/main.go 檔案。這項 Go 服務有 init 函式,會休眠 10 秒,模擬初始化時間較長的情境。另外還有 HelloWorld 函式,會回應 HTTP 呼叫:
package p import ( "fmt" "net/http" "time" ) func init() { time.Sleep(10 * time.Second) } func HelloWorld(w http.ResponseWriter, r *http.Request) { fmt.Fprint(w, "Slow HTTP Go in GCF 2nd gen!") }
  1. 將下列程式碼加入 min-instances/go.mod 檔案,指定模組路徑和 Go 語言版本:
module example.com/mod go 1.23

部署

  1. 執行下列指令,部署函式的第一個修訂版本,並採用執行個體數量下限預設值 0:
gcloud functions deploy slow-function \ --gen2 \ --runtime go123 \ --entry-point HelloWorld \ --source . \ --region {{{project_0.default_region|Region}}} \ --trigger-http \ --allow-unauthenticated \ --max-instances 4
  1. 使用下列指令測試函式:
gcloud functions call slow-function \ --gen2 --region {{{project_0.default_region|Region}}}

您應該會發現第一次呼叫時,系統延遲了 10 秒 (冷啟動) 才顯示訊息。之後如果再呼叫,應會立即傳回結果。

Slow HTTP Go in GCF 2nd gen!

設定執行個體數量下限

為解決第一次要求時出現的冷啟動問題,請按照下列步驟,將 --min-instances 旗標設為 1 並重新部署函式:

  1. 前往控制台的「Cloud Run」頁面,然後點選「slow-function」服務。

  2. 點選「編輯及部署新的修訂版本」

  3. 在「修訂版本資源調度」專區,將「執行個體數量下限」設為 1,「執行個體數量上限」設為 4

  4. 其餘欄位保留預設值,然後點選「部署」

測試

  • 再次執行下列指令來測試函式:
gcloud functions call slow-function \ --gen2 --region {{{project_0.default_region|Region}}}

現在應該不會出現第一次要求時的 10 秒延遲。由於設定了執行個體數量下限,因此第一次叫用 (長時間未呼叫之後) 所造成的冷啟動問題已解決!請參閱說明文件,進一步瞭解如何保留最少數量的執行個體。

點選「Check my progress」,確認目標已達成。 設定執行個體數量下限

工作 7:建立具備並行處理功能的函式

在 Cloud Run functions 中,函式執行個體預設一次只處理一項要求,但您可以指定執行個體可同時處理的並行要求數量。如此一來,每當平行處理要求時,就不必建立新的函式執行個體,有助於避免冷啟動發生。

本節將使用上個步驟中初始化速度緩慢的函式。您會向該函式發送 10 項要求,並再度觀察冷啟動問題 (系統需要建立新的函式執行個體來處理這些要求)。

為解決冷啟動問題,還得部署另一個函式,將並行處理數量的值設為 100。您會發現這 10 項要求不再引發冷啟動問題,且單一函式執行個體即可處理所有要求。

測試 (不設定並行處理數量)

  1. 在 Cloud Shell 使用下列安裝指令,安裝 hey
sudo apt install hey
  1. 執行下列指令,取得函式的網址並儲存為環境變數:
SLOW_URL=$(gcloud functions describe slow-function --region {{{project_0.default_region|Region}}} --gen2 --format="value(serviceConfig.uri)")
  1. 使用名為 hey 的開放原始碼基準化工具,向回應較慢的函式發送 10 項並行要求。
hey -n 10 -c 10 $SLOW_URL

查看 hey 的輸出內容,應該會發現部分要求耗時較長。

輸出內容:

Summary: Total: 10.9053 secs Slowest: 10.9048 secs Fastest: 0.4439 secs Average: 9.7930 secs Requests/sec: 0.9170 Total data: 310 bytes Size/request: 31 bytes Response time histogram: 0.444 [1] |■■■■ 1.490 [0] | 2.536 [0] | 3.582 [0] | 4.628 [0] | 5.674 [0] | 6.720 [0] | 7.767 [0] | 8.813 [0] | 9.859 [0] | 10.905 [9] |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

這是因為系統需要建立更多函式執行個體來處理這些要求。如果查看函式使用的執行個體數量,應該會發現系統在某個時間點建立多個執行個體,引發了冷啟動問題。

運作中的執行個體數量圖表

  1. 執行下列指令來刪除函式。出現提示時,請輸入 Y 來確認操作。
gcloud run services delete slow-function --region {{{project_0.default_region | "Region"}}}

部署

  • 執行下列指令,部署與先前函式相同的新函式。部署完畢後,請提高並行處理數量:
gcloud functions deploy slow-concurrent-function \ --gen2 \ --runtime go123 \ --entry-point HelloWorld \ --source . \ --region {{{project_0.default_region|Region}}} \ --trigger-http \ --allow-unauthenticated \ --min-instances 1 \ --max-instances 4

設定並行處理數量

接下來,請將函式底層的 Cloud Run 服務並行處理數量設為 100 (最多可設為 1000),即可確保單一函式執行個體至少能處理 100 項要求。

  1. 透過「導覽選單」前往「Cloud Run」

  2. 點選「slow-concurrent-function」服務。

  3. 點選「編輯及部署新的修訂版本」

  4. 在「資源」專區,將「CPU」設為 1

  5. 在「要求」底下,將「每個執行個體的並行要求數量上限」設為 100

  6. 在「修訂版本資源調度」專區,將「執行個體數量上限」設為 4

  7. 其餘欄位保留預設值,然後點選「部署」

測試 (已設定並行處理數量)

  1. 函式部署完畢後,請執行下列指令,取得新函式的網址並儲存為環境變數:
SLOW_CONCURRENT_URL=$(gcloud functions describe slow-concurrent-function --region {{{project_0.default_region|Region}}} --gen2 --format="value(serviceConfig.uri)")
  1. 接著使用 hey 傳送 10 項並行要求:
hey -n 10 -c 10 $SLOW_CONCURRENT_URL

查看 hey 的輸出內容,應該會發現所有要求的處理速度都很快。

輸出內容:

Summary: Total: 0.0652 secs Slowest: 0.0651 secs Fastest: 0.0619 secs Average: 0.0636 secs Requests/sec: 153.3751 Total data: 280 bytes Size/request: 28 bytes Response time histogram: 0.062 [1] |■■■■■■■■■■■■■■■■■■■■ 0.062 [1] |■■■■■■■■■■■■■■■■■■■■ 0.063 [0] | 0.063 [0] | 0.063 [0] | 0.063 [1] |■■■■■■■■■■■■■■■■■■■■ 0.064 [2] |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 0.064 [2] |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 0.064 [2] |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 0.065 [0] | 0.065 [1] |■■■■■■■■■■■■■■■■■■■■

將並行處理設定值調高後,只需一個函式執行個體,就能處理所有要求,冷啟動問題也隨之消失!詳情請參閱並行處理設定的說明文件

點選「Check my progress」,確認目標已達成。 建立具備並行處理功能的函式

恭喜!

在本實驗室中,您部署了多個 Cloud Run 函式來回應 HTTP 呼叫、Cloud Storage 事件和 Cloud 稽核記錄。接著又對執行這些函式的 Cloud Run 服務,部署多個修訂版本,並設定執行個體數量下限和並行處理數量值,成功解決冷啟動問題。

後續步驟/瞭解詳情

如要進一步瞭解 Cloud Run functions,請參閱下列資源:

Google Cloud 教育訓練與認證

協助您瞭解如何充分運用 Google Cloud 的技術。我們的課程會介紹專業技能和最佳做法,讓您可以快速掌握要領並持續進修。我們提供從基本到進階等級的訓練課程,並有隨選、線上和虛擬課程等選項,方便您抽空參加。認證可協助您驗證及證明自己在 Google Cloud 技術方面的技能和專業知識。

使用手冊上次更新日期:2025 年 8 月 19 日

實驗室上次測試日期:2025 年 10 月 13 日

Copyright 2025 Google LLC 保留所有權利。Google 和 Google 標誌是 Google LLC 的商標,其他公司和產品名稱則有可能是其關聯公司的商標。

准备工作

  1. 实验会创建一个 Google Cloud 项目和一些资源,供您使用限定的一段时间
  2. 实验有时间限制,并且没有暂停功能。如果您中途结束实验,则必须重新开始。
  3. 在屏幕左上角,点击开始实验即可开始

使用无痕浏览模式

  1. 复制系统为实验提供的用户名密码
  2. 在无痕浏览模式下,点击打开控制台

登录控制台

  1. 使用您的实验凭证登录。使用其他凭证可能会导致错误或产生费用。
  2. 接受条款,并跳过恢复资源页面
  3. 除非您已完成此实验或想要重新开始,否则请勿点击结束实验,因为点击后系统会清除您的工作并移除该项目

此内容目前不可用

一旦可用,我们会通过电子邮件告知您

太好了!

一旦可用,我们会通过电子邮件告知您

一次一个实验

确认结束所有现有实验并开始此实验

使用无痕浏览模式运行实验

请使用无痕模式或无痕式浏览器窗口运行此实验。这可以避免您的个人账号与学生账号之间发生冲突,这种冲突可能导致您的个人账号产生额外费用。