访问 700 多个实验和课程

Hello Cloud Run [APPRUN] (AWS)

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

您最近加入一間 IT 公司,擔任雲端環境開發人員,這間公司的主要雲端服務供應商 (CSP) 是 Google Cloud。您收到指示,要在雲端環境建構無伺服器的無狀態網頁應用程式,因此須採用 Google Cloud 提供的 Cloud Run 服務。需要考量的一些面向包括:

  • 啟用 Cloud Run API
  • 儲存容器映像檔
  • 部署無伺服器的容器化應用程式
  • 降低成本的最佳做法

您在前一間公司使用過 AWS,知道 AWS Fargate 不需要伺服器即可佈建容器化環境。AWS Fargate 可處理發布、監控容器及調度資源的工作。開發人員因此能將心力集中在應用程式的程式碼上,輕鬆部署、管理容器化應用程式,並為應用程式調度資源。另外,AWS Fargate 可讓您為 Amazon Elastic Container Service (Amazon ECS) 或 Amazon Elastic Kubernetes Service (Amazon EKS) 部署容器。也就是說,開發人員能夠選取最符合需求的自動化調度管理選項。

下圖顯示以 AWS Fargate 為基礎的無伺服器容器化應用程式結構:

AWS 圖表

接著,您會學習如何在 Google Cloud 部署應用程式。

總覽

Cloud Run 標誌

Cloud Run 是代管運算平台,能夠讓您執行可透過 HTTP 要求叫用的無狀態容器。Cloud Run 採用無伺服器技術,可為您省去所有基礎架構管理工作,讓您專心處理最重要的事:建構出色的應用程式。

Cloud Run 是以 Knative 打造而成,可讓您透過 Cloud Run 以全代管的方式執行容器,或是透過 Cloud Run on GKE 在您的 Google Kubernetes Engine 叢集中執行容器。

透過這個實驗室,您可以瞭解如何建立簡易容器化應用程式映像檔,並部署至 Cloud Run。

目標

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

  • 啟用 Cloud Run API。
  • 建構簡易型 Node.js 應用程式,這個應用程式可部署為無伺服器的無狀態容器。
  • 將應用程式容器化,並上傳至 Container Registry (現已改稱「Artifact Registry」)。
  • 在 Cloud Run 部署容器化應用程式。
  • 刪除不需要的映像檔,以免產生額外的儲存費用。

設定和需求

在每個研究室中,您都能在固定時間內免付費建立新的 Google Cloud 專案,並使用一組資源。

  1. 請透過無痕式視窗登入 Qwiklabs。

  2. 請記下研究室的存取時間 (例如 1:15:00),並確保自己能在時間限制內完成作業。
    研究室不提供暫停功能。如有需要,您可以重新開始,但原先的進度恕無法保留。

  3. 準備就緒後,請按一下「Start lab」

  4. 請記下研究室憑證 (使用者名稱密碼),這組資訊將用於登入 Google Cloud 控制台。

  5. 按一下「Open Google Console」

  6. 按一下「Use another account」,然後複製這個研究室的憑證,並貼入提示訊息。
    如果使用其他憑證,系統會顯示錯誤或向您收取費用

  7. 接受條款,然後略過資源復原頁面。

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

  1. 按一下「Start Lab」按鈕。如果研究室會產生費用,畫面中會出現選擇付款方式的彈出式視窗。左側面板會顯示必須在這個研究室中使用的暫時憑證。

    「憑證」面板

  2. 複製使用者名稱,然後點選「Open Google Console」。接著,研究室會啟動相關資源並開啟另一個分頁,當中顯示「Choose an account」頁面。

    注意事項:請在不同視窗並排開啟分頁。
  3. 點選「Choose an account」頁面中的「使用其他帳戶」,「Sign in」頁面隨即開啟。

    「Choose an account」對話方塊,特別標明了「使用其他帳戶」選項

  4. 貼上您在「連線詳細資訊」面板中複製的使用者名稱,然後複製並貼上密碼。

