实验设置说明和要求
保护您的账号和进度。请务必在无痕浏览器窗口中,使用实验凭证运行此实验。

部署連線至 Cloud Spanner 執行個體的現代化網頁應用程式

实验 1 小时 30 分钟 universal_currency_alt 1 积分 show_chart 入门级
info 此实验可能会提供 AI 工具来支持您学习。
此内容尚未针对移动设备进行优化。
为获得最佳体验,请在桌面设备上访问通过电子邮件发送的链接。

GSP1051

Google Cloud 自學實驗室標誌

總覽

Cloud Spanner 是 Google 全代管、可水平擴充的關聯式資料庫服務。金融服務、遊戲、零售業和許多其他產業的客戶,都將最嚴苛的工作負載託付給這項服務,確保大規模作業的一致性和可用性。

在本實驗室中,您將建構並部署連至 Cloud Spanner 執行個體的 Node.js 應用程式。Node.js 應用程式是名為 OmegaTrade 的股價圖表工具,會將股價儲存在 Cloud Spanner,並透過 Google Charts 呈現圖表。

後端服務使用 Node.js Express 架構,並透過預設連線集區、工作階段和逾時功能連線至 Cloud Spanner。

學習內容

  • 設定專案環境
  • 下載並檢查應用程式程式碼
  • 部署後端應用程式元件
  • 將股票交易範例資料匯入資料庫
  • 部署前端應用程式元件
  • 在 OmegaTrade 應用程式中執行操作

設定和需求

瞭解以下事項後,再點選「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 總覽指南

Cloud Spanner 執行個體

為了方便您更快完成本實驗室,系統已自動為您建立 OmegaTrade 應用程式所需的 Cloud Spanner 執行個體、資料庫和資料表。

以下列出詳細資料供您參考:

項目 名稱 詳細資料
Cloud Spanner 執行個體 omegatrade-instance 這是專案層級執行個體
Cloud Spanner 資料庫 omegatrade-db 這是執行個體專屬資料庫
資料表 Users 包含使用者帳戶
資料表 Companies 包含公司名稱和股票代號
資料表 CompanyStocks 包含股價
資料表 Simulations 追蹤各項模擬作業的狀態

工作 1:啟用必要的 Google Cloud API

首先,請啟用 Cloud Spanner、Container Registry 和 Cloud Run 的 Google Cloud API。

  1. Cloud Shell 輸入下列指令:
gcloud services enable spanner.googleapis.com gcloud services enable artifactregistry.googleapis.com gcloud services enable containerregistry.googleapis.com gcloud services enable run.googleapis.com

工作 2:下載並檢查應用程式程式碼

  1. 下載要在本實驗室使用的程式碼存放區。在 Cloud Shell 輸入下列內容:
git clone https://github.com/GoogleCloudPlatform/training-data-analyst
  1. 前往包含應用程式程式碼的資料夾。
cd training-data-analyst/courses/cloud-spanner/omegatrade/
  1. 程式碼主要分為後端和前端兩部分。應用程式架構如下圖所示:

AppArch.png

  1. 應用程式需使用名為 .env 的部署專屬檔案,才能與 Cloud Spanner 執行個體順利通訊。您將在下一個工作建立這個檔案。

  2. 就後端而言,Cloud Spanner 資料表的繫結和互動會由 Node.js 模型管理,其中三個模型 company.model.jssimulation.model.jsuser.model.js 位於 models 資料夾。執行下列指令,前往 models 資料夾:

cd backend/app/models
  1. 執行下列指令來檢視 company.model.js 檔案。這個檔案包含與 companies 資料表互動的資料庫作業。
more company.model.js

按空格鍵即可逐頁瀏覽檔案,直到最後一頁。如要提前關閉檔案,請輸入 q 來關閉 more 指令。

  1. 前端與這些模型及 Node.js 後端其他結構的互動,部分是透過 components 資料夾中的 Angular 元件進行。執行下列指令,前往 components 資料夾:
cd ../../../frontend/src/app/components
  1. 舉例來說,company 元件包含用來管理及更新公司資訊的基本應用程式程式碼。

  2. 執行下列指令,檢查 manage-company.component.ts TypeScript 設定檔。這個檔案包含刪除或編輯公司等動作的方法。

more company/manage-company/manage-company.component.ts

按空格鍵即可逐頁瀏覽檔案,直到最後一頁。如要提前關閉檔案,請輸入 q 來關閉 more 指令。

工作 3:建構及部署後端元件

  1. 前往包含建構及部署後端所需程式碼的資料夾。
