管理功能


您可以使用 Firebase CLI 指令部署、刪除及修改函式 或在函式原始碼中設定執行階段選項

部署函式

如要部署函式,請執行以下 Firebase CLI 指令:

firebase deploy --only functions

根據預設,Firebase CLI 會將所有函式部署在 同時確保來源和來源。如果您的專案含有超過 5 個函式, 建議您搭配特定函式名稱使用 --only 旗標 方便您只部署 各個顏色或版本部署特定函式 這樣可以加快部署程序,避免 部署配額例如:

firebase deploy --only functions:addMessage,functions:makeUppercase

部署大量函式時,您可能會超過 以及接收 HTTP 429 或 500 錯誤訊息解題 可將函式部署在 10 組以下

如需可用完整清單,請參閱 Firebase CLI 參考資料 指令。

根據預設,Firebase CLI 會在 functions/ 資料夾中尋找 Cloud Build 觸發條件 會在您變更原始碼時自動啟動建構作業如有需要,您可以整理函式 或多組檔案之中

刪除函式

您可以透過下列方式刪除先前部署的函式:

  • 在 Firebase CLI 中透過 functions:delete 明確提出
  • 明確用於 Google Cloud 控制台
  • 默示

所有刪除作業 從實際工作環境移除函式前,會提示您進行確認。

Firebase CLI 中的明確函式刪除支援多個引數 以及函式 群組,並可讓您指定在特定區域執行的函式。 此外,您也可以覆寫確認提示。

# Delete all functions that match the specified name in all regions.
firebase functions:delete myFunction
# Delete a specified function running in a specific region.
firebase functions:delete myFunction --region us-east-1
# Delete more than one function
firebase functions:delete myFunction myOtherFunction
# Delete a specified functions group.
firebase functions:delete groupA
# Bypass the confirmation prompt.
firebase functions:delete myFunction --force

透過隱含函式刪除,firebase deploy 會剖析來源, 會從檔案中移除所有函式。

修改函式的名稱、區域或觸發條件

如果您要針對適用於 請按照本節所述步驟處理,以免遺失 事件。執行下列步驟前,請先確認 函式為「冪等」,因為 新版和舊版函式都會在 變更的延遲時間

重新命名函式

如要重新命名函式,請在來源中新建該函式的重新命名版本 然後執行兩個不同的部署指令第一個指令會部署 新命名的函式,第二個指令則移除先前部署的 版本。舉例來說,如果您使用 Node.js 函式 名為「webhook」的通知 變更為 webhookNew,請按照下列步驟修改程式碼:

// before
const functions = require('firebase-functions');

exports.webhook = functions.https.onRequest((req, res) => {
    res.send("Hello");
});

// after
const functions = require('firebase-functions');

exports.webhookNew = functions.https.onRequest((req, res) => {
    res.send("Hello");
});

接著執行下列指令,部署新函式:

# Deploy new function called webhookNew
firebase deploy --only functions:webhookNew

# Wait until deployment is done; now both webhookNew and webhook are running

# Delete webhook
firebase functions:delete webhook

變更函式的區域或區域

如果您要變更 區域的指定區域 處理正式環境流量的函數,如要避免事件遺失, 執行下列步驟:

  1. 重新命名函式,並視需要變更區域或區域。
  2. 部署重新命名的函式,以便在兩組區域中暫時執行相同的程式碼。
  3. 刪除前一個函式。

舉例來說 名為 webhook,目前位於 us-central1 的預設函式區域,想遷移至 asia-northeast1,您必須先修改原始碼,才能將 並修改區域。

// before
const functions = require('firebase-functions');

exports.webhook = functions
    .https.onRequest((req, res) => {
            res.send("Hello");
    });

// after
const functions = require('firebase-functions');

exports.webhookAsia = functions
    .region('asia-northeast1')
    .https.onRequest((req, res) => {
            res.send("Hello");
    });

接著執行下列指令來部署:

firebase deploy --only functions:webhookAsia

現在有兩個相同的函式正在執行:webhookus-central1 中執行。 而 webhookAsia 正在 asia-northeast1 中執行。

然後刪除 webhook

firebase functions:delete webhook

現在只有一個函式 - webhookAsia,且在 asia-northeast1 中執行。

變更函式的觸發條件類型

隨著您逐步開發 Cloud Functions for Firebase 的部署作業 因為各種原因而需要變更函式的觸發條件類型。例如: 建議變更一種 Firebase 即時資料庫 複製到另一種類型的 Cloud Firestore 事件