注意事項:請務必使用「連線詳細資訊」面板中的憑證,而非 Google Cloud Skills Boost 的憑證。另外,請勿在這個研究室中使用您自己的 Google Cloud 帳戶,以免產生費用。
  1. 按過後續的所有頁面:
  • 接受條款及細則。
  • 由於這是臨時帳戶,請勿新增救援選項或雙重驗證機制。
  • 請勿申請免費試用。

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

注意事項:點選畫面左上方的導覽選單,即可查看 Google Cloud 產品與服務清單。 Cloud 控制台選單

啟動 Google Cloud Shell

Google Cloud Shell 是搭載多項開發工具的虛擬機器,提供永久的 5 GB 主目錄,而且在 Google Cloud 中運作。

Google Cloud Shell 提供指令列存取權,方便您使用 Google Cloud 資源。

  1. 在 Cloud 控制台的右上方找到工具列,然後按一下「開啟 Cloud Shell」按鈕。

    特別標明的「Cloud Shell」圖示

  2. 按一下「繼續」

佈建並連線至環境的作業需要一些時間才能完成。連線建立完成即代表已通過驗證,而且專案已設為您的「PROJECT_ID」。示例如下:

在 Cloud Shell 終端機中,特別標明了專案 ID

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

  • 您可以使用下列指令來列出使用中的帳戶:
gcloud auth list

輸出內容:

Credentialed accounts: - @.com (active)

輸出內容示例:

Credentialed accounts: - google1623327_student@qwiklabs.net
  • 您可以使用下列指令來列出專案 ID:
gcloud config list project

輸出內容:

[core] project =

輸出內容示例:

[core] project = qwiklabs-gcp-44776a13dea667a6 注意事項:如需 gcloud 的完整說明,請參閱 gcloud CLI 總覽指南

參考資料

基本 Linux 指令

下方的參考清單列出了幾個非常基本的 Linux 指令,這個研究室的操作說明或程式碼區塊可能會提及這些指令。

指令 --> 動作 . 指令 --> 動作
mkdir (建立目錄) 建立新的資料夾 . cd (變更目錄) 將位置變更為其他資料夾
ls (列出) 列出目錄中的檔案和資料夾 . cat (串連) 在不使用編輯器的情況下讀取檔案內容
apt-get update 更新套件管理工具程式庫 . ping 向主機傳送信號來測試可連性
mv (移動) 移動檔案 . cp (複製) 建立檔案副本
pwd (顯示工作目錄) 傳回目前的位置 . sudo (超級使用者權限) 授予更高層級的管理員權限

工作 1:啟用 Cloud Run API 並設定 Cloud Shell 環境

  1. 在 Cloud Shell 中啟用 Cloud Run API
gcloud services enable run.googleapis.com
  1. 如果系統提示您授權使用憑證,請按照指示操作。接著,畫面中應該會顯示成功訊息,內容與以下類似:
Operation "operations/acf.cc11852d-40af-47ad-9d59-477a12847c9e" finished successfully. 注意:您也可以前往控制台的「API 和服務」專區啟用該 API。
  1. 設定運算區域:
gcloud config set compute/region {{{ project_0.default_region| "Region" }}}
  1. 建立 LOCATION 環境變數:
LOCATION="{{{ project_0.default_region| "Region" }}}"

工作 2:編寫範例應用程式

在這項工作中,您將建構一個以 Express 為基礎的簡易型 Node.js 應用程式,用於回應 HTTP 要求。

  1. 在 Cloud Shell 中建立名為 helloworld 的新目錄,然後查看當中內容:
mkdir helloworld && cd helloworld
  1. 接下來要建立及編輯檔案。您可以使用 viemacnano 來編輯檔案,也能在 Cloud Shell 點選「開啟編輯器」按鈕,運用 Cloud Shell 程式碼編輯器來編輯檔案。

  2. 建立 package.json 檔案,並在當中新增下列內容:

nano package.json { "name": "helloworld", "description": "Simple hello world sample in Node", "version": "1.0.0", "main": "index.js", "scripts": { "start": "node index.js" }, "author": "Google LLC", "license": "Apache-2.0", "dependencies": { "express": "^4.17.1" } }

最重要的是,上述檔案包含 start 指令碼,以及 Express 網頁應用程式框架的依附元件。

  1. 依序按下 Ctrl+X 鍵和 Y 鍵,儲存 package.json 檔案。

  2. 接著,在同一個目錄中建立 index.js 檔案,並將下列幾行內容複製到檔案中:

nano index.js const express = require('express'); const app = express(); const port = process.env.PORT || 8080; app.get('/', (req, res) => { const name = process.env.NAME || 'World'; res.send(`Hello ${name}!`); }); app.listen(port, () => { console.log(`helloworld: listening on port ${port}`); });

這段程式碼會建立基本的網路伺服器,藉此監聽 PORT 環境變數定義的通訊埠。應用程式現已就緒,您可以開始將應用程式容器化,並上傳至 Container Registry。

  1. 依序按下 Ctrl+X 鍵和 Y 鍵,儲存 index.js 檔案。
注意:您可以透過多種語言開始使用 Cloud Run。如需 Go、Python、Java、PHP、Ruby、Cloud Shell 指令碼和其他語言的操作說明,請參閱快速入門指南

工作 3:將應用程式容器化並上傳至 Artifact Registry

  1. 為了將範例應用程式容器化,請在來源檔案所在的目錄中建立名為 Dockerfile 的新檔案,並加入下列內容:
nano Dockerfile # Use the official lightweight Node.js 12 image. # https://hub.docker.com/_/node FROM node:12-slim # Create and change to the app directory. WORKDIR /usr/src/app # Copy application dependency manifests to the container image. # A wildcard is used to ensure copying both package.json AND package-lock.json (when available). # Copying this first prevents re-running npm install on every code change. COPY package*.json ./ # Install production dependencies. # If you add a package-lock.json, speed your build by switching to 'npm ci'. # RUN npm ci --only=production RUN npm install --only=production # Copy local code to the container image. COPY . ./ # Run the web service on container startup. CMD [ "npm", "start" ]
  1. 依序按下 Ctrl+X 鍵和 Y 鍵,儲存 Dockerfile 檔案。

  2. 接著,從內含 Dockerfile 的目錄執行下列指令,運用 Cloud Build 建立容器映像檔。(請留意指令中的 $GOOGLE_CLOUD_PROJECT 環境變數,內含這個實驗室的專案 ID):

gcloud builds submit --tag gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld

Cloud Build 是在 Google Cloud Platform 執行建構作業的服務。只需一個指令,這項服務就會在 Docker 容器中執行一系列的建構步驟、產生應用程式容器 (或其他構件),並推送至 Artifact Registry。

容器推送到 Artifact Registry 後,您會看到包含映像檔名稱 (gcr.io/[PROJECT-ID]/helloworld) 的「SUCCESS」(成功) 訊息。映像檔會儲存於 Artifact Registry,日後可以視需求重複使用。

  1. 執行下列指令,列出與目前專案相關聯的所有容器映像檔:
gcloud container images list
  1. 執行下列標準 docker 指令,透過 Cloud Shell 在本機執行及測試應用程式:
docker run -d -p 8080:8080 gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld
  1. 點選 Cloud Shell 視窗中的「網頁預覽」,然後選取「透過以下通訊埠預覽:8080」

此動作應會開啟瀏覽器視窗,並在其中顯示「Hello World!」的訊息。您也能直接執行 curl localhost:8080 指令。

注意:如果 docker 指令無法提取遠端的容器映像檔,請執行下列指令:gcloud auth configure-docker

工作 4:部署至 Cloud Run

  1. 為了將容器化應用程式部署至 Cloud Run,請執行在下列指令中加入專案 ID,並執行指令:
gcloud run deploy --image gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld --allow-unauthenticated --region=$LOCATION