cd ../../../../backend
  1. 建立 .env 檔案。如先前所述,這個檔案包含專案特定資訊,可讓應用程式的後端元件與 Cloud Spanner 執行個體通訊。

在 Cloud Shell 輸入下列指令,叫用 Nano 文字編輯器,並建立新的 .env 檔案。

nano .env

貼上下列程式碼區塊。

PROJECTID = {{{project_0.project_id|Project ID}}} INSTANCE = omegatrade-instance DATABASE = omegatrade-db JWT_KEY = w54p3Y?4dj%8Xqa2jjVC84narhe5Pk EXPIRE_IN = 30d

依序按下 Ctrl+X > Y 鍵 > Enter 鍵,在退出 Nano 時確認更新並儲存變更。

  1. 繼續操作前,您必須安裝 npm 的更新元件,才能正確編譯後端。npm 是 JavaScript 的套件管理工具,也是 JavaScript 執行階段環境 Node.js 的預設套件管理工具。
nvm install 22.6 npm install npm -g npm install --loglevel=error
  1. 接著使用存放區資料夾中的 Dockerfile 參考檔案,建構後端應用程式。
docker build -t gcr.io/{{{project_0.project_id|Project ID}}}/omega-trade/backend:v1 -f dockerfile.prod . 注意:建構過程中,如果看見「npm notice...」訊息,請放心忽略
  1. 推送新的應用程式套件前,請先執行下列指令,在 Cloud Shell 中設定權限。

系統詢問是否繼續時,請輸入「y」

gcloud auth configure-docker
  1. 將新建立的應用程式套件推送至 Qwiklabs 專案的 Container Repository。
docker push gcr.io/{{{project_0.project_id|Project ID}}}/omega-trade/backend:v1
  1. 最後,使用 Cloud Run 部署後端應用程式。Cloud Run 是無伺服器部署架構,可讓您省去基礎架構管理作業,並根據流量近乎即時地自動擴充或縮減資源。
gcloud run deploy omegatrade-backend --platform managed --region {{{project_0.default_region|Default Region}}} --image gcr.io/{{{project_0.project_id|Project ID}}}/omega-trade/backend:v1 --memory 512Mi --allow-unauthenticated
  1. 複製部署作業結束時提供的網址,並儲存在記事本、文字檔或其他方便存取的位置。這個網址會提供給前端應用程式,確保使用者介面能透過後端與 Cloud Spanner 資料庫正常通訊。

後端服務網址會顯示為以下格式:

https://omegatrade-backend-zzzyyyxx1x-uw.a.run.app

工作 4:將股票交易範例資料匯入資料庫

  1. 在目前的 (主要後端) 資料夾中執行下列指令,匯入公司和股票範例資料。
unset SPANNER_EMULATOR_HOST node seed-data.js
  1. 您會收到確認訊息,表示資料表已成功載入。
Inserting Companies... done Inserting Simulations... done Inserting Stocks... done Data Loaded successfully
  1. 點選「Check my progress」確認目標已達成。
將股票交易範例資料匯入資料庫

工作 5:建構及部署前端元件

  1. 前往包含前端程式碼的目錄,即 environments 資料夾,更新設定檔以指向後端元件。
cd ../frontend/src/environments
  1. 在 Cloud Shell 輸入下列指令,叫用 Nano 文字編輯器,並開啟 environment.ts 檔案。
nano environment.ts
  1. 小心刪除 http://localhost:3000 字串,並替換成後端網址。
注意:請務必保留網址中的 /api/v1/ 部分

依序按下 Ctrl+X > Y 鍵 > Enter 鍵,在退出 Nano 時確認更新並儲存變更。

更新後的 environment.ts 檔案應如下所示。