您無法只透過變更 並執行 firebase deploy。為避免發生錯誤 透過以下程序變更函式的觸發條件類型:

  1. 修改原始碼,加入包含所需觸發條件類型的新函式。
  2. 部署函式,會導致新舊函式暫時同時執行。
  3. 使用 Firebase CLI 將舊函式從實際工作環境中刪除。

例如,如果您有名為 objectChanged 的 Node.js 函式, 「onChange」事件類型,如要變更為「onFinalize」,請先重新命名 函式,然後編輯函式,使其包含 onFinalize 事件類型。

// before
const functions = require('firebase-functions');

exports.objectChanged = functions.storage.object().onChange((object) => {
    return console.log('File name is: ', object.name);
});

// after
const functions = require('firebase-functions');

exports.objectFinalized = functions.storage.object().onFinalize((object) => {
    return console.log('File name is: ', object.name);
});

接著執行下列指令,先建立新函式,然後再刪除舊函式:

# Create new function objectFinalized
firebase deploy --only functions:objectFinalized

# Wait until deployment is done; now both objectChanged and objectFinalized are running

# Delete objectChanged
firebase functions:delete objectChanged

設定執行階段選項

Cloud Functions for Firebase 可讓您選取 Node.js 等執行階段選項 執行階段版本和每個函式的逾時時間、記憶體配置和最小/最大 函式執行個體。

根據最佳做法,建議您開啟這些選項 (Node.js 版本除外) 函式程式碼中的設定物件。這個 RuntimeOptions 是函式執行階段選項的可靠資料來源, 透過其他方法 (例如透過 Google Cloud 控制台) 設定的覆寫選項 或 gcloud CLI)。

如果您的開發工作流程需要透過以下方式手動設定執行階段選項: Google Cloud 控制台或 gcloud CLI,您「不」想要 請將 preserveExternalChanges 選項設為 true。 將這個選項設為 true 時,Firebase 會合併 程式碼和目前部署的函式設定。 下列優先順序:

  1. 函式程式碼中已設定選項:覆寫外部變更。
  2. 函式程式碼中的選項設為 RESET_VALUE:以預設值覆寫外部變更。
  3. 選項未在函式程式碼中設定,而是在目前部署的函式中設定:請使用已部署函式中指定的選項。

不建議使用 preserveExternalChanges: true 選項 ,因為 程式碼將不��是執行階段選項的完整可靠來源 函式。如果可以的話,請查看 Google Cloud 控制台或使用 gcloud 查看函式的完整設定。

設定 Node.js 版本

您可以透過 Cloud Functions 專用的 Firebase SDK 選擇 Node.js 執行階段。 您可以選擇只在執行階段執行專案中的所有函式 環境:

  • Node.js 20 (預先發布版)
  • Node.js 18
  • Node.js 16
  • Node.js 14

如要設定 Node.js 版本:

您可以在 package.jsonengines 欄位中設定版本 該檔案是在初始化期間建立的 functions/ 目錄中。 舉例來說 18 版,請在 package.json 中編輯這一行:

  "engines": {"node": "18"}

如果您使用 Yarn 套件管理工具,或有其他 engines 欄位,您可以在以下位置設定 Cloud Functions 的 Firebase SDK 執行階段: 改為使用 firebase.json

  {
    "functions": {
      "runtime": "nodejs18" // or nodejs14, nodejs16 or nodejs20
    }
  }

CLI 使用 firebase.json 中設定的值,而非任何值或 您在 package.json 中單獨設定的範圍。

升級 Node.js 執行階段

如要升級 Node.js 執行階段:

  1. 請確認您的專案位於 Blaze 定價方案
  2. 確認您使用的是 Firebase CLI v11.18.0 以上版本。
  3. 變更先前建立的 package.json 檔案內的 engines 值。 functions/ 目錄, 舉例來說,如果您從 16 版升級至第 18 版, 看起來應該像這樣:"engines": {"node": "18"}
  4. 視需要使用 Firebase 本機模擬器套件
  5. 重新部署所有函式。

控管資源調度行為

根據預設,Cloud Functions for Firebase 會調整運作中的執行個體數量 依據傳入要求的數量,甚至可能將資源縮減至零 執行個體會發生在流量減少的時候不過,如果您的應用程式需要 如要限製冷啟動的次數,您可以變更 您可以指定容器執行個體數量下限 保持暖機狀態,隨時可供處理要求。

同樣地,您可以設定上限,限制 回應傳入要求。使用這項設定來控管費用 或限制後端服務的連線數量,例如 資料庫

減少冷啟動次數

