Azure Functions 中的部署技術

您可以使用一些不同的技術,將 Azure Functions 專案程式代碼部署至 Azure。 本文提供可供您使用的部署方法概觀,以及各種案例中最佳方法使用的建議。 它也提供基礎部署技術的完整清單和重要詳細數據。

部署方法

您用來在 Azure 中將程式代碼發佈至函式應用程式的部署技術取決於您的特定需求和開發週期中的觀點。 例如,在開發和測試期間,您可以直接從開發工具部署,例如 Visual Studio Code。 當您的應用程式在生產環境中時,您更有可能從原始檔控制持續發佈,或使用自動化發佈管線來發佈,其中包括驗證和測試。

下表說明程式代碼專案的可用部署方法。

部署類型 方法 最適合...
工具型 Visual Studio Code 發佈
Visual Studio 發佈
核心工具發佈
開發期間部署和其他即興部署。 使用 本機開發工具隨選部署程序代碼。
App Service 受控 部署中心 (CI/CD)
容器部署
從原始檔控制或容器登錄進行持續部署 (CI/CD)。 部署是由 App Service 平台 (Kudu) 管理。
外部管線 Azure Pipelines
GitHub Actions
包含驗證、測試,以及必須在自動化部署中執行之其他動作的生產管線。 部署是由管線所管理。

特定部署應根據特定案例使用最佳技術。 許多部署方法都是以 zip 部署為基礎,建議進行部署。

部署技術可用性

部署方法也取決於您執行函式應用程式的主控方案和作業系統。
Functions 目前提供三個主控方案:

每個方案都有不同的行為。 並非所有部署技術都適用於每個裝載方案和操作系統。 此圖表提供所支援部署技術的相關信息:

部署技術 Windows 使用量 Windows 進階版 Windows 專用 Linux 使用量 Linux 進階版 Linux 專用
外部套件 URL1
Zip 部署
Docker 容器
原始檔控制
本機 Git1
FTPS1
入口網站內編輯2

1 不建議使用需要您 手動同步觸發程式的 部署技術。
2 當程式代碼從入口網站外部部署至函式應用程式時,會停用入口網站內編輯。 如需詳細資訊,包括入口網站內編輯的語言支援詳細數據,請參閱 語言支援詳細數據

重要概念

某些重要概念對於瞭解 Azure Functions 中的部署運作方式至關重要。

觸發同步處理

當您變更任何觸發程式時,Functions 基礎結構必須注意變更。 許多部署技術都會自動進行同步處理。 不過,在某些情況下,您必須手動同步觸發程式。

使用這些部署選項時,您必須手動同步觸發程式:

您可以使用下列三種方式之一來同步觸發程式:

  • 在 Azure 入口網站 中重新啟動函式應用程式。
  • 使用主要金鑰將 HTTP POST 要求傳送至 https://{functionappname}.azurewebsites.net/admin/host/synctriggers?code=<API_KEY>
  • 將 HTTP POST 要求傳送至 https://management.azure.com/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP_NAME>/providers/Microsoft.Web/sites/<FUNCTION_APP_NAME>/syncfunctiontriggers?api-version=2016-08-01。 將佔位元取代為您的訂用帳戶標識碼、資源組名和函式應用程式的名稱。 此要求需要要求標頭中的Authorization存取令牌。

當您使用外部套件 URL 進行部署時,您必須手動重新啟動函式應用程式,以在套件變更時完全同步您的部署,而不需變更包含初始部署的 URL。

當函式應用程式受到輸入網路限制保護時,同步觸發程式端點只能從虛擬網路內的用戶端呼叫。

遠端組建

Azure Functions 可以在 ZIP 部署之後收到的程式代碼上自動執行組建。 這些組建會根據您的應用程式是在 Windows 或 Linux 上執行而有所不同。

在 Windows 上執行的所有函式應用程式都有小型管理應用程式,這是 scm Kudu 所提供的網站。 此網站會處理 Azure Functions 的大部分部署和建置邏輯。