上述指令中的 allow-unauthenticated 旗標會將您的服務設為可公開存取。

  1. 系統提示您確認 service name 時,請按下 Enter 鍵。

稍候片刻,等待部署作業完成。

部署成功之後,指令列會顯示服務網址:

Service [helloworld] revision [helloworld-00001-xit] has been deployed and is serving 100 percent of traffic. Service URL: https://helloworld-h6cp412q3a-uc.a.run.app

您現在可以在任何瀏覽器視窗開啟服務網址,查看已部署的容器。

恭喜!您已將一個封裝在容器映像檔中的應用程式部署到 Cloud Run。Cloud Run 會自動水平擴充您的容器映像檔,以處理收到的要求,然後在需求減少時縮減規模。在您自己的環境中,您只需為處理要求期間使用的 CPU、記憶體和網路支付費用。

在本實驗室中,您是使用 gcloud 指令列執行各項操作。您也可以透過 Cloud 控制台使用 Cloud Run。

  • 導覽選單中點選「無伺服器」部分的「Cloud Run」,畫面中應該會列出您的 helloworld 服務:

Cloud Run 分頁,顯示了 helloworld 服務

工作 5:清除所用資源

不使用服務時,Cloud Run 不會收費,但您可能仍須針對已建構的容器映像檔,支付儲存費用。

  1. 如要避免產生費用,您可以刪除 GCP 專案,讓專案中使用的所有資源不再產生費用;您也可以執行下列指令,直接刪除 helloworld 映像檔:
gcloud container images delete gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld
  1. 系統提示您繼續操作時,請輸入 Y 並按下 Enter 鍵。

  2. 執行下列指令,刪除 Cloud Run 中的服務:

gcloud run services delete helloworld --region={{{ project_0.default_region| "Region" }}}
  1. 系統提示您繼續操作時,請輸入 Y 並按下 Enter 鍵。

恭喜!

您已完成這個實驗室中的所有工作!

Google Cloud Run 和 AWS Fargate 都是無伺服器運算服務,可讓開發人員執行容器化應用程式,不僅具備成本效益,也能輕鬆擴充。不過,這兩項服務有些許不同。

以下說明關鍵的異同之處。

相似處:

  • Google Cloud Run 和 AWS Fargate 都是無伺服器運算服務,這代表開發人員可以專心編寫程式碼,不必為底層基礎架構而煩惱。
  • 都採用容器化技術來封裝及部署應用程式。
  • 都支援 Docker 容器部署格式。
  • 都能依據需求自動擴充或縮減資源。

差異:

  • AWS Fargate 使用者必須自行設定及管理容器自動化調度管理工具,例如 Kubernetes。若使用 Google Cloud Run,則是交由平台處理。
  • Google Cloud Run 是獨立服務,AWS Fargate 則是 Amazon ECS 或 Amazon EKS 兩項容器服務的佈建服務。
  • 如要部署無伺服器容器化環境,在 AWS,您需要同時整合 AWS Fargate 與 Amazon ECS 或 Amazon EKS 等自動化調度管理服務,在 Google Cloud 則只需要使用 Cloud Run。

關閉研究室

如果您已完成研究室,請按一下「End Lab」(關閉研究室)。Google Cloud Skills Boost 會移除您使用的資源,並清除所用帳戶。

您可以針對研究室的使用體驗評分。請選取合適的星級評等並提供意見,然後按一下「Submit」(提交)

星級評等代表您的滿意程度:

  • 1 星 = 非常不滿意
  • 2 星 = 不滿意
  • 3 星 = 普通
  • 4 星 = 滿意
  • 5 星 = 非常滿意

如果不想提供意見回饋,您可以直接關閉對話方塊。

如有任何想法、建議或指教,請透過「Support」(支援) 分頁提交。

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

准备工作

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

使用无痕浏览模式

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

登录控制台

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

此内容目前不可用

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

太好了!

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

一次一个实验

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

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

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