Azure Functions 的儲存考量事項

當您建立函數應用程式執行個體時,Azure Functions 需要 Azure 儲存體帳戶。 您的函數應用程式可使用下列儲存體服務:

儲存體服務 函式使用方式
Azure Blob 儲存體 維護繫結狀態和函式金鑰。
Durable Functions 的工作中樞也會使用。
Azure 檔案 用來在取用方案中儲存和執行函式應用程式程式碼的檔案共用,以及進階版方案
預設會設定 Azure 檔案儲存體,但在某些情況下,您可以 建立應用程式,而不 Azure 檔案儲存體
Azure 佇列儲存體 Durable Functions 的工作中樞使用。
Azure 資料表儲存體 Durable Functions 的工作中樞使用。

重要

使用耗用量/進階版主控方案時,您的函式程式碼和系結設定檔會儲存在主要儲存體帳戶的 Azure 檔案儲存體中。 當您刪除主要儲存體帳戶時,會刪除此內容且無法復原。

儲存體帳戶的需求

建立函數應用程式時,您必須建立或連結支援 Blob、「佇列」及「表格」儲存體的一般用途「Azure 儲存體」帳戶。 這是因為 Functions 依賴「Azure 儲存體」來進行作業,例如管理觸發程序和記錄函數執行。 某些儲存體帳戶不支援佇列和資料表。 這些帳戶包括僅限 blob 的儲存體帳戶和 Azure 進階儲存體。

若要深入了解儲存體帳戶類型,請參閱 Azure 儲存體服務簡介

雖然您可以在函數應用程式中使用現有的儲存體帳戶,但您必須確定它符合這些需求。 在 Azure 入口網站中建立為函數應用程式建立流程一部分的儲存體帳戶,保證符合這些儲存體帳戶需求。 在入口網站中,當您在建立函數應用程式時選擇現有的儲存體帳戶時,不支援的帳戶會被篩選掉。 在此流程中,您只允許在與您建立的函式應用程式相同的區域中,選擇現有的儲存體帳戶。 若要深入瞭解,請參閱儲存體的帳戶位置

儲存體帳戶指引

每個函式應用程式都需要有儲存體帳戶才能運作。 如果該帳戶已刪除,您的函數應用程式就不會運作。 若要為儲存體相關問題疑難排解,請參閱如何為儲存體相關問題疑難排解。 下列其他考慮適用于函數應用程式所使用的儲存體帳戶。

儲存體帳戶位置

為了達到最佳效能,您的函數應用程式應該使用相同區域中的儲存體帳戶,以減少延遲。 Azure 入口網站會強制執行這種最佳做法。 如果基於某些原因,您需要在與函式應用程式不同的區域中使用儲存體帳戶,您必須在入口網站外部建立函數應用程式。

儲存體帳戶連線設定

儲存體帳戶連線會在 AzureWebJobsStorage application setting 中維護。

當您重新產生儲存體金鑰時,必須更新儲存體帳戶連接字串。 在此深入了解儲存體金鑰管理

共用的儲存體帳戶

可能有多個函數應用程式共用相同的儲存體帳戶,而沒有任何問題。 例如,在 Visual Studio 中,您可以使用 Azure 儲存體模擬器開發多個應用程式。 在此情況下,模擬器的作用就像單一儲存體帳戶。 您的函數應用程式所使用的相同儲存體帳戶也可用來儲存您的應用程式資料。 不過,在實際執行環境中,這個方法不一定理想。

最佳化儲存體效能

若要將效能最大化,請針對每個函式應用程式使用個別的儲存體帳戶。 當您有 Durable Functions 或事件中樞觸發的函式時,這一點特別重要,這兩個函式都會產生大量的儲存體交易。 當您的應用程式邏輯與 Azure 儲存體互動 (不論是直接 (使用儲存體 SDK) 或透過其中一個儲存體繫結) 時,您應該使用專用的儲存體帳戶。 例如,若有事件中樞觸發的函式將一些資料寫入 Blob 儲存體,請使用兩個儲存體帳戶—一個用於函式應用程式,另一個用於函式所儲存的 Blob。

