GCP functions v1 遷移到 v2
之前寫物聯網的文章有提到 Google Cloud functions 出了第二代,最近在增加新的功能想說整理一下專案,所以新開了一個專案來部署,發現新的 CLI 都預設採用 v2 ,連官網的文件也都強烈建議新功能改用 v2 來部署。
v2 除了支援更多的並發外,也有更快的速度,因為現在是直接部署到 Cloud Run 上,以下提供官方的比較表。
以往在寫 node.js 時都會寫上 region,因為除非是後台上傳才能用手動選擇地區的方式部署,CLI 工具就會看 function 上的定義內容。
import * as functions from "firebase-functions";
export const hello = functions.region('asia-east1').https.onRequest(async(req, res) => {
res.status(200).send('Hello Google Cloud functions v1');
});
現在第二代的定義方式是透過一個叫 httpOptions 的參數帶入
import {onRequest} from "firebase-functions/v2/https";
export const hello = onRequest(
{
timeoutSeconds: 60,
region: 'asia-east1'
},
async (req, res) => {
res.send('Hello from Firebase!')
}
)
由於第二代目前也支援 python 來撰寫,之後再觀看是不是要轉過去,或是之後嘗試看看用 go 來部署。
Migrate v1 to v2
- firebase cli 至少
12.00
版 - firebase-functions 至少
4.3.0
版
以上即使更新,也都持續支援第一代撰寫與部署,其餘的語法變更可以查看 firebase 文件。
如果功能上已經有同樣的 function name,直接部署的話會出現一些錯誤
Upgrading from GCFv1 to GCFv2 is not yet supported. Please delete your old function or wait for this feature to be ready.
他會直接請你先刪除舊的再重新部署,可以採用 CLI 進行刪除,也可以直接進到 GCP 內手動刪除。
2023/06/23 更
今天製作新功能的時候,才發現有些事件 v2 版本是還無法支援的,所以如果你有一些功能是需要監聽 Firebase 內的資料,例如使用者註冊時觸發等等,可能還是先用 v1 來實作。
參考資料
將第一代 Node.js 函數升級到第二代 | Cloud Functions for Firebase