如要設定原始碼中某個函式的執行個體數量下限,請使用 runWith 方法。此方法接受符合 RuntimeOptions 介面,用於定義 minInstances 的值。例如: 這個函式會設定至少 5 個執行個體來保持暖機狀態:

exports.getAutocompleteResponse = functions
    .runWith({
      // Keep 5 instances warm for this latency-critical function
      minInstances: 5,
    })
    .https.onCall((data, context) => {
      // Autocomplete a user's search term
    });

設定 minInstances 的值時,請注意下列事項:

  • 如果 Cloud Functions for Firebase 將應用程式擴充至 minInstances 設定以上, 在每個執行個體超過該門檻時,我們就會啟動冷啟動
  • 對於流量暴增的應用程式而言,冷啟動的效果最為嚴重。如果您的 應用程式的流量高峰,而您將 minInstances 值設為夠高。 每當流量增加時,冷啟動都會降低 縮短延遲時間如果應用程式的流量穩定,冷啟動就不會 可能會嚴重影響成效
  • 在實際工作環境中設定最低執行個體是合理的做法,但 通常應避免在測試環境中使用。如要在 仍能減少正式環境專案中的冷啟動次數 可根據 FIREBASE_CONFIG 環境變數設定 minInstances

    // Get Firebase project id from `FIREBASE_CONFIG` environment variable
    const envProjectId = JSON.parse(process.env.FIREBASE_CONFIG).projectId;
    
    exports.renderProfilePage = functions
        .runWith({
          // Keep 5 instances warm for this latency-critical function
          // in production only. Default to 0 for test projects.
          minInstances: envProjectId === "my-production-project" ? 5 : 0,
        })
        .https.onRequest((req, res) => {
          // render some html
        });
    

限制函式的執行個體數量上限

如要在函式原始碼中設定執行個體數量上限,請使用 runWith 方法。此方法接受符合 RuntimeOptions 介面,當中定義了 maxInstances 的值。例如,這個函式會將上限設為 100 執行個體以避免過多假想舊資料庫:

exports.mirrorOrdersToLegacyDatabase = functions
    .runWith({
      // Legacy database only supports 100 simultaneous connections
      maxInstances: 100,
    })
    .firestore.document("orders/{orderId}")
    .onWrite((change, context) => {
      // Connect to legacy database
    });

如果 HTTP 函式提高至 maxInstances 的限制,新的要求就會 排入佇列 30 秒,然後遭到拒絕,回應代碼為 如果屆時沒有任何執行個體,則為 429 Too Many Requests

如要進一步瞭解使用執行個體上限設定的最佳做法,請參閱 這些 使用 maxInstances 的最佳做法

設定逾時和記憶體分配

在某些情況下,您的函式對於長時間逾時可能有特殊需求 或大量記憶體配置您可以在 Google Cloud 控制台或函式原始碼中 (僅限 Firebase)。

如要在函式原始碼中設定記憶體分配和逾時,請使用 runWith 為 Cloud Functions 2.0.0 專用 Firebase SDK 導入的參數。這個執行階段選項接受 符合 RuntimeOptions 介面,用於定義 timeoutSecondsmemory 的值。 舉例來說,這個儲存空間函式會使用 1 GB 的記憶體,並在之後逾時 300 秒:

exports.convertLargeFile = functions
    .runWith({
      // Ensure the function has enough memory and time
      // to process large files
      timeoutSeconds: 300,
      memory: "1GB",
    })
    .storage.object()
    .onFinalize((object) => {
      // Do some complicated things that take a lot of memory and time
    });

timeoutSeconds 的最大值是 540 或 9 分鐘。 分配給函式的記憶體量 會對應至分配的 CPU 函式的有效值清單,如下方的 memory 有效值清單中所述:

  • 128MB - 200 MHz
  • 256MB - 400 MHz
  • 512MB - 800 MHz
  • 1GB - 1.4 GHz
  • 2GB - 2.4 GHz
  • 4GB - 4.8 GHz
  • 8GB - 4.8 GHz

如何在 Google Cloud 控制台中設定記憶體分配和逾時:

  1. 在 Google Cloud 控制台中,選取「Cloud Functions」: 左側選單
  2. 在函式清單中按一下函式名稱以選取函式。
  3. 按一下頂端選單中的「編輯」圖示。
  4. 從標示為「Memory allocation」的下拉式選單中,選取記憶體分配情形
  5. 按一下「更多」顯示進階選項,然後在「逾時」文字方塊中輸入秒數。
  6. 按一下「Save」(儲存) 以更新函式。