GSP659

總覽
經營網站需要建立及管理 VM、叢集、Pod、Service 等,作業可能頗具難度。大型多層式應用程式可以採用這樣的做法,但如果只是想部署網站並讓使用者看到,將會造成龐大的負擔。
Cloud Run 是 Google Cloud 實作的 Google Knative 框架,可讓您管理及部署網站,不必擔心 VM 或純 Kubernetes 部署項目會造成基礎架構負擔。從管理層面來看,這個做法不僅較為簡單,還能讓您在網站沒有收到要求時,將資源調度率降至零。
Cloud Run 將「無伺服器」開發概念導入容器,可透過您自己的 Google Kubernetes Engine (GKE) 叢集執行,也能在 Cloud Run 提供的全代管 PaaS 解決方案上執行。在本實驗室中,您將執行後者。
本實驗室包含多個練習,順序與常見雲端開發作業類似,包括:
- 從應用程式建立 Docker 容器
 
- 將容器部署至 Cloud Run
 
- 修改網站
 
- 在不停機的狀態下推出新版本
 
學習內容
本實驗室的學習內容包括:
- 使用 Cloud Build 建構 Docker 映像檔,並上傳至 Artifact Registry
 
- 將 Docker 映像檔部署至 Cloud Run
 
- 管理 Cloud Run 部署作業
 
- 為 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:複製來源存放區
因為本實驗室的重點是建立 Docker 映像檔,並部署至 Cloud Run,您將部署現成的網站,只需複製原始碼即可。
- 在 Cloud Shell 執行下列指令,複製 Git 存放區並切換至適當的目錄:
 
git clone https://github.com/googlecodelabs/monolith-to-microservices.git
cd ~/monolith-to-microservices
- 安裝 NodeJS 依附元件,以便在部署前測試應用程式:
 
./setup.sh
這項作業會在幾分鐘內完成。完成後,您會看到成功訊息。
- 執行下列指令啟動網路伺服器,以測試應用程式:
 
cd ~/monolith-to-microservices/monolith
npm start
輸出內容:
Monolith listening on port 8080!
- 點選「網頁預覽」圖示,並選取「透過以下通訊埠預覽:8080」。
 

系統應會開啟新視窗,顯示 Fancy Store 網頁的實際運作情形。

- 看完網站後請關閉視窗,接著在 Cloud Shell 按下 CTRL+C 鍵,停止網路伺服器程序。
 
工作 2:使用 Cloud Build 建立 Docker 容器
準備好原始碼檔案後,就可以開始將應用程式 Docker 化了!
一般來說,您必須採取兩個步驟:建構 Docker 容器,然後將容器推送至存放區,以便儲存映像檔供 GKE 提取。Cloud Build 可讓您透過單一指令建構 Docker 容器,並將映像檔放入 Artifact Registry!
Cloud Build 會壓縮目錄中的檔案,並移至 Cloud Storage bucket。接著,建構程序會從 bucket 擷取所有檔案,並使用同個目錄中的 Dockerfile 執行 Docker 建構程序。
建立目標 Docker 存放區
您必須先建立存放區,才能向存放區推送映像檔。推送映像檔不會建立存放區,且 Cloud Build 服務帳戶並沒有建立存放區的權限。
- 
在控制台的搜尋欄位中搜尋 Artifact Registry,然後點選 Artifact Registry 搜尋結果。
 
- 
點選「Create Repository」。
 
- 
指定 monolith-demo 做為存放區名稱。
 
- 
選擇「Docker」做為格式。
 
- 
在「位置類型」下方,選取「區域」,接著選擇位置:。
 
- 
點選「建立」。
 
設定驗證機制
在推送或提取映像檔前,請先設定 Docker,透過 Google Cloud CLI 驗證傳送至 Artifact Registry 的要求。
- 如要為  區域中的 Docker 存放區設定驗證機制,請在 Cloud Shell 中執行下列指令:
 
gcloud auth configure-docker {{{project_0.default_region | Region}}}-docker.pkg.dev
這項指令會更新 Docker 設定,您現在可以在 Google Cloud 專案中連結 Artifact Registry,以推送及提取映像檔。
部署映像檔
現在要部署先前建構的映像檔。
- 首先,您需要啟用 Cloud Build、Artifact Registry 和 Cloud Run API。在 Cloud Shell 執行下列指令即可啟用:
 
gcloud services enable artifactregistry.googleapis.com \
    cloudbuild.googleapis.com \
    run.googleapis.com
- 啟用 API 後,請執行下列指令來啟動建構程序:
 
