將 Cloud Run 與 Firebase Hosting 配對,即可產生及提供動態內容,或將 REST API 建構為微服務。
使用 Cloud Run,您可以部署封裝在容器映像檔中的應用程式。接著,您可以使用 Firebase Hosting 將 HTTPS 要求導向至容器化應用程式。
- Cloud Run 支援多種語言 (包括 Go、Node.js、Python 和 Java),讓您能彈性選擇要使用的程式設計語言和架構。
- Cloud Run 自動水平擴充容器映像檔,處理收到的要求,然後在需求減少時縮減規模。
- 您只需要支付處理要求期間使用的 CPU、記憶體和網路費用。
如需與 Firebase Hosting 整合的 Cloud Run 範例用途和範例,請參閱無伺服器總覽。
本指南說明如何:
請注意,如要提升放送動態內容的效能,您可以視需要調整快取設定。
事前準備
使用 Cloud Run 前,請先完成一些初始工作,包括設定 Cloud Billing 帳戶、啟用 Cloud Run API,以及安裝 gcloud
指令列工具。
設定專案帳單
Cloud Run 提供免費使用配額,但您仍須擁有與 Firebase 專案相關聯的 Cloud Billing 帳戶,才能使用或試用 Cloud Run。
啟用 API 並安裝 SDK
在 Google API 控制台中啟用 Cloud Run API:
在 Google API 控制台中開啟 Cloud Run API 頁面。
系統顯示提示訊息時,請選取您的 Firebase 專案。
在 Cloud Run API 頁面中,按一下「啟用」。
安裝並初始化 Cloud SDK。
確認
gcloud
工具已設定為正確的專案:gcloud config list
步驟 1:編寫範例應用程式
請注意,除了下列範例中顯示的語言,Cloud Run還支援許多其他語言。
Go
建立名為
helloworld-go
的新目錄,然後將目錄變更為該目錄:mkdir helloworld-go
cd helloworld-go
建立名為
helloworld.go
的新檔案,然後加入下列程式碼:這個程式碼會建立一個基本網路伺服器,用於監聽
PORT
環境變數定義的連接埠。
您的應用程式已經完成,您可以開始將這個應用程式容器化並上傳到 Artifact Registry。
Node.js
建立名為
helloworld-nodejs
的新目錄,然後將目錄變更為該目錄:mkdir helloworld-nodejs
cd helloworld-nodejs
使用以下內容建立
package.json
檔案:建立名為
index.js
的新檔案,然後加入下列程式碼:這個程式碼會建立一個基本網路伺服器,用於監聽
PORT
環境變數定義的連接埠。
您的應用程式已經完成,您可以開始將這個應用程式容器化並上傳到 Artifact Registry。
Python
建立名為
helloworld-python
的新目錄,然後將目錄變更為該目錄:mkdir helloworld-python
cd helloworld-python
建立名為
app.py
的新檔案,然後加入下列程式碼:這個程式碼會建立一個基本網路伺服器,用於監聽
PORT
環境變數定義的連接埠。
您的應用程式已經完成,您可以開始將這個應用程式容器化並上傳到 Artifact Registry。
Java
安裝 Java SE 8 以上版本的 JDK 和 CURL。
請注意,我們只需在下一步執行這項操作來建立新的 Web 專案。稍後將討論的 Dockerfile 會將所有依附元件載入容器中。
在主控台中,使用 cURL 建立新的空白 Web 專案,然後執行 unzip 指令:
curl https://start.spring.io/starter.zip \ -d dependencies=web \ -d name=helloworld \ -d artifactId=helloworld \ -o helloworld.zip
unzip helloworld.zip
系統便會建立 SpringBoot 專案。
在
src/main/java/com/example/helloworld/HelloworldApplication.java
中新增@RestController
來處理/
對應,並新增@Value
欄位來提供TARGET
環境變數,藉此更新SpringBootApplication
類別:這個程式碼會建立一個基本網路伺服器,用於監聽
PORT
環境變數定義的連接埠。
您的應用程式已經完成,您可以開始將這個應用程式容器化並上傳到 Artifact Registry。
步驟 2:將應用程式容器化並上傳至 Artifact Registry
如要將範例應用程式容器化,請在相同目錄中建一個名為
Dockerfile
的新檔案做為來源檔案。將下列內容複製到檔案中。Go
Node.js
Python
Java
從含有 Dockerfile 的目錄執行下列指令,使用 Cloud Build 建構容器映像檔:
gcloud builds submit --tag gcr.io/PROJECT_ID/helloworld
若成功執行,您會看到包含映像檔名稱 (
gcr.io/PROJECT_ID/helloworld
) 的「SUCCESS」(成功) 訊息。
容器映像檔現在儲存在 Artifact Registry 中,日後如有需要,可以重複使用。
請注意,您可以使用本機安裝的 Docker 版本在本機建構容器,而非使用 Cloud Build。
步驟 3:將容器映像檔部署至 Cloud Run
使用下列指令進行部署:
gcloud run deploy --image gcr.io/PROJECT_ID/helloworld
出現提示時:
稍候片刻,等待部署作業完成。成功完成後,指令列會顯示服務網址。例如:
https://helloworld-RANDOM_HASH-us-central1.a.run.app 在網路瀏覽器中開啟服務網址,以造訪您所部署的容器。
下一個步驟會逐步說明如何透過 Firebase Hosting 網址存取這個容器化應用程式,以便為 Firebase 託管網站產生動態內容。
步驟 4:將代管要求直接傳送至容器化應用程式
使用重寫規則,您可以將符合特定模式的要求導向單一目的地。
以下範例說明如何將 Hosting 網站上 /helloworld
網頁的所有要求,導向觸發 helloworld
容器執行個體的啟動和執行作業。
請確認下列事項:
你使用的是最新版 Firebase CLI。
您已初始化 Firebase Hosting。
如需安裝 CLI 和初始化 Hosting 的詳細操作說明,請參閱 Hosting 入門指南。
開啟
firebase.json
檔案。在
hosting
區段下方新增下列rewrite
設定:"hosting": { // ... // Add the "rewrites" attribute within "hosting" "rewrites": [ { "source": "/helloworld", "run": { "serviceId": "helloworld", // "service name" (from when you deployed the container image) "region": "us-central1", // optional (if omitted, default is us-central1) "pinTag": true // optional (see note below) } } ] }
在專案目錄的根層級執行下列指令,將代管設定部署至網站:
firebase deploy --only hosting
現在可透過下列網址存取容器:
您的 Firebase 子網域:
PROJECT_ID.web.app/
和PROJECT_ID.firebaseapp.com/
任何已連結的自訂網域:
CUSTOM_DOMAIN/
如要進一步瞭解重寫規則,請前往 Hosting 設定頁面。您也可以瞭解各種Hosting設定的回覆優先順序。
在本機測試
開發期間,您可以在本機執行並測試容器映像檔。如需詳細操作說明,請參閱 Cloud Run 說明文件。
後續步驟
在全域 CDN 上設定動態內容的快取。
使用 Firebase Admin SDK 與其他 Firebase 服務互動。
進一步瞭解 Cloud Run,包括設定、管理及設定容器的詳細操作指南。
請查看 Cloud Run 的配額與限制。