當應用程式部署至 Windows 時,即會執行特定語言命令,例如 dotnet restore (C#) 或 npm install (JavaScript)。

在部署期間使用遠端組建時,適用下列考慮:

  • 在取用方案中,Linux 上執行的函式應用程式支援遠端組建。 不過,這些應用程式的部署選項會受到限制,因為它們沒有 scm (Kudu) 網站。
  • Linux上執行 進階版方案或在專用 (App Service) 方案中執行的函式應用程式確實有一個 scm (Kudu) 網站,但與 Windows 相比有限。
  • 當應用程式使用 run-from-package 時,不會執行遠端組建。 若要瞭解如何在這些情況下使用遠端組建,請參閱 Zip 部署
  • 當您的應用程式在提供功能之前建立時,可能會有遠端建置的問題(2019 年 8 月 1 日)。 針對較舊的應用程式,請建立新的函式應用程式,或執行 az functionapp update --resource-group <RESOURCE_GROUP_NAME> --name <APP_NAME> 以更新函式應用程式。 此命令可能需要兩次嘗試才能成功。

應用程式內容記憶體

數個部署方法會將已部署或建置的應用程式承載儲存在與函式應用程式相關聯的記憶體帳戶上。 函式會在設定時嘗試使用 Azure 檔案儲存體 內容共用,但某些方法會改為將承載儲存在與AzureWebJobsStorage聯機相關聯的 Blob 記憶體實例中。 請參閱下一節所涵蓋之每個部署技術的儲存位置段落中的 詳細數據

重要

儲存體帳戶可用來儲存重要的應用程式資料,有時還包含應用程式的程式碼本身。 您應該限制其他應用程式和使用者存取儲存體帳戶。

部署技術詳細數據

Azure Functions 中提供下列部署方法。

外部套件 URL

您可以使用外部套件 URL 來參考包含函式應用程式的遠端套件 (.zip) 檔案。 檔案會從提供的 URL 下載,而且應用程式會在 [從套件執行] 模式中執行。

如何使用它: 新增 WEBSITE_RUN_FROM_PACKAGE 至您的應用程式設定。 此設定的值應該是 URL(您要執行的特定套件檔案位置)。 您可以在入口網站或使用 Azure CLI 來新增設定。

如果您使用 Azure Blob 記憶體,請使用具有共用存取簽章的私人容器(SAS)來授與 Functions 對套件的存取權。 每當應用程式重新啟動時,就會擷取內容的複本。 您的參考在應用程式的存留期內必須有效。

使用時機:如果使用者不希望遠端組建發生,外部套件 URL 是取用方案中在 Linux 上執行的 Azure Functions 唯一支援的部署方法。 當您部署函式應用程式參考的套件檔案時,您必須 手動同步觸發程式,包括初始部署。 當您變更套件檔案的內容,而不是 URL 本身時,您也必須重新啟動函式應用程式來同步觸發程式。

儲存應用程式內容的位置: 應用程式內容會儲存在指定的URL。 這可能位於 Azure Blob 上,可能是連線所 AzureWebJobsStorage 指定的記憶體帳戶。 某些用戶端工具預設會部署至此帳戶中的 Blob。 例如,針對 Linux 取用應用程式,Azure CLI 會嘗試透過儲存在 所指定 AzureWebJobsStorage帳戶上 Blob 中的套件進行部署。

Zip 部署

使用 zip deploy 將包含函式應用程式的.zip檔案推送至 Azure。 您可以選擇性地將應用程式設定為從套件開始執行,或指定遠端組建發生。

作法:使用您慣用的用戶端工具進行部署:Visual Studio CodeVisual Studio,或使用 Azure Functions Core Tools 從命令行進行部署。 根據預設,這些工具會使用 zip 部署,並從 套件執行。 Core Tools 和 Visual Studio Code 擴充功能會在部署至 Linux 時啟用 遠端建置 。 若要手動將.zip檔案部署至函式應用程式,請遵循從.zip檔案或 URL 部署中的指示。

當您使用 zip deploy 進行部署時,您可以將應用程式設定為 從套件執行。 若要從封裝執行,請將 WEBSITE_RUN_FROM_PACKAGE 應用程式設定值設定為 1。 我們建議使用 zip 部署。 它會為您的應用程式產生更快的載入時間,而它是 VS Code、Visual Studio 和 Azure CLI 的預設值。

使用時機: Zip 部署是 Azure Functions 的建議部署技術。

儲存應用程式內容的位置:根據預設,來自 zip 部署的應用程式內容會儲存在檔案系統上,而檔案系統可能會由建立函式應用程式時所指定的記憶體帳戶 Azure 檔案儲存體 支援。 在 Linux 取用中,應用程式內容會改為保存在連線所 AzureWebJobsStorage 指定的記憶體帳戶中的 Blob 上。

Docker 容器

您可以部署在 Linux 容器中執行的函式應用程式。

如何使用它:在Linux容器中建立您的函式,然後將容器部署到 Azure Functions 或其他容器主機中的 進階版 或專用方案。 使用 Azure Functions Core Tools 為您的專案建立自定義的 Dockerfile,讓您用來建置容器化函式應用程式。 您可以在下列部署中使用容器:

使用時機: 當您需要更充分掌控函式應用程式執行所在的 Linux 環境,以及裝載容器的位置時,請使用 Docker 容器選項。 此部署機制僅適用於在Linux上執行的函式。

儲存應用程式內容的位置: 應用程式內容會儲存在指定的容器登錄中做為映像的一部分。

原始檔控制

您可以啟用函式應用程式與原始程式碼存放庫之間的持續整合。 啟用原始檔控制后,連線來源存放庫中程式代碼的更新會觸發從存放庫部署最新的程序代碼。 如需詳細資訊,請參閱 Azure Functions 的持續部署。

如何使用它: 從原始檔控制設定發佈最簡單的方式,是從入口網站的 Functions 區域中的部署中心。 如需詳細資訊,請參閱 Azure Functions 的持續部署。

使用時機: 使用原始檔控制是小組在其函式應用程式上共同作業的最佳做法。 原始檔控制是一個很好的部署選項,可啟用更複雜的部署管線。 原始檔控制通常會在預備位置上啟用,這可以在從存放庫驗證更新之後交換至生產環境。 如需詳細資訊,請參閱 Azure Functions 部署位置

儲存應用程式內容的位置:應用程式內容位於原始檔控制系統中,但從 本機複製和建置的應用程式內容會儲存在應用程式檔案系統上,而應用程式檔案系統可能會由建立函式應用程式時所指定的記憶體帳戶 Azure 檔案儲存體 支援。

本機 Git

您可以使用本機 Git,使用 Git 將程式代碼從本機電腦推送至 Azure Functions。

如何使用:請遵循本機 Git 部署中的指示來 Azure App 服務。

使用時機:若要減少錯誤的機會,您應該避免使用需要手動同步觸發程式額外步驟的部署方法。 盡可能使用 zip 部署

儲存應用程式內容的位置:應用程式內容會儲存在檔案系統上,這可能由建立函式應用程式時指定的記憶體帳戶 Azure 檔案儲存體 所支援。

FTP/S

雖然不建議使用此部署方法,但您可以使用 FTP/S 直接將檔案傳送至 Azure Functions。 當您不打算使用 FTP 時,應該停用它。 如果您選擇使用 FTP,則應該強制使用 FTPS。 若要瞭解如何在 Azure 入口網站 中,請參閱強制執行 FTPS

作法:請遵循 FTPS 部署設定中的指示,取得您可以使用 FTPS 部署至函式應用程式的 URL 和認證。

使用時機:若要減少錯誤的機會,您應該避免使用需要手動同步觸發程式額外步驟的部署方法。 盡可能使用 zip 部署

儲存應用程式內容的位置:應用程式內容會儲存在檔案系統上,這可能由建立函式應用程式時所指定的記憶體帳戶 Azure 檔案儲存體 支援。

入口網站編輯

在入口網站型編輯器中,您可以直接編輯函式應用程式中的檔案(基本上每次儲存變更時都部署)。

如何使用:若要能夠在 Azure 入口網站 中編輯您的函式,您必須在入口網站中建立函式。 若要保留單一事實來源,使用任何其他部署方法可讓您的函式只讀,並防止繼續編輯入口網站。 若要回到您可以在 Azure 入口網站 中編輯檔案的狀態,您可以手動將編輯模式重新開啟,Read/Write並移除任何部署相關的應用程式設定(例如 WEBSITE_RUN_FROM_PACKAGE)。

使用時機: 入口網站是開始使用 Azure Functions 的好方法。 如需更進階的開發工作,建議您使用下列其中一個用戶端工具:

儲存應用程式內容的位置:應用程式內容會儲存在檔案系統上,這可能由建立函式應用程式時所指定的記憶體帳戶 Azure 檔案儲存體 支援。

下表顯示支援入口網站內編輯的作業系統和語言:

語言 Windows 使用量 Windows 進階版 Windows 專用 Linux 使用量 Linux 進階版 Linux 專用
C#1
Java
JavaScript (Node.js)
Python2
PowerShell
TypeScript (Node.js)

1 只有 C# 文稿檔案支援入口網站內編輯,該檔案會與主機進行同進程執行。 如需詳細資訊,請參閱 Azure Functions C# 指令碼 (.csx) 開發人員參考
2 入口網站內編輯僅支援 v1 Python 程式設計模型

部署行為

當您將更新部署至函式應用程式程式代碼時,目前執行的函式會終止。 部署完成之後,會載入新的程式碼以開始處理要求。 檢閱 改善 Azure Functions 的效能和可靠性,以瞭解如何撰寫無狀態和防禦函式。

如果您需要進一步控制此轉換,您應該使用部署位置。

部署位置

當您將函式應用程式部署至 Azure 時,可以部署到個別的部署位置,而不是直接部署到生產環境。 部署至部署位置,然後在驗證之後交換至生產環境,是設定 持續部署的建議方式。

部署至位置的方式取決於您使用的特定部署工具。 例如,使用 Azure Functions Core Tools 時,您會包含--slot 選項來指出命令的特定位置 func azure functionapp publish 名稱。

如需部署位置的詳細資訊,請參閱 Azure Functions 部署位置 檔以取得詳細數據。

下一步

請閱讀下列文章,以深入瞭解如何部署函式應用程式: