將 Cloud Run 與 Firebase Hosting 配對,產生並提供動態內容,或將 REST API 建構為微服務。
您可以使用 Cloud Run 部署封裝在容器映像檔中的應用程式。接著,您可以使用 Firebase Hosting 將 HTTPS 要求導向至觸發容器化應用程式。
- Cloud Run 支援多種語言 (包括 Go、Node.js、Python 和 Java),讓您能靈活運用所選的程式設計語言和架構。
- Cloud Run 自動及水平擴充您的容器映像檔,以處理收到的要求,然後在需求減少時縮減規模。
- 您只需要為處理要求期間使用的 CPU、記憶體和網路付費。
如需 Cloud Run 與 Firebase Hosting 整合的用途範例和範例,請參閱無伺服器總覽。
本指南說明如何:
請注意,如要改善動態內容的放送效能,您可以視需要調整快取設定。
事前準備
使用 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 和 unzip 指令建立新的空白 Web 專案:
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
中的SpringBootApplication
類別,方法是新增@RestController
來處理/
對應,並新增@Value
欄位來提供TARGET
環境變數:這個程式碼會建立一個基本網路伺服器,用於監聽
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
出現提示時:
- 選取區域 (例如
us-central1
) - 確認服務名稱 (例如
helloworld
) - 回覆
Y
以允許未經驗證的叫用
- 選取區域 (例如
稍候片刻,等待部署作業完成。成功完成後,指令列會顯示服務網址。例如:
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,包括設定、管理和設定容器的詳細操作指南。