export const environment = { production: false, name: "dev", // change baseUrl according to backend URL baseUrl:"https://omegatrade-backend-zzzyyyxx1x-uw.a.run.app/api/v1/", // change clientId to actual value you have received from Oauth console clientId: "" };
  1. 前往主要前端資料夾。
cd ../..
  1. 安裝 npm 的更新元件,確保前端能正確編譯。
npm install npm -g npm install --loglevel=error 注意:安裝過程中,如果看見「npm WARN config...」訊息,請放心忽略
  1. 接著,使用存放區資料夾中的 Dockerfile 參考檔案建構前端應用程式。前端建構作業可能需要 5 到 10 分鐘才能完成。
docker build -t gcr.io/{{{project_0.project_id|Project ID}}}/omegatrade/frontend:v1 -f dockerfile . 注意:建構過程中,如果看見「npm notice...」訊息,請放心忽略
  1. 將新建立的應用程式套件推送至 Qwiklabs 專案的 Container Repository。
docker push gcr.io/{{{project_0.project_id|Project ID}}}/omegatrade/frontend:v1
  1. 最後,使用 Cloud Run 部署前端應用程式。
gcloud run deploy omegatrade-frontend --platform managed --region {{{project_0.default_region|Default Region}}} --image gcr.io/{{{project_0.project_id|Project ID}}}/omegatrade/frontend:v1 --allow-unauthenticated
  1. 前端服務網址會顯示為以下格式。您可以直接點按網址來開啟網頁,也可以複製網址並貼到新分頁。
https://omegatrade-frontend-zzzyyyxx1x-uw.a.run.app

工作 6:在 OmegaTrade 應用程式中執行操作

  1. 在應用程式啟動頁面點按「sign up」連結。

  2. 使用下列詳細資料,為虛構公司 Spanner1 建立新帳戶。

項目
公司電子郵件地址 admin@spanner1.com
全名 Spanner1 Admin
密碼 Spanner1
確認密碼 Spanner1



  1. 系統會建立帳戶並登入。

  2. 檢查 OmegaTrade 應用程式:前往「Dashboard」,然後從選取器選擇「Foobar Inc」,即可查看 Foobar Inc 的股票成效圖表,當中會呈現 Foobar Inc 的模擬股價走勢。

  3. 前往「Manage Company」,然後新增「Spanner1」做為新公司。

  4. 點選頁面右側的「Add Company」,然後在彈出式視窗中輸入下列值:

項目
公司名稱 Spanner1
短碼 SPN



完成後點按「Save」

  1. 「Spanner1」現在已加入公司清單。

  2. 前往「Dashboard」,然後選取「Spanner1」 (如果尚未選取)。您會看到「Spanner1」還沒有模擬資料,點選「here」連結即可產生。

  3. 在「Simulate Data」部分,提供下列詳細資料:

項目
選取公司 Spanner1
選取間隔 5
記錄數 50



接著點按「Simulate」

  1. 前往「Dashboard」,就會看到「Spanner1」模擬圖表即時更新。模擬作業會在 3 到 6 分鐘內完成。

  2. 您也可以在 OmegaTrade 應用程式修改現有公司資訊:在「Manage Company」分頁中找到「Acme Corp」,然後點按「Action」旁的鉛筆圖示。

  3. 將公司名稱更新為「Coyote Inc」。請注意,「Short Code」無法在使用者介面更新。點選「Update」關閉視窗並接受變更。

  4. 公司名稱會立即更新。前往「Dashboard」,即可看到「Acme Corp」已改為顯示「Coyote Inc」

  5. 應用程式程式碼有時無法處理部分資料變更,這時您可透過授權使用者的身分,直接在 Cloud Spanner 資料庫進行變更,更新 OmegaTrade 應用程式使用的資料。

  6. 前往 Cloud 控制台,依序點按「導覽選單」圖示 「導覽選單」圖示 >「查看所有產品」>「資料庫」>「Spanner」

  7. 如果出現確認或資訊視窗,請點按「接受」。

  8. 依序點選「omegatrade-instance」名稱和「資料庫」下方的「omegatrade-db」。在頁面底部的資料表清單中,點選「companies」

  9. 點按左側窗格的「資料」,即可查看資料表內容。

  10. 準備更新「Bar Industries」實體的名稱。

  11. 點按「Bar Industries」資料列的核取方塊接著點按表格列上方選項中的「編輯」

  12. 系統會導向 Spanner Studio。點按「+ 新分頁」,然後輸入下列查詢,將「companyName」的值從「Bar Industries」更新為「Consolidated Enterprises Inc」

UPDATE companies SET companyName='Consolidated Enterprises Inc' WHERE companyName='Bar Industries'; 附註:您可以在 Cloud Spanner 查詢視窗中變更 Short Code 值,因為應用程式程式碼的設計不支援透過使用者介面更新這個值。
  1. 點選「執行」來更新。

  2. 返回應用程式頁面並重新整理瀏覽器,然後前往「Dashboard」分頁,就會發現「Bar Industries」已改為顯示「Consolidated Enterprises Inc」

恭喜!

您已成功部署連線至 Cloud Spanner 執行個體的 Node.js 應用程式,並使用該應用程式對資料庫執行基本操作,以及直接在資料庫中編輯資料。

Google Cloud 教育訓練與認證

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

使用手冊上次更新日期:2025 年 5 月 12 日

實驗室上次測試日期:2025 年 5 月 12 日

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

准备工作

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

使用无痕浏览模式

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

登录控制台

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

此内容目前不可用

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

太好了!

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

一次一个实验

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

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

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