儲存體資料加密

Azure 儲存體會加密待用儲存體帳戶中的所有資料。 如需詳細資訊,請參閱待用資料的 Azure 儲存體加密

根據預設,資料是以使用 Microsoft 管理的金鑰加密。 若要進一步控制加密金鑰,您可以提供客戶管理的金鑰,以用於加密 blob 和檔案資料。 這些金鑰必須存在於 Azure Key Vault 中,Functions 才能存取儲存體帳戶。 若要深入了解,請參閱使用客戶管理的金鑰待用加密

區域內資料落地

當所有客戶資料都必須保留在單一區域內時,與函數應用程式相關聯的儲存體帳戶必須是具有 區域內冗余的儲存體帳戶。 區域內多餘的儲存體帳戶也必須搭配 Azure Durable Functions使用。

當裝載于內部負載平衡的 App Service 環境 (ASE) 時,其他平臺管理的客戶資料只會儲存在區域內。 若要深入瞭解,請參閱 ASE 區域冗余

建立沒有 Azure 檔案儲存體的應用程式

預設會針對進階版和非 Linux 使用量方案設定 Azure 檔案儲存體,以作為大規模案例中的共用檔案系統。 平臺會使用檔案系統來處理某些功能,例如記錄串流,但主要是確保已部署的函式承載一致。 使用外部套件 URL 部署應用程式時,會從個別的唯讀檔案系統提供應用程式內容,因此如有需要,可以省略 Azure 檔案儲存體。 在這種情況下,會提供可寫入的檔案系統,但不保證會與所有函數應用程式實例共用。

如果未使用 Azure 檔案儲存體,您必須考慮下列事項:

  • 您必須從外部套件 URL 部署
  • 您的應用程式無法依賴共用的可寫入檔案系統
  • 應用程式無法使用函數執行時間 v1
  • 用戶端中的記錄串流體驗(例如 Azure 入口網站預設為檔案系統記錄)。 您應改為依賴 Application Insights 記錄。

如果上述已正確的考慮,您可以建立應用程式,而不 Azure 檔案儲存體。 建立函數應用程式,而不指定 WEBSITE_CONTENTAZUREFILECONNECTIONSTRINGWEBSITE_CONTENTSHARE 應用程式設定。

掛接檔案共用

這項功能僅適用于在 Linux 上執行時的最新狀態。

您可以將現有的 Azure 檔案儲存體共用掛接至 Linux 函數應用程式。 藉由將共用掛接至 Linux 函式應用程式,您可以利用現有的機器學習模型或函式中的其他資料。 您可以使用 az webapp config storage-account add 命令,將現有的共用掛接到您的 Linux 函數應用程式。

在此命令中,share-name 是現有 Azure 檔案儲存體共用的名稱,而且 custom-id 可以是掛接到函數應用程式時,唯一定義共用的任何字串。 此外,mount-path 是在函數應用程式中存取共用的路徑。 mount-path 的格式必須是 /dir-name,而且開頭不可為 /home

如需完整範例,請參閱建立 Python 函數應用程式並掛接 Azure 檔案儲存體共用中的指令碼。

目前,僅支援 AzureFilesstorage-type。 您只能將五個共用掛接至指定的函數應用程式。 當儲存體帳戶位於不同區域時,掛接檔案共用可能會讓冷啟動時間至少增加 200-300 毫秒,甚至更多。

掛接的共用可供 mount-path 指定的函式程式碼使用。 例如,當 mount-path/path/to/mount 時,您可以根據檔案系統 API 存取目標目錄,如以下 Python 範例所示:

import os
...

files_in_share = os.listdir("/path/to/mount")

後續步驟

深入了解 Azure Functions 裝載選項。