gcloud builds submit --tag {{{project_0.default_region | Region}}}-docker.pkg.dev/${GOOGLE_CLOUD_PROJECT}/monolith-demo/monolith:1.0.0
注意:這個程序需要幾分鐘才能完成。
- 如要查看建構歷程記錄或即時監看程序,請在控制台中搜尋 Cloud Build,然後點選 Cloud Build 搜尋結果。
 
- 在「歷史記錄」頁面中,您會看到所有建構作業的清單,其中應該只有您剛建立的建構作業。
 


點選「Check my progress」,確認目標已達成。
使用 Google Cloud Build 建立 Docker 容器
工作 3:將容器部署至 Cloud Run
您已將網站容器化,並將容器推送至 Artifact Registry,現在該將容器部署至 Cloud Run 了!
部署至 Cloud Run 的方法有兩種:
- 
代管 Cloud Run:平台即服務模型,所有容器生命週期都由 Cloud Run 產品本身管理。本實驗室將採用這種做法。
 
- 
Cloud Run on GKE:Cloud Run 加上額外的控制層,可讓您從 GKE 攜帶自己的叢集和 Pod。詳情請參閱這篇文章。
 
- 執行下列指令,將映像檔部署至 Cloud Run:
 
gcloud run deploy monolith --image {{{project_0.default_region | Region}}}-docker.pkg.dev/${GOOGLE_CLOUD_PROJECT}/monolith-demo/monolith:1.0.0 --region {{{project_0.default_region | Region}}}
- 系統詢問是否允許未經驗證就叫用 
[monolith]時,請輸入 Y。 
點選「Check my progress」,確認目標已達成。
將容器部署至 Cloud Run
確認部署項目已建立
- 執行下列指令,確認部署項目已順利建立:
 
gcloud run services list
注意:Pod 狀態可能需要幾分鐘才會變成 Running。
輸出內容:
✔
SERVICE: monolith
REGION: {{{project_0.default_region | Region}}}
URL: https://monolith-2cxtmp4m2q-uc.a.run.app
LAST DEPLOYED BY: student-02-aa7a5aed362d@qwiklabs.net
LAST DEPLOYED AT: 2022-08-19T19:16:14.351981Z
這個輸出內容顯示了幾件事。您會看到部署項目、部署者 (您的電子郵件地址) 和可用來存取應用程式的網址。看來一切都順利建立完成!
- 點選服務清單中提供的網址。您應該會看到與本機預覽相同的網站。
 
注意:您也可以在控制台的「導覽」選單中前往「Cloud Run」,查看 Cloud Run 部署項目。
工作 4:建立並行處理量較低的修訂版本
在本節中,您將再次部署應用程式,但這次會調整其中一個參數。
根據預設,Cloud Run 應用程式的並行值為 80,也就是每個容器執行個體一次最多可處理 80 個要求。這與函式即服務 (FaaS) 模型大相逕庭,後者是單一執行個體一次處理一個要求。
- 執行下列指令,以並行值 1 重新部署相同的容器映像檔 (僅供測試),並查看會發生什麼情況:
 
gcloud run deploy monolith --image {{{project_0.default_region | Region}}}-docker.pkg.dev/${GOOGLE_CLOUD_PROJECT}/monolith-demo/monolith:1.0.0 --region {{{project_0.default_region | Region}}} --concurrency 1
- 如要查看詳細資料,請依序點選「導覽選單」>「Cloud Run」>「monolith」服務:
 

- 在「Service Details」頁面,點選「修訂版本」分頁標籤。現在應該會看到 2 個修訂版本。
 
最新部署項目的「詳細資料」位於右側。

您會看到並行值已降至「1」。

雖然這個設定檔足以進行測試,但在大多數正式環境中,您會使用可支援多個並行要求的容器。
點選「Check my progress」,確認目標已達成。
建立並行處理量較低的修訂版本
接著,您可以還原原始並行設定,不必重新部署。您可以將並行值設回預設的「80」,也可以直接設為「0」,這樣就會移除所有並行限制,並設為預設上限 (剛好是 80)。
- 執行下列指令,將並行值設為 
80,更新目前的修訂版本: 
gcloud run deploy monolith --image {{{project_0.default_region | Region}}}-docker.pkg.dev/${GOOGLE_CLOUD_PROJECT}/monolith-demo/monolith:1.0.0 --region {{{project_0.default_region | Region}}} --concurrency 80
您會發現系統已建立另一個修訂版本,流量也已重新導向,而且並行值回到 80。
注意:
如要查看最新資訊,可能需要離開「修訂版本」分頁標籤,然後再返回。
工作 5:變更網站內容
情境:您的行銷團隊想請您變更網站首頁,希望其中包含更多公司簡介與銷售產品等資訊。
任務:在首頁加入一些文字,滿足行銷團隊要求!看來有某位開發人員已做了變更,檔案名稱為 index.js.new。您可以直接將這個檔案複製到 index.js,網站應該就會反映新內容。按照下方說明操作,進行適當變更。
- 執行下列指令,將更新後的檔案複製為正確檔名:
 
