將 Cloud Run 與 Firebase 託管配對以生成和提供您的動態內容或將 REST API 構建為微服務。
使用Cloud Run ,您可以部署打包在容器映像中的應用程序。然後,使用 Firebase 託管,您可以定向 HTTPS 請求來觸發您的容器化應用程序。
- Cloud Run 支持多種語言(包括 Go、Node.js、Python 和 Java),讓您可以靈活地使用自己選擇的編程語言和框架。
- Cloud Run會自動橫向擴展您的容器映像以處理收到的請求,然後在需求減少時縮減。
- 您只需為請求處理期間消耗的 CPU、內存和網絡付費。
有關與 Firebase 託管集成的 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 還支持許多其他語言。
去
創建一個名為
helloworld-go
的新目錄,然後將目錄更改為該目錄:mkdir helloworld-go
cd helloworld-go
創建一個名為
helloworld.go
的新文件,然後添加以下代碼:此代碼創建一個基本的 Web 服務器,該服務器偵聽
PORT
環境變量定義的端口。
您的應用已完成,可以進行容器化並上傳到 Container Registry。
節點.js
創建一個名為
helloworld-nodejs
的新目錄,然後將目錄切換到其中:mkdir helloworld-nodejs
cd helloworld-nodejs
創建一個包含以下內容的
package.json
文件:創建一個名為
index.js
的新文件,然後添加以下代碼:此代碼創建一個基本的 Web 服務器,該服務器偵聽
PORT
環境變量定義的端口。
您的應用已完成,可以進行容器化並上傳到 Container Registry。
Python
創建一個名為
helloworld-python
的新目錄,然後將目錄更改為該目錄:mkdir helloworld-python
cd helloworld-python
創建一個名為
app.py
的新文件,然後添加以下代碼:此代碼創建一個基本的 Web 服務器,該服務器偵聽
PORT
環境變量定義的端口。
您的應用已完成,可以進行容器化並上傳到 Container Registry。
爪哇
請注意,我們只需要執行此操作即可在下一步中創建新的 Web 項目。稍後介紹的 Dockerfile 會將所有依賴項加載到容器中。
在控制台中,使用 cURL 創建一個新的空 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
環境變量:此代碼創建一個基本的 Web 服務器,該服務器偵聽
PORT
環境變量定義的端口。
您的應用已完成,可以進行容器化並上傳到 Container Registry。
第 2 步:容器化應用程序並將其上傳到 Container Registry
通過在與源文件相同的目錄中創建一個名為
Dockerfile
的新文件來容器化示例應用程序。將以下內容複製到您的文件中。去
節點.js
Python
爪哇
通過從包含 Dockerfile 的目錄運行以下命令,使用 Cloud Build 構建容器映像:
gcloud builds submit --tag gcr.io/PROJECT_ID/helloworld
成功後,您將看到包含圖像名稱的 SUCCESS 消息
(gcr.io/ PROJECT_ID /helloworld
)。
容器映像現在存儲在 Container Registry 中,並且可以根據需要重新使用。
請注意,您可以使用本地安裝的 Docker 版本在本地構建容器,而不是 Cloud Build。
第 3 步:將容器鏡像部署到 Cloud Run
使用以下命令進行部署:
gcloud run deploy --image gcr.io/PROJECT_ID/helloworld
提示時:
- 選擇一個區域(例如
us-central1
) - 確認服務名稱(例如,
helloworld
) - 響應
Y
以允許未經身份驗證的調用
- 選擇一個區域(例如
稍等片刻,讓部署完成。成功時,命令行會顯示服務 URL。例如:
https://helloworld- RANDOM_HASH -us-central1.a.run.app通過在 Web 瀏覽器中打開服務 URL 來訪問已部署的容器。
下一步將向您介紹如何從 Firebase 託管 URL訪問此容器化應用,以便它可以為您的 Firebase 託管網站生成動態內容。
第 4 步:將託管請求定向到您的容器化應用程序
使用重寫規則,您可以將匹配特定模式的請求定向到單個目的地。
以下示例顯示瞭如何將來自您的託管站點上的頁面/helloworld
的所有請求定向到觸發您的helloworld
容器實例的啟動和運行。
確保:
您擁有最新版本的 Firebase CLI 。
您已初始化 Firebase 託管。
有關安裝 CLI 和初始化託管的詳細說明,請參閱託管入門指南。
打開您的
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
使用此功能,您可以確保用於生成站點動態內容的 Cloud Run 服務的修訂與靜態託管資源和託管配置保持同步。此外,此功能還允許您在託管預覽頻道上預覽對 Cloud Run 的重寫。
如果您將
"pingTag": true
添加到hosting.rewrites
配置的run
塊,您的靜態託管資源和配置將在部署時固定到 Cloud Run 服務的最新修訂版。如果您回滾站點的某個版本,“固定”Cloud Run 服務的修訂版也會回滾。此功能依賴於Cloud Run 標籤,每個服務限制為 1000 個標籤,每個區域限制為 2000 個標籤。這意味著在數百次部署之後,站點的最舊版本可能會停止工作。
現在可以通過以下 URL 訪問您的容器:
您的 Firebase 子域:
PROJECT_ID .web.app/
和PROJECT_ID .firebaseapp.com/
任何連接的自定義域:
CUSTOM_DOMAIN /
有關重寫規則的更多詳細信息,請訪問託管配置頁面。您還可以了解各種託管配置的響應優先順序。
本地測試
在開發期間,您可以在本地運行和測試您的容器鏡像。有關詳細說明,請訪問Cloud Run 文檔。
下一步
在全球 CDN 上設置動態內容緩存。
使用Firebase Admin SDK與其他 Firebase 服務交互。
了解有關 Cloud Run 的更多信息,包括有關設置、管理和配置容器的詳細操作指南。