GSP1089

總覽
Cloud Run functions 是 Google Cloud 的函式即服務 (FaaS) 產品,提供全套進階功能,並採用 Cloud Run 和 Eventarc。透過 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 控制台
- 
點選「Start Lab」按鈕。如果實驗室會產生費用,畫面上會出現選擇付款方式的對話方塊。左側的「Lab Details」窗格會顯示下列項目: 
- 「Open Google Cloud console」按鈕
- 剩餘時間
- 必須在這個研究室中使用的臨時憑證
- 完成這個實驗室所需的其他資訊 (如有)
 
- 
點選「Open Google Cloud console」;如果使用 Chrome 瀏覽器,也能按一下滑鼠右鍵,選取「在無痕視窗中開啟連結」。 接著,實驗室會啟動相關資源,並開啟另一個分頁,顯示「登入」頁面。 提示:您可以在不同的視窗中並排開啟分頁。 注意:如果頁面中顯示「選擇帳戶」對話方塊,請點選「使用其他帳戶」。
- 
如有必要,請將下方的 Username 貼到「登入」對話方塊。 {{{user_0.username | "Username"}}}您也可以在「Lab Details」窗格找到 Username。 
- 
點選「下一步」。 
- 
複製下方的 Password,並貼到「歡迎使用」對話方塊。 {{{user_0.password | "Password"}}}您也可以在「Lab Details」窗格找到 Password。 
- 
點選「下一步」。 重要事項:請務必使用實驗室提供的憑證,而非自己的 Google Cloud 帳戶憑證。
注意:如果使用自己的 Google Cloud 帳戶來進行這個實驗室,可能會產生額外費用。
- 
按過後續的所有頁面: 
- 接受條款及細則。
- 由於這是臨時帳戶,請勿新增救援選項或雙重驗證機制。
- 請勿申請免費試用。
 
Google Cloud 控制台稍後會在這個分頁開啟。
注意:如要使用 Google Cloud 產品和服務,請點選「導覽選單」,或在「搜尋」欄位輸入服務或產品名稱。 
啟動 Cloud Shell
Cloud Shell 是搭載多項開發工具的虛擬機器,提供永久的 5 GB 主目錄,而且在 Google Cloud 中運作。Cloud Shell 提供指令列存取權,方便您使用 Google Cloud 資源。
- 
點按 Google Cloud 控制台頂端的「啟用 Cloud Shell」圖示  。 。
 
- 
系統顯示視窗時,請按照下列步驟操作: 
- 繼續操作 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 鍵自動完成功能。
- (選用) 您可以執行下列指令來列出使用中的帳戶:
gcloud auth list
- 點按「授權」。
輸出內容:
ACTIVE: *
ACCOUNT: {{{user_0.username | "ACCOUNT"}}}
To set the active account, run:
    $ gcloud config set account `ACCOUNT`
- (選用) 您可以使用下列指令來列出專案 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 必須先啟用,才能開始使用。
- 在 Cloud Shell 執行下列指令,啟用 Gemini for Google Cloud API:
gcloud services enable cloudaicompanion.googleapis.com
- 點按 Cloud Shell 工具列中的「開啟編輯器」。
注意:如要開啟 Cloud Shell 編輯器,請點選 Cloud Shell 工具列中的「開啟編輯器」。如要在 Cloud Shell 與程式碼編輯器之間切換,請視需要點選「開啟編輯器」或「開啟終端機」。
- 
在左側窗格中,點按「設定」圖示,然後在「設定」檢視畫面中搜尋「Gemini Code Assist」。 
- 
找到「Geminicodeassist: Enable」,確認已勾選核取方塊,然後關閉「設定」。 
- 
點選畫面底部狀態列中的「Cloud Code - No Project」。 
- 
依指示授權外掛程式。如果系統未自動選取專案,請點按「選取 Google Cloud 專案」,然後選擇 。 
- 
確認狀態列的 Cloud Code 狀態訊息中已顯示 Google Cloud 專案 ()。 
工作 2:建立 HTTP 函式
首先,請建立經過驗證的 Node.js 函式來回應 HTTP 要求,並將逾時設為 10 分鐘,展示如何讓函式有更多時間回應 HTTP 要求。
建立
- 在 Cloud Shell 終端機執行下列指令,為應用程式建立資料夾和檔案,並前往該資料夾:
mkdir ~/hello-http && cd $_
touch index.js && touch package.json
- 
在 Cloud Shell 工具列點選「開啟編輯器」按鈕。 
- 
將下列程式碼加入 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!');
});
- 在 hello-http/package.json檔案加入下列內容,指定依附元件。
{
  "name": "nodejs-functions-gen2-codelab",
  "version": "0.0.1",
  "main": "index.js",
  "dependencies": {
    "@google-cloud/functions-framework": "^2.0.0"
  }
}
- 
在檔案總管開啟 index.js檔案。這項動作會啟用 Gemini Code Assist,編輯器右上角出現 圖示時,代表該工具已啟用。 圖示時,代表該工具已啟用。
 