cd ~/monolith-to-microservices/react-app/src/pages/Home
mv index.js.new index.js
- 顯示檔案內容來確認變更:
 
cat ~/monolith-to-microservices/react-app/src/pages/Home/index.js
顯示的程式碼應如下所示:
/*
Copyright 2019 Google LLC
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
    https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
import React from "react";
import { Box, Paper, Typography } from "@mui/material";
export default function Home() {
  return (
    <Box sx={{ flexGrow: 1 }}>
      <Paper
        elevation={3}
        sx={{
          width: "800px",
          margin: "0 auto",
          padding: (theme) => theme.spacing(3, 2),
        }}
      >
        <Typography variant="h5">Fancy Fashion & Style Online</Typography>
        <br />
        <Typography variant="body1">
          Tired of mainstream fashion ideas, popular trends and societal norms?
          This line of lifestyle products will help you catch up with the Fancy
          trend and express your personal style. Start shopping Fancy items now!
        </Typography>
      </Paper>
    </Box>
  );
}
您已更新 React 元件,但需要建構 React 應用程式以產生靜態檔案。
- 執行下列指令即可建構 React 應用程式,並將其複製到單體公開目錄:
 
cd ~/monolith-to-microservices/react-app
npm run build:monolith
程式碼更新完畢後,請重新建構 Docker 容器,並發布至 Artifact Registry。您可以使用與先前相同的指令,但這次要更新版本標籤。
- 執行下列指令,使用更新後的映像檔版本 2.0.0 觸發新的 Cloud Build:
 
cd ~/monolith-to-microservices/monolith
gcloud builds submit --tag {{{project_0.default_region | Region}}}-docker.pkg.dev/${GOOGLE_CLOUD_PROJECT}/monolith-demo/monolith:2.0.0
在下一節中,您將在不停機的情況下,使用這個映像檔更新應用程式。
點選「Check my progress」,確認目標已達成。
變更網站內容
工作 6:更新網站,完全不必停機
變更已完成,行銷團隊很滿意您的更新!現在是更新網站的好時機,而且不會中斷使用者的瀏覽體驗。Cloud Run 會將每次部署視為新的「修訂版本」,並先將該版本上線,再將流量重新導向至該版本。
根據預設,服務的最新修訂版本會分配到 100% 的傳入流量。您可以使用「Routes」將不同比例的流量分配給服務中的不同修訂版本。請按照下列指示更新網站。
- 執行下列指令,重新部署服務,將映像檔更新為新版本:
 
gcloud run deploy monolith --image {{{project_0.default_region | Region}}}-docker.pkg.dev/${GOOGLE_CLOUD_PROJECT}/monolith-demo/monolith:2.0.0 --region {{{project_0.default_region | Region}}}
點選「Check my progress」,確認目標已達成。
更新網站,完全不必停機
確認部署已更新
- 執行下列指令,確認部署項目已更新:
 
gcloud run services describe monolith --platform managed --region {{{project_0.default_region | Region}}}
輸出內容:
✔ Service monolith in region 
URL:     https://monolith-hl5loimtga-uc.a.run.app
Ingress: all
Traffic:
  100% LATEST (currently monolith-00005-xum)
Last updated on 2022-08-19T18:39:39.885859Z by student-02-9af04e268b9e@qwiklabs.net:
  Revision monolith-00005-xum
  Image:           -docker.pkg.dev/qwiklabs-gcp-00-30d07cf3de5b/monolith-demo/monolith:2.0.0
  Port:            8080
  Memory:          512Mi
  CPU:             1000m
  Service account: 467160385597-compute@developer.gserviceaccount.com
  Concurrency:     80
  Max Instances:   1
  Timeout:         300s
您會看到 Service 現在使用最新版本的映像檔,並部署在新的修訂版本中。
如要確認變更,請前往 Cloud Run 服務的外部網址,重新整理頁面,並注意應用程式標題已更新。
- 執行下列指令,列出服務並查看服務網址:
 
gcloud beta run services list
- 點選服務網址。現在,您的網站應該會顯示您剛才新增至首頁元件的文字!
 

恭喜!
您已成功在 Cloud Run 部署網站,並為網站調度資源及進行更新。
後續步驟/瞭解詳情
如果您不熟悉這些產品,請點選以下連結瞭解詳情:
使用手冊上次更新日期:2024 年 6 月 9 日
實驗室上次測試日期:2024 年 6 月 9 日
Copyright 2025 Google LLC 保留所有權利。Google 和 Google 標誌是 Google LLC 的商標,其他公司和產品名稱則有可能是其關聯公司的商標。