你可以使用多種不同的技術來部署你的 Azure Functions 專案程式碼到 Azure。 本文提供可供您使用的部署方法概觀,以及各種案例中最佳使用方法的建議。 同時也提供底層部署技術的全面清單及關鍵細節。
部署方法
你用來在 Azure 中發佈程式碼到函式應用程式的部署技術,取決於你的具體需求以及開發週期的哪個階段。 例如,在開發和測試過程中,你可以直接從開發工具(如 Visual Studio Code)部署。 當您的應用程式位於生產環境中時,更可能從原始檔控制中或使用自動化發佈管線持續發佈,其中包括驗證與測試。
下表描述程式碼專案的可用部署方法。
| 部署類型 | 方法 | 適用對象 |
|---|---|---|
| 以工具為基礎 |
Azure CLI Visual Studio Code 發佈 Visual Studio 發佈 核心工具發佈 |
開發與其他即興部署期間的部署。 利用 本地開發工具按需部署你的程式碼。 |
| 平台代控 |
部署中心(CI/CD) 容器部署 |
來自原始檔控制或容器登錄的持續部署 (CI/CD)。 主機平台負責管理部署。 |
| 外部管線 |
Azure Pipelines GitHub Actions(GitHub 行動) |
生產管線包含驗證、測試及其他必須作為自動化部署一部分執行的動作。 管線負責管理部署。 |
使用最適合你情況的技術。 對於支援的主機方案,許多部署方法使用 zip 部署。
部署技術可用性
部署方法也取決於您執行函式應用程式的主控方案和作業系統。
Azure Functions 目前提供了五個用於裝載函式應用程式的選項:
每個方案都有不同的行為。 並非所有部署技術都適用於每個主控方案和作業系統。 此圖表提供所支援部署技術的相關資訊:
| 部署技術 | 彈性使用量 | 使用量 | 彈性進階 | 專用 | 容器應用程式 |
|---|---|---|---|---|---|
| Flex Consumption 套件的部署 | 支援 | 不支援 | 不支援 | 不支援 | 不支援 |
| ZIP 部署 | 不支援 | 支援 | 支援 | 支援 | 不支援 |
| 外部套件 URL1 | 不支援 | 支援 | 支援 | 支援 | 不支援 |
| 容器映像(Docker) | 不支援 | 僅限 Linux | 僅限 Linux | 僅限 Linux | 支援 |
| 原始檔控制 | 不支援 | 僅限 Windows | 支援 | 支援 | 不支援 |
| 本地 Git1 | 不支援 | 僅限 Windows | 支援 | 支援 | 不支援 |
| FTPS1 | 不支援 | 僅限 Windows | 支援 | 支援 | 不支援 |
| 入口網站內編輯2 | 不支援 | 支援 | 支援 | 支援 | 不支援 |
- 需要手動同步觸發器的部署技術並不建議使用。
- 當程式碼從入口外部署到 function 應用程式時,入口網站內的編輯功能會被停用。 如需詳細資訊,包括入口網站內編輯的語言支援詳細資料,請參閱語言支援詳細資料。
請在本文頂端選擇您的主機方案,以查看適用於您功能應用程式的部署技術與行為。
重要概念
有些關鍵概念對於理解 Azure Functions 中的部署運作至關重要。
依主機方案儲存應用程式內容
部署應用程式內容的位置取決於主機計畫與部署技術:
| 主機方案 | 應用程式內容儲存體 |
|---|---|
| 彈性使用量 | 您為函式應用程式設定的 Blob 部署容器。 |
| 使用量、彈性進階版和專用 | 應用程式檔案系統、Azure 檔案儲存體 內容分享,或外部套件 URL,視部署技術而定。 |
| Azure 容器應用程式 | 儲存在容器登錄檔中的容器映像。 |
觸發同步
當部署新增、移除或變更函式或觸發設定時,函式基礎架構必須更新函式應用程式的觸發元資料。 這種同步對許多部署技術來說是自動發生的。 然而,在某些情況下,您必須手動同步觸發程序。
使用這些部署選項時,您必須手動同步觸發器:
你可以用以下其中一種方式手動同步觸發器:
在 Azure 入口中重新啟動你的函式應用程式。 Functions 主機會在應用程式啟動後執行背景觸發同步。
使用
az rest(部分機器翻譯) 命令來傳送會呼叫syncfunctiontriggersAPI 的 HTTP POST 要求,如下列範例所示:az rest --method post --url https://management.azure.com/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.Web/sites/<APP_NAME>/syncfunctiontriggers?api-version=2016-08-01
請在同步觸發操作時考慮以下幾點:
- 每當您使用相同的外部套件 URL 部署更新版本的部署套件時,都必須手動重新啟動您的函式應用程式。
- 對於在 Consumption 或 Elastic Premium 方案中執行的應用程式,在下列情況下,您也必須手動同步觸發程序:
- 當部署是透過使用 ARM 範本、Bicep 或 Terraform 檔案的資源管理員型部署,並採用外部套件 URL 時。
- 當您使用相同的外部套件 URL 在原地更新部署套件時,
- 當你對現有的功能應用程式加上網路限制時,必須保證能連接到應用程式設定中
AzureWebJobsStorage預設的主機儲存帳號。 欲了解更多資訊,請參閱 如何使用帶有 Azure Functions 的安全儲存帳戶。
遠端組建
你可以在部署期間請求 Azure Functions 遠端建置你的程式碼專案。 在這些情境下,請請求遠端建置,而非本地建置:
- 您正在將應用程式部署至您在 Windows 電腦上開發的 Linux 架構函數應用程式中。 這種情況在 Python 應用程式開發中很常見。 當你在 Windows 本地建置部署套件時,可能會遇到錯誤的函式庫。
- 您的專案相依於自訂套件索引。
- 您想要縮減部署套件的大小。
你如何申請遠端建置,取決於你的應用程式是在 Windows 或 Linux 上執行 Azure。
所有在 Windows 上執行的功能應用程式都有配套部署網站。 這個網站負責 Azure Functions 的大部分部署與建置邏輯。
當你將應用程式部署到 Windows 時,部署程序會執行特定語言的指令,例如 dotnet restore(C#)或 npm install(JavaScript)。
在部署期間使用遠端建置時,適用下列考量:
- 在使用者方案中,Linux 上執行的函數應用程式支援遠端組建。 不過,這些應用程式的部署選項有限,因為它們沒有配套的部署網站。
- 在 Linux 上運行的 Elastic Premium 方案或 Dedicated (App Service) 方案的功能應用程式確實有配套部署網站,但相較於 Windows 有限。
- 要求遠端建置時,不要設定
WEBSITE_RUN_FROM_PACKAGE。 對於 Linux Consumption、Elastic Premium 和 Dedicated 方案應用程式,請使用 Linux 標籤中描述的部署設定來啟用遠端建置。部署過程可以將建置輸出打包,並設定應用程式從該套件執行。 - 如果您的應用程式是在這項功能推出之前建立的(2019 年 8 月 1 日),您可能會遇到遠端建置方面的問題。 對於較舊的應用程式,請建立新的函式應用程式,或執行
az functionapp update --resource-group <RESOURCE_GROUP_NAME> --name <APP_NAME>來更新函式應用程式。 此命令可能需要嘗試兩次才能成功。
遠端組建
對於 Flex Consumption,請在啟動部署時傳入遠端建置參數,以要求進行遠端建置。 遠端建置不是用應用程式設定來設定的。 對於核心工具和 Visual Studio Code,部署 Python 應用程式時,總是會要求遠端建置。 如需詳細資訊,請參閱 部署。
應用程式內容儲存體
Flex Consumption 將目前的套件儲存在已設定的部署儲存容器中。 預設情況下,這個容器會放在與 相同的 AzureWebJobsStorage帳號中,但你可以 設定不同的部署儲存帳號。
重要事項
儲存體帳戶可用來儲存重要的應用程式資料,有時還包含應用程式的程式碼本身。 您應該限制其他應用程式和使用者存取儲存體帳戶。
應用程式內容儲存體
根據部署技術,您的應用程式內容可以儲存在應用程式檔案系統、Azure 檔案儲存體 內容分享,或外部套件 URL 中。 回顧下一節「各部署技術應用程式 內容的存放位置 」。
重要事項
儲存體帳戶可用來儲存重要的應用程式資料,有時還包含應用程式的程式碼本身。 您應該限制其他應用程式和使用者存取儲存體帳戶。
安全虛擬網路
當你的功能應用程式啟用 了私有端點 且停用公共網路存取時,部署端點就無法公開存取。 推送部署工具,包括 Core Tools、Visual Studio Code、Azure CLI、GitHub Actions 和 Azure Pipelines,會將套件傳送到此端點。 執行部署的機器、執行程式或代理程式必須同時具備網路連線與 DNS 解析,以支援私有部署端點。
您可以透過以下方式提供這種連結:
- 對於 Azure Pipelines,請在連接網路上使用自架代理,或配置帶有網路功能的託管 DevOps 代理池。
- 對於 GitHub Actions,請使用連接網路上的自架運行器,或設定一個支援 Azure 私有網路的 GitHub 運行器。
- 透過 點對站 VPN、站對站 VPN 或 ExpressRoute 來連線您的開發電腦。
部署資源可以在同一虛擬網路中,或是與私有端點有路由與 DNS 連線的網路,例如對等虛擬網路。
基於 Resource Manager 的套件部署不會將套件從啟動用戶端推送到部署端點。 部署服務會從部署資源中提供的網址擷取套件。 套件網址與部署儲存必須對部署服務可存取。 關於 Flex Consumption ,請參見「使用 Bicep 或 Azure Resource Manager 範本部署」。
欲了解更多關於如何在虛擬網路中配置函式應用程式的資訊,請參見 如何使用虛擬網路配置Azure Functions。
應用程式內容儲存與網路
Azure Functions on Azure 容器應用程式 會將你嘅應用程式部署為容器映像。 映像檔儲存在容器登錄檔中,網路則由容器應用程式環境管理。 欲了解更多資訊,請參閱 Azure Functions on Azure 容器應用程式 概覽及 Networking in Azure 容器應用程式。
不同託管方案的部署行為
以下部署方法適用於您所選的主機方案。 要比較所有計畫中的技術,請參閱 部署技術可用性 表。
Flex Consumption 套件的部署
套件部署是唯一支援彈性 消費方案應用程式的程式碼部署技術。 部署程序在應用程式的部署容器中儲存一個現成可執行的 .zip 套件,函式應用程式則直接從該套件執行。
如何使用: 透過Visual Studio Code 發佈功能部署,或透過命令列使用 Azure Functions Core Tools 或Azure CLI 進行部署。 Azure DevOps 任務與 GitHub Action 在偵測到 Flex Consumption 應用程式時,也會選擇正確的套件部署行為。 當您建立 Flex Consumption 應用程式時,您必須指定部署記憶體 (blob) 容器以及它的驗證方法。 預設情況下,使用與
AzureWebJobsStorage連線相同的儲存帳號,並以 連接字串 作為驗證方式。 因此,系統會在應用程式建立期間設定您的部署設定 (部分機器翻譯),而不需要應用程式設定。
何時使用: 所有 Flex Consumption 程式碼部署皆使用套件部署。 不支援其他程式碼部署技術。
應用程式內容的儲存位置:當您建立彈性使用量函式應用程式時,您會指定部署儲存體容器 (部分機器翻譯)。 部署服務將已處理、可執行的套件儲存在這個容器中。 推送部署工具會先將原始套件送到應用程式的部署端點;它們不會直接上傳到部署容器。 要更改儲存位置,請在 Azure 入口網站開啟部署設定頁面,或使用 Azure CLI。
底層平台 API 有時會被識別為 OneDeploy。 基礎架構即程式碼定義會透過字面上的 /onedeploy 資源名稱呈現此實作。 使用支援的開發工具或 CI/CD 提供者部署時,你不需要選擇或設定這個 API。
小提示
Azure入口網站中提供Flex Consumption Deployment診斷工具。 打開你的 Flex Consumption 應用程式,選擇 「診斷與解決問題」,並搜尋 Flex Consumption Deployment。 此工具會顯示部署的詳細資訊,包括部署歷史、套件狀態及故障排除建議。
ZIP 部署
ZIP 部署是消費型、彈性高級型及專用型(App Service)方案中功能應用的預設且推薦的部署技術。 最終結果是函式應用程式執行所在的可立即執行 .zip 套件。 它與 外部套件網址 不同,平台負責遠端建置與儲存你的應用程式內容。
如何使用:使用您偏好的客戶端工具部署:Visual Studio Code、Visual Studio,或是從命令列使用 Azure Functions Core Tools 或 Azure CLI 部署。 Azure DevOps 任務和 GitHub Action 類似地使用 ZIP 部署。
當你使用 ZIP 部署時,可以設定應用程式 從套件執行。 若要從套件執行,請將
WEBSITE_RUN_FROM_PACKAGE應用程式設定值設定為1。 我們建議使用 ZIP 部署。 它能讓你的應用程式載入更快,而且它是 Visual Studio Code、Visual Studio 和 Azure CLI 的預設配置。
何時使用:ZIP 部署是 Windows Consumption、Windows 與 Linux Elastic Premium 及 Windows 與 Linux App Service(專用)方案中功能應用的預設且推薦的部署技術。
應用程式內容儲存在哪裡:ZIP 部署的應用程式內容預設儲存在檔案系統中,Azure 可能會透過你在建立函式應用程式時指定的儲存帳號支援 Azure 檔案儲存體。 在 Linux Consumption 中,應用程式內容會被持久化在應用程式
AzureWebJobsStorage設定指定的儲存帳號中的 blob 中,而應用程式設定WEBSITE_RUN_FROM_PACKAGE則會取用該 blob URL 的值。
外部套件 URL
想手動控制部署方式時,可以使用外部套件的網址。 您必須將包含已建置應用程式內容、可直接執行的 .zip 套件上傳至 Blob 儲存體,並將此外部 URL 設定為函式應用程式中的應用程式設定。 每次你的應用程式重新啟動時,它會擷取套件、掛載它,然後 從套件執行。
使用方式:將
WEBSITE_RUN_FROM_PACKAGE新增至您的應用程式設定。 此設定的值應該是一個 Blob URL,並指向您想要讓應用程式執行之特定套件的所在位置。 你可以在 Azure 入口網站 或 使用 Azure CLI 新增設定。如果你使用 Azure Blob 儲存體,函式應用程式可以透過管理身份連線或共享存取簽章(SAS)存取容器。 您選擇的選項會影響您使用什麼樣的 URL 作為
WEBSITE_RUN_FROM_PACKAGE的值。 為了獲得整體安全性,以及因為 SAS 權杖會過期而必須手動進行維護,因此建議使用受控識別。當您部署函數應用程式參考的套件檔案時,您必須手動同步觸發程序,包括初始部署。 當您變更套件檔案的內容,而不是 URL 本身時,也必須手動重新啟動函數應用程式來同步觸發程序。 關於設定步驟,請參見 從外部套件執行網址。
使用時機:對於在 Linux 使用量方案上執行的應用程式,當您不想發生遠端組建時,唯一支援的部署方法就是外部套件 URL。 當您在不使用 Azure 檔案儲存體 的情況下建立應用程式時,此方法也是建議的部署技術。 對於在 Linux 上執行的可調整應用程式,請改為考慮彈性使用量方案裝載。
應用程式內容的儲存位置:您必須負責將應用程式內容上傳至 Blob 儲存體。 你可以使用任何 blob 儲存帳號,但建議使用 Azure Blob 儲存體。
Docker 容器
您可以部署在 Linux 容器中執行的函式應用程式。
如何使用:在 Linux 容器建立函式,然後將容器部署到 Azure Functions 的高級或專用方案或其他容器主機。 使用 Azure Functions Core Tools 建立一個自訂的專案 Docker 檔案,用來建立容器化函式應用程式。 您可以在下列部署中使用容器:
- 將已在 Azure portal 中建立的 Azure Functions 資源部署到相應位置。 更多資訊請參見 在 Azure 入口網站使用容器進行建立。
- 您可以將從命令列建立的資源部署到 Azure Functions。 需要進階或專用 (App Service) 方案。 想了解如何操作,請參見 Create your first containerized Azure Functions。
- 部署至 Kubernetes 叢集。 你可以使用 Azure Functions Core Tools 部署到叢集。 使用
func kubernetes deploy(部分機器翻譯) 命令。
使用時機:當您需要更充分掌控函式應用程式執行所在和容器裝載所在的 Linux 環境時,請使用 Docker 容器選項。 此部署機制僅適用於在 Linux 上執行的函式。
應用程式內容儲存地點:你會將應用程式內容作為映像的一部分儲存在指定的容器登錄檔中。
原始檔控制
您可以啟用函數應用程式與原始程式碼存放庫之間的持續整合。 啟用原始碼控制後,連結原始碼庫的程式碼更新會觸發部署該庫最新程式碼。 如需詳細資訊,請參閱Azure Functions 的連續部署。
使用方式:從原始檔控制設定發佈的最簡單方式是,使用入口網站 [Functions] 區域中的 [部署中心]。 欲了解更多資訊,請參閱持續部署Azure Functions。
使用時機:針對在其函數應用程式上共同作業的小組,使用原始檔控制是最佳做法。 原始檔控制是一個很好的部署選項,可啟用更複雜的部署管線。 通常,你會在暫存環境中啟用版本控制,並在驗證庫中的更新後,將其與生產環境互換。 欲了解更多資訊,請參閱 Azure Functions 部署時段。
應用程式內容儲存地點:原始碼控制系統會儲存應用程式內容。 應用程式檔案系統會儲存本機複製並建置後的應用程式內容,而這些內容可能是由在建立函式應用程式時所指定的儲存體帳戶中的 Azure 檔案儲存體 所支援。
本機 Git
使用本機 Git,透過 Git 將程式碼從您的本機電腦推送至 Azure Functions。
如何使用: 請依照 本地 Git 部署到 Azure App 服務 的指示操作。
應用程式內容儲存在哪裡: 檔案系統儲存應用程式內容。 檔案系統可能由你在建立函式應用程式時指定的儲存帳號中的 Azure 檔案儲存體 支援。
FTPS
你可以用 FTPS 直接把檔案傳到 Azure Functions,但不要用這種部署方式。 當你不打算使用 FTPS,請關閉它。 想在Azure入口網站了解如何操作,請參見 Enforce FTPS。
如何使用: 請依照 FTPS 部署設定 中的指示取得 URL 和憑證,以便使用 FTPS 部署到你的函式應用程式。
儲存應用程式內容的位置: 應用程式內容會儲存在檔案系統上。 當你的應用程式檔案系統由預設主機儲存帳號中的 Azure 檔案儲存體 支援時,FTP/FTPS 部署就會失敗。 FTP/FTPS 因 FTP 限制 在將 Azure 檔案儲存體 用作掛載儲存時會失敗。
入口網站內編輯
在入口網站型編輯器中,您可以直接編輯函數應用程式中的檔案 (基本上會在每次儲存變更時進行部署)。
如何使用: 要在 Azure portal 編輯函式,必須在 portal 建立函式。 若要保留單一事實來源,使用任何其他部署方法可讓您的函式唯讀,並防止繼續編輯入口網站。 要回到可以在 Azure 入口網站編輯檔案的狀態,你可以手動將編輯模式改回
Read/Write,並移除任何與部署相關的應用程式設定(例如WEBSITE_RUN_FROM_PACKAGE)。
何時使用: 入口網站是入門 Azure Functions 的好方式。 由於 Azure 入口網站的開發限制,您應使用以下其中一個客戶端工具,以進行更進階的開發工作:
應用程式內容存放地點:應用程式內容儲存在檔案系統中,該系統可能由你在建立函式應用程式時指定的儲存帳號的 Azure 檔案儲存體備份。
容器映像部署
Azure Functions on Azure 容器應用程式 會將你嘅代碼部署為容器映像。 你可以透過管理的容器應用程式體驗從程式碼專案部署,或在需要控制映像內容時部署自訂映像檔。 欲了解更多資訊,請參閱「在 Azure 容器應用程式 上用程式碼建立函數應用程式」及「Azure Functions on Azure 容器應用程式 概述」。
部署行為
當你部署函式應用程式程式碼的更新時,部署行為取決於你的主機計畫。
目前執行中的函式會在部署新程式碼時停止。 部署完成後,新程式碼會載入並開始處理請求。 這種強制終止行為稱為 重塑策略。 若要進行近乎零停機時間的部署,請使用 部署位置。
複習 提升 Azure Functions 的效能與可靠性,學習如何撰寫無狀態與防禦函式。
預設行為會使用 recreate 策略,該策略會在部署期間停止目前執行的函式。 Flex Consumption 支援兩種網站更新策略。 您可以為零停機部署設定 滾動更新 。
Azure 容器應用程式 透過使用修訂來管理應用程式更新。 欲了解更多關於控制新版本流量接收的資訊,請參閱 Azure 容器應用程式 中的更新與部署變更。
部署位置
Flex Consumption 不支援部署槽。 零停機部署時, 請設定滾動更新。
部署位置
當你將函式應用部署到 Azure 時,你可以部署到獨立的部署槽,而不是直接部署到生產環境。 部署至部署位置然後在驗證之後交換至生產環境,是設定持續部署的建議方式。
部署至位置的方式取決於您使用的特定部署工具。 例如,當您使用 Azure Functions Core Tools 時,可以加入 --slot 選項,以指定 func azure functionapp publish 命令的特定 slot 名稱。
欲了解更多部署時段資訊,請參閱 Azure Functions 部署時段 文件。
後續步驟
請閱讀下列文章,以深入了解如何部署函數應用程式:
- 針對 Azure Functions 的持續部署
- 使用 Azure Pipelines 進行持續交付
- Azure Functions 的 Zip 部署
- 在 Azure Functions 中自動化函式應用程式的資源部署
- 在 Flex Consumption 中設定零停機時間部署