Cloud Run 是一種代管運算平台,可讓您執行能透過 HTTP 要求叫用的無狀態容器。Cloud Run 採用無伺服器架構,可省去管理基礎架構的麻煩,讓您專心處理最重要的工作,也就是建構出色的應用程式。本套件是以 Knative 打造而成,可讓您選擇透過 Cloud Run (全代管) 或 Cloud Run for Anthos 執行容器。這個程式碼研究室的目標是讓您建立容器映像檔並部署至 Cloud Run。
事前準備
無
自行調整環境設定
如果您還沒有 Google 帳戶 (Gmail 或 Google Apps),請先建立帳戶。登入 Google Cloud Platform 主控台 (console.cloud.google.com),然後建立新專案:
提醒您,專案編號是所有 Google Cloud 專案的不重複名稱 (使用上述名稱後就無法使用,敬請見諒!)此程式碼研究室稍後將稱為 PROJECT_ID
。
接著,您必須在 Cloud Console 中啟用計費功能,才能使用 Google Cloud 資源。
完成這個程式碼研究室的成本應該不會超過新臺幣 $300 元,但如果您決定繼續使用更多資源,或是讓資源繼續運作 (請參閱本文件結尾的「清除設定」一節),就有可能需要更多成本。
新加入 Google Cloud Platform 的使用者可免費試用$300 美元。
Cloud Shell
雖然您可以將 Google Cloud 從筆記型電腦遠端執行,但會使用在 Google Cloud 中執行的指令列環境 Cloud Shell。
這款以 Debian 為基礎的虛擬機器會載入您需要的所有開發工具。這項服務提供永久性的 5GB 主目錄,可在 Google Cloud 中運作,大幅提升網路效能和驗證效能。也就是說,這個程式碼研究室只需使用瀏覽器 (是,您可以在 Chromebook 上使用)。
如要啟用 Google Cloud Shell,只要在開發人員控制台中,按一下右上角的按鈕 (只需幾分鐘即可佈建並連線至環境):
按一下 [Start Cloud Shell] 按鈕:
連線至 Cloud Shell 之後,您應該會看到您已經通過驗證,且專案已設為 PROJECT_ID
。
gcloud auth list
指令輸出
Credentialed accounts: - <myaccount>@<mydomain>.com (active)
gcloud config list project
指令輸出
[core] project = <PROJECT_ID>
根據預設,Cloud Shell 也會設定某些環境變數,當您執行未來指令時可能會用到這個變數。
echo $GOOGLE_CLOUD_PROJECT
指令輸出
<PROJECT_ID>
如果因為某些原因而無法設定專案,只要發出下列指令即可:
gcloud config set project <PROJECT_ID>
正在尋找您的 PROJECT_ID
嗎?您可以查看在設定步驟中使用的 ID,或是在控制台資訊主頁查詢 ID:
重要事項:最後,請設定預設區域和專案設定:
gcloud config set compute/zone us-central1-f
您可以選擇多種不同的區域。詳情請參閱地區和區域說明文件。
啟用 Cloud Run API
透過 Cloud Shell 啟用 Cloud Run API。
gcloud services enable run.googleapis.com
這樣應該就會產生與下列內容類似的成功訊息:
Operation "operations/acf.cc11852d-40af-47ad-9d59-477a12847c9e" finished successfully.
您將建構一個以 HTTP 為基礎的簡易型 Node.js 應用程式,用於回應 HTTP 要求。
如要建構應用程式,請使用 Cloud Shell 建立名為「helloworld-nodejs
」的新目錄,並將目錄變更為該目錄。
mkdir helloworld-nodejs cd helloworld-nodejs
建立含有下列內容的 package.json
檔案:
{
"name": "cloudrun-helloworld",
"version": "1.0.0",
"description": "Simple hello world sample in Node",
"main": "index.js",
"scripts": {
"start": "node index.js"
},
"author": "",
"license": "Apache-2.0",
"dependencies": {
"express": "^4.17.1"
}
}
最重要的是,上述檔案包含開始指令碼指令和對 Express 網路應用程式架構的相依關係。
接著,在相同目錄中建立 index.js
檔案,並將下列內容複製到該檔案中:
const express = require('express');
const app = express();
app.get('/', (req, res) => {
console.log('Hello world received a request.');
const target = process.env.TARGET || 'World';
res.send(`Hello ${target}!`);
});
const port = process.env.PORT || 8080;
app.listen(port, () => {
console.log('Hello world listening on port', port);
});
這段程式碼會建立基本的網路伺服器,以便監聽 PORT
環境變數定義的通訊埠。您的應用程式現在可以進行容器化、測試以及上傳至 Container Registry。
如要將範例應用程式容器化,請在與來源檔案相同的目錄中建立名為 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 both package.json AND package-lock.json are copied.
# Copying this separately prevents re-running npm install on every code change.
COPY package*.json ./
# Install production dependencies.
RUN npm install --only=production
# Copy local code to the container image.
COPY . ./
# Run the web service on container startup.
CMD [ "npm", "start" ]
現在,請從包含 Dockerfile 的目錄中執行下列指令,以使用 Cloud Build 建構容器映像檔:
gcloud builds submit --tag gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld
$GOOGLE_CLOUD_PROJECT
是在 Cloud Shell 中執行的環境變數,其中包含您的 Google Cloud 專案 ID。不過,您也可以執行 gcloud config get-value project
來取得程式碼。
推送至登錄檔後,您會看見一則 SUCCESS
訊息,其中含有映像檔名稱 (gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld
)。映像檔會儲存在 Container Registry 中,您可以視需要重複使用。
您可以使用下列指令來列出與目前專案相關聯的所有容器映像檔:
gcloud container images list
如果您想要從 Cloud Shell 在本機執行並測試應用程式,可以使用以下標準 docker
指令啟動應用程式:
docker run -d -p 8080:8080 gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld
在 Cloud Shell 中,按一下 [Web Preview] (網頁預覽) ,然後選取 [透過以下埠預覽:8080]。
這樣就會開啟瀏覽器視窗,顯示「Hello World!」
你也可以直接使用 curl localhost:8080
。
請使用下列指令,將容器化應用程式部署至 Cloud Run (請務必將應用程式調整為適當的建構映像檔名稱,或使用 gcr.io/cloudrun/hello
預先建構的映像檔):
gcloud run deploy helloworld \ --image gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld \ --platform managed \ --region us-central1 \ --allow-unauthenticated
--allow-unauthenticated
部署選項可讓您在不需驗證的情況下,直接存取應用程式。「--platform managed \
」部署選項表示您要求的是全代管環境 (而非透過 Anthos 的 Kubernetes 基礎架構)。
請稍待片刻,等待部署作業完成。完成後,指令列會顯示服務網址。
Service [helloworld] revision [helloworld-00001] has been deployed and is serving traffic at https://helloworld-wdl7fdwaaa-uc.a.run.app
現在您可以在網路瀏覽器中開啟服務網址,造訪您部署的容器:
Cloud Run 會自動水平和水平擴充您的容器映像檔以處理收到的要求,然後在需求降低時縮減資源。您只需為要求處理期間使用的 CPU、記憶體和網路付費。
雖然 Cloud Run 不在使用狀態下不會收費,但您可能還是需要支付儲存容器映像檔的相關費用。
您可以刪除 Google Cloud 專案以避免系統產生費用,這樣就不會再為該專案使用的資源收取費用,或是直接使用下列指令刪除 helloworld 圖片:
gcloud container images delete gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld
如要刪除 Cloud Run 服務,請使用下列指令:
gcloud run services delete helloworld \ --platform managed \ --region us-central1
恭喜!您已將容器映像檔封裝的應用程式部署至 Cloud Run。
瞭解詳情
建議您查看快速入門導覽課程:部署至 Google Cloud 中的 Cloud Run for Anthos。
如要進一步瞭解如何從程式碼來源建構適合 Cloud Run 的無狀態 HTTP 容器,並推送至 Container Registry,請參閱以下資源:
如要進一步瞭解基礎開放原始碼專案 Knative,請參閱 Knative。