- 
點選「Gemini Code Assist: Smart Actions」 圖示,然後選取「Explain this」。 圖示,然後選取「Explain this」。
 
- 
Gemini Code Assist 會開啟對話窗格,並預先填入提示詞 Explain this。在 Code Assist 對話的內嵌文字方塊中,將預先填入的提示詞改成下列內容,然後點選「Send」:
 
你是 Cymbal AI 的資深雲端開發人員,有位新團隊成員不熟悉這個 Cloud 函式的實作方式。請詳細解釋「hello-http」資料夾中的「index.js」和「package.json」檔案,並說明這些檔案在應用程式程式碼中扮演的關鍵角色。如有建議改善的地方,請勿直接更新檔案內容。Gemini Code Assist 會在對話視窗中,詳細解釋 index.js 和 package.json 程式碼。
部署
- 在 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 要求。
- 函式部署完畢後,在搜尋列輸入 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.publisherIAM 角色授予 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建立
- 執行下列指令,為應用程式建立資料夾和檔案,並前往該資料夾:
mkdir ~/hello-storage && cd $_
touch index.js && touch package.json
- 
在 Cloud Shell 工具列點選「開啟編輯器」按鈕。 
- 
將下列程式碼加入 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);
});
- 在 hello-storage/package.json檔案加入下列內容,指定依附元件:
{
  "name": "nodejs-functions-gen2-codelab",
  "version": "0.0.1",
  "main": "index.js",
  "dependencies": {
    "@google-cloud/functions-framework": "^2.0.0"
  }
}
- 
在檔案總管中,開啟「hello-storage」資料夾內的 index.js檔案。這項動作會啟用 Gemini Code Assist,編輯器右上角出現 圖示時,代表該工具已啟用。 圖示時,代表該工具已啟用。
 
- 
點選「Gemini Code Assist: Smart Actions」 圖示,然後選取「Explain this」。 圖示,然後選取「Explain this」。
 
- 
Gemini Code Assist 會開啟對話窗格,並預先填入提示詞 Explain this。在 Code Assist 對話的內嵌文字方塊中,將預先填入的提示詞改成下列內容,然後點選「Send」:
 
你是 Cymbal AI 的資深雲端開發人員,有位新團隊成員不熟悉這個 Cloud 函式的實作方式。請詳細解釋「hello-storage」資料夾中的「index.js」和「package.json」檔案,並說明這些檔案在應用程式程式碼中扮演的關鍵角色。
如有建議改善的地方,請勿直接更新檔案內容。Gemini Code Assist 會在對話視窗中,詳細解釋 index.js 和 package.json 程式碼。
部署
- 首先,執行下列指令,建立要用來產生事件的 Cloud Storage bucket:
BUCKET="gs://gcf-gen2-storage-{{{ project_0.project_id | PROJECT_ID }}}"
gsutil mb -l {{{project_0.default_region|Region}}} $BUCKET
- 輸入下列指令來部署函式:
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 可能要過幾分鐘才會啟用。
- 部署完畢後,請確認函式是否出現在「Cloud Run」控制台中。

測試
- 執行下列指令,將檔案上傳至 bucket 來測試函式:
echo "Hello World" > random.txt
gsutil cp random.txt $BUCKET/random.txt
- 執行下列指令。記錄中應會顯示收到的 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 開始建立時產生,如下圖所示:

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

請注意,operation 欄位的值分別為 first: true 和 last: true。第二個稽核記錄包含為執行個體加上標籤所需的全部資訊,因此您可以使用 last: true 旗標,在 Cloud Run 函式偵測該記錄。
設定
您必須為 Eventarc 啟用稽核記錄,並使用具備 eventarc.eventReceiver 角色的服務帳戶,才能使用 Cloud 稽核記錄函式。
- 從「導覽選單」依序前往「IAM 與管理」>「稽核記錄」。
注意:您可以忽略缺少resourcemanager.folders.getIamPolicy 權限的警告訊息。
- 
找到「Compute Engine API」,然後勾選旁邊的核取方塊。如果找不到,請在下一頁搜尋。 
- 
在右側的資訊窗格中,勾選「管理員讀取」、「資料讀取」和「資料寫入」記錄類型旁的核取方塊,然後點選「儲存」。 

- 將 eventarc.eventReceiverIAM 角色授予預設的 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取得程式碼
- 執行下列程式碼,複製包含應用程式的存放區:
cd ~
git clone https://github.com/GoogleCloudPlatform/eventarc-samples.git
- 
在 Cloud Shell 工具列點選「開啟編輯器」按鈕。 
- 
在檔案總管中,依序前往「eventarc-samples」>「gce-vm-labeler」>「gcf」>「nodejs」>「index.js」。 
- 
開啟 index.js檔案。這項動作會啟用 Gemini Code Assist,編輯器右上角出現 圖示時,代表該工具已啟用。 圖示時,代表該工具已啟用。
 
- 
點選「Gemini Code Assist: Smart Actions」 圖示,然後選取「Explain this」。 圖示,然後選取「Explain this」。
 
- 
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 程式碼。
部署
- 在 Cloud Shell 終端機執行下列指令,前往應用程式目錄:
cd ~/eventarc-samples/gce-vm-labeler/gcf/nodejs
- 執行下列指令,透過 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,但這似乎不會產生稽核記錄)。
- 
從「導覽選單」依序前往「Compute Engine」>「VM 執行個體」。 
- 
點選「建立執行個體」,將執行個體的「名稱」設為「instance-1」,並將「可用區」設為 。 
- 
其餘欄位均保留預設值,然後點選「建立」。 
VM 建立完畢後,Cloud 控制台的「基本資訊」專區應該會顯示函式為 VM 加上的 creator 標籤。

- 使用下列指令驗證:
gcloud compute instances describe instance-1 --zone {{{project_0.default_zone | "Zone"}}}輸出內容應會顯示標籤,如下例所示。
輸出內容範例:
...
labelFingerprint: ULU6pAy2C7s=
labels:
  creator: student-02-19b599a0f901
...
點選「Check my progress」,確認目標已達成。
建立 VM 執行個體
- 執行下列指令來刪除 VM。出現提示時,請輸入 Y來確認操作。
gcloud compute instances delete instance-1 --zone {{{project_0.default_zone | "Zone"}}}工作 5:部署不同的修訂版本
Cloud Run functions 支援多個函式修訂版本,可將流量分配給不同修訂版本,以及將函式復原至先前的版本。在本節中,您將部署 Cloud Run 函式的兩個修訂版本。
建立
- 執行下列指令,為應用程式建立資料夾和檔案,並前往該資料夾:
mkdir ~/hello-world-colored && cd $_
touch main.py
touch requirements.txt
- 將下列程式碼加入 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>'部署
- 執行下列指令,部署函式的第一個修訂版本,並將背景設為橘色:
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:

- 
前往「Cloud Run functions」頁面,系統會將您重新導向至「Cloud Run」控制台,接著點選「hello-world-colored」函式。 
- 
點選「編輯及部署新的修訂版本」。 
- 
所有設定均保留預設值,接著向下捲動並選取「變數與密鑰」分頁標籤。在「環境變數」專區,將「COLOR」環境變數的值更新為 yellow。
 

- 點選「部署」。
由於這是最新修訂版本,因此測試函式時,應該會看到背景為黃色的 Hello World:

點選「Check my progress」,確認目標已達成。
部署不同的修訂版本
工作 6:設定執行個體數量下限
在 Cloud Run functions 中,您可以指定至少有多少函式執行個體維持在暖機狀態,隨時可處理要求。這樣做有助於減少冷啟動次數。在本節中,您將部署初始化速度緩慢的函式,並觀察冷啟動問題。接著,部署執行個體數量下限設為 1 的函式,避免冷啟動發生。
建立
- 執行下列指令,為應用程式建立資料夾和檔案,並前往該資料夾:
mkdir ~/min-instances && cd $_
touch main.go
touch go.mod
- 將下列程式碼加入 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!")
}
- 將下列程式碼加入 min-instances/go.mod檔案,指定模組路徑和 Go 語言版本:
module example.com/mod
go 1.23部署
- 執行下列指令,部署函式的第一個修訂版本,並採用執行個體數量下限預設值 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
- 使用下列指令測試函式:
gcloud functions call slow-function \
  --gen2 --region {{{project_0.default_region|Region}}}您應該會發現第一次呼叫時,系統延遲了 10 秒 (冷啟動) 才顯示訊息。之後如果再呼叫,應會立即傳回結果。
Slow HTTP Go in GCF 2nd gen!
設定執行個體數量下限
為解決第一次要求時出現的冷啟動問題,請按照下列步驟,將 --min-instances 旗標設為 1 並重新部署函式:
- 
前往控制台的「Cloud Run」頁面,然後點選「slow-function」服務。 
- 
點選「編輯及部署新的修訂版本」。 
- 
在「修訂版本資源調度」專區,將「執行個體數量下限」設為 1,「執行個體數量上限」設為4。
 
- 
其餘欄位保留預設值,然後點選「部署」。 
測試
gcloud functions call slow-function \
  --gen2 --region {{{project_0.default_region|Region}}}
現在應該不會出現第一次要求時的 10 秒延遲。由於設定了執行個體數量下限,因此第一次叫用 (長時間未呼叫之後) 所造成的冷啟動問題已解決!請參閱說明文件,進一步瞭解如何保留最少數量的執行個體。
點選「Check my progress」,確認目標已達成。
設定執行個體數量下限
工作 7:建立具備並行處理功能的函式
在 Cloud Run functions 中,函式執行個體預設一次只處理一項要求,但您可以指定執行個體可同時處理的並行要求數量。如此一來,每當平行處理要求時,就不必建立新的函式執行個體,有助於避免冷啟動發生。
本節將使用上個步驟中初始化速度緩慢的函式。您會向該函式發送 10 項要求,並再度觀察冷啟動問題 (系統需要建立新的函式執行個體來處理這些要求)。
為解決冷啟動問題,還得部署另一個函式,將並行處理數量的值設為 100。您會發現這 10 項要求不再引發冷啟動問題,且單一函式執行個體即可處理所有要求。
測試 (不設定並行處理數量)
- 在 Cloud Shell 使用下列安裝指令,安裝 hey:
sudo apt install hey
- 執行下列指令,取得函式的網址並儲存為環境變數:
SLOW_URL=$(gcloud functions describe slow-function --region {{{project_0.default_region|Region}}} --gen2 --format="value(serviceConfig.uri)")
- 使用名為 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]    |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
這是因為系統需要建立更多函式執行個體來處理這些要求。如果查看函式使用的執行個體數量,應該會發現系統在某個時間點建立多個執行個體,引發了冷啟動問題。

- 執行下列指令來刪除函式。出現提示時,請輸入 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 項要求。
- 
透過「導覽選單」前往「Cloud Run」。 
- 
點選「slow-concurrent-function」服務。 
- 
點選「編輯及部署新的修訂版本」。 
- 
在「資源」專區,將「CPU」設為 1。
 
- 
在「要求」底下,將「每個執行個體的並行要求數量上限」設為 100。
 
- 
在「修訂版本資源調度」專區,將「執行個體數量上限」設為 4。
 
- 
其餘欄位保留預設值,然後點選「部署」。 
測試 (已設定並行處理數量)
- 函式部署完畢後,請執行下列指令,取得新函式的網址並儲存為環境變數:
SLOW_CONCURRENT_URL=$(gcloud functions describe slow-concurrent-function --region {{{project_0.default_region|Region}}} --gen2 --format="value(serviceConfig.uri)")
- 接著使用 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 的商標,其他公司和產品名稱則有可能是其關聯公司的商標。