你可以使用多種不同的技術來部署你的 Azure Functions 專案程式碼到 Azure。 本文提供可供您使用的部署方法概觀,以及各種案例中最佳使用方法的建議。 同時也提供底層部署技術的全面清單及關鍵細節。
部署方法
你用來在 Azure 中發佈程式碼到函式應用程式的部署技術,取決於你的具體需求以及開發週期的哪個階段。 例如,在開發和測試過程中,你可以直接從開發工具(如 Visual Studio Code)部署。 當您的應用程式位於生產環境中時,更可能從原始檔控制中或使用自動化發佈管線持續發佈,其中包括驗證與測試。
下表描述程式碼專案的可用部署方法。
| 部署類型 | 方法 | 適用對象 |
|---|---|---|
| 以工具為基礎 | • Azure CLI • Visual Studio Code publish • Visual Studio 發佈 • Core Tools 發佈 |
開發與其他即興部署期間的部署。 利用 本地開發工具按需部署你的程式碼。 |
| 受 App Service 管理 | • 部署中心 (CI/CD) • 容器部署 |
來自原始檔控制或容器登錄的持續部署 (CI/CD)。 App Service 平台(Kudu)負責管理部署。 |
| 外部管線 | • Azure Pipelines • GitHub Actions |
生產管線包含驗證、測試及其他必須作為自動化部署一部分執行的動作。 管線負責管理部署。 |
使用最適合你情況的技術。 許多部署方法都是以 zip 部署為基礎,建議用於部署。
部署技術可用性
部署方法也取決於您執行函式應用程式的主控方案和作業系統。
Azure Functions 目前提供了五個用於裝載函式應用程式的選項:
每個方案都有不同的行為。 並非所有部署技術都適用於每個主控方案和作業系統。 此圖表提供所支援部署技術的相關資訊:
| 部署技術 | 彈性使用量 | 使用量 | 彈性進階 | 專用 | 容器應用程式 |
|---|---|---|---|---|---|
| 一個部署 | ✔ | ||||
| Zip 部署 | ✔ | ✔ | ✔ | ||
| 外部套件 URL1 | ✔ | ✔ | ✔ | ||
| Docker 容器 | 僅限 Linux | 僅限 Linux | 僅限 Linux | ✔ | |
| 原始檔控制 | 僅限 Windows | ✔ | ✔ | ||
| 本機 Git1 | 僅限 Windows | ✔ | ✔ | ||
| FTPS1 | 僅限 Windows | ✔ | ✔ | ||
| 入口網站內編輯2 | ✔ | ✔ | ✔ |
1 不建議使用需要手動同步觸發程序的部署技術。
2 當程式碼從入口網站外部部署至函式應用程式時,入口網站內編輯會停用。 如需詳細資訊,包括入口網站內編輯的語言支援詳細資料,請參閱語言支援詳細資料。
重要概念
有些關鍵概念對於理解 Azure Functions 中的部署運作至關重要。
觸發同步
當您變更任何觸發程序時,Functions 基礎結構必須注意這些變更。 許多部署技術都會自動進行同步處理。 然而,在某些情況下,您必須手動同步觸發程序。
使用這些部署選項時,您必須手動同步觸發器:
你可以用以下其中一種方式手動同步觸發器:
在 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 上執行的所有函數應用程式都有一個小型管理應用程式,也就是 scm 提供的 網站。 這個網站負責 Azure Functions 的大部分部署與建置邏輯。
當你將應用程式部署到 Windows 時,部署程序會執行特定語言的指令,例如 dotnet restore(C#)或 npm install(JavaScript)。
在部署期間使用遠端建置時,適用下列考量:
- 在使用者方案中,Linux 上執行的函數應用程式支援遠端組建。 不過,這些應用程式的部署選項會受到限制,因為其沒有
scm(Kudu) 網站。 - 以進階方案或專用 (App Service) 方案在 Linux 上執行的函數應用程式,都會有一個
scm(Kudu) 網站,但相較於 Windows,其功能相當有限。 - 當應用程式使用 run-from-package 時,遠端建置不會發生。 若要了解如何在這些情況下使用遠端建置,請參閱 Zip 部署。
- 如果您的應用程式是在這項功能推出之前建立的(2019 年 8 月 1 日),您可能會遇到遠端建置方面的問題。 對於較舊的應用程式,請建立新的函式應用程式,或執行
az functionapp update --resource-group <RESOURCE_GROUP_NAME> --name <APP_NAME>來更新函式應用程式。 此命令可能需要嘗試兩次才能成功。
應用程式內容儲存體
基於套件的部署方法會將套件存儲在與函式應用程式相關聯的存儲帳戶中,AzureWebJobsStorage 的設定即用來定義該帳戶。 在可用的情況下,使用量和彈性進階方案應用程式會嘗試使用來自此帳戶的 Azure 檔案儲存體共用內容,但您也可以在其他位置維護套件。 Flex Consumption 方案的應用程式會在預設儲存帳號中使用儲存容器,除非你設定另一個儲存帳號來部署。 如需詳細資訊,請檢閱下一節所述的各個部署技術中,應用程式內容的儲存位置中的詳細資料。
重要事項
儲存體帳戶可用來儲存重要的應用程式資料,有時還包含應用程式的程式碼本身。 您應該限制其他應用程式和使用者存取儲存體帳戶。
安全虛擬網路
當你的功能應用程式啟用 了私有端點 且關閉了公共網路存取時, scm (Kudu)部署網站就無法公開存取。 當功能應用程式使用的儲存帳號也被私人端點保護時,必須存取儲存的技術也會被同樣封鎖。 由於這些限制,本文所述的部署技術無法從虛擬網路外部連達完全網路安全的功能應用程式。
要將程式碼部署到網路安全的函式應用程式,你的部署工具必須能連接虛擬網路。 你可以透過以下方式實現這種連結:
- 若從 Azure 管線部署,請使用具有存取虛擬網路能力的 自架代理程式,或配置搭配網路的 管理的 DevOps 代理池。
- 若從GitHub工作流程部署,請使用
自架運行器 並存取虛擬網路,或在Azure虛擬網路中配置 GitHub託管運行器。 - 透過點對點 VPN 或 ExpressRoute,將您的開發機器連接到虛擬網路。
欲了解更多關於如何在虛擬網路中配置函式應用程式的資訊,請參見 如何使用虛擬網路配置Azure Functions。
部署技術詳細資料
以下部署方法可在 Azure Functions 中取得。 若要判斷每個主控方案支援哪些技術,請參閱 部署技術可用性 數據表。
一個部署
彈性使用量方案 (部分機器翻譯) 上的應用程式唯一支援的部署技術是「一個部署」。 最終結果是函式應用程式執行所在的可立即執行 .zip 套件。
如何使用: 透過Visual Studio Code 發佈功能部署,或透過命令列使用 Azure Functions Core Tools 或Azure CLI 進行部署。 我們的 Azure Dev Ops 工作和 GitHub 動作在偵測到彈性使用量應用程式正在部署至當中時,同樣會使用一次部署。 當您建立 Flex Consumption 應用程式時,您必須指定部署記憶體 (blob) 容器以及它的驗證方法。 預設情況下,使用與
AzureWebJobsStorage連線相同的儲存帳號,並以 連接字串 作為驗證方式。 因此,系統會在應用程式建立期間設定您的部署設定 (部分機器翻譯),而不需要應用程式設定。
使用時機: One deploy 是在 Flex Consumption 計畫中執行函式應用程式時唯一可用的部署技術。
應用程式內容的儲存位置:當您建立彈性使用量函式應用程式時,您會指定部署儲存體容器 (部分機器翻譯)。 這個 blob 容器是你的工具上傳你部署的應用程式內容的地方。 要更改位置,你可以前往 Azure 入口網站的部署設定索引標籤,或使用 Azure CLI。
小提示
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 Dev Ops Task 和 GitHub Action 也同樣利用 zip 部署。 當您使用 zip 部署進行部署時,您可以將應用程式設定 為從套件執行。 若要從套件執行,請將
WEBSITE_RUN_FROM_PACKAGE應用程式設定值設定為1。 建議使用 zip 部署。 它能讓你的應用程式載入更快,而且它是 VS Code、Visual Studio 和 Azure CLI 的預設配置。
何時使用: Zip 部署是 Windows Consumption、Windows 和 Linux Elastic Premium,以及 Windows 和 Linux App Service(專用)方案中功能應用程式的預設且推薦的部署技術。
應用程式內容存放地點:壓縮部署中的應用程式內容預設儲存在檔案系統中,Azure可能會使用您在建立函式應用程式時指定的儲存帳戶中的 Azure 檔案儲存體 作為備援。 在 Linux Consumption 中,應用程式內容會被持久化在應用程式
AzureWebJobsStorage設定指定的儲存帳號中的 blob 中,而應用程式設定WEBSITE_RUN_FROM_PACKAGE則會取用該 blob URL 的值。
外部套件 URL
如果您想要手動控制部署的執行方式,外部套件 URL 是一個選項。 您必須負責將可立即執行的 .zip 套件 (包含您建置的應用程式內容) 上傳至 Blob 儲存體,並參考此外部 URL 來作為函式應用程式上的應用程式設定。 每當應用程式重新啟動時,其會擷取套件、掛接套件,並以從套件執行 (部分機器翻譯) 模式執行。
使用方式:將
WEBSITE_RUN_FROM_PACKAGE新增至您的應用程式設定。 此設定的值應該是一個 Blob URL,並指向您想要讓應用程式執行之特定套件的所在位置。 你可以在 Azure 入口網站 或 使用 Azure CLI 新增設定。如果你使用 Azure Blob 儲存體,Function 應用程式可以透過基於管理身份的連線或使用 共享存取簽章(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。
- 將應用程式部署到 Azure 容器應用程式. 要了解如何操作,請參考 在 Azure 容器應用程式 上建立您的第一個容器化 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 檔案儲存體備份。
FTP/S
你可以用 FTP/S 直接把檔案傳到 Azure Functions,但不要用這種部署方式。 當你不打算使用 FTP,請關閉它。 如果你選擇使用 FTP,請強制執行 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 的效能與可靠性,學習如何撰寫無狀態與防禦函式。
彈性消費計劃: 預設行為也會使用重新建立策略,在部署期間終止目前執行的函式。 不過,Flex Consumption 唯一支援兩種不同的網站更新策略。 您可以為零停機部署設定 滾動更新 。
部署位置
當你將函式應用部署到 Azure 時,你可以部署到獨立的部署槽,而不是直接部署到生產環境。 部署至部署位置然後在驗證之後交換至生產環境,是設定持續部署的建議方式。
部署至位置的方式取決於您使用的特定部署工具。 例如,使用 Azure Functions Core Tools 時,會加入 --slot 選項,以指定 func azure functionapp publish 指令的特定槽位名稱。
欲了解更多部署時段資訊,請參閱 Azure Functions 部署時段 文件。
後續步驟
請閱讀下列文章,以深入了解如何部署函數應用程式:
- 針對 Azure Functions 的持續部署
- 使用 Azure Pipelines 進行持續交付
- Azure Functions 的 Zip 部署
- 從套件檔執行你的Azure Functions
- 在 Azure Functions 中自動化函式應用程式的資源部署
- 在 Flex Consumption 中設定零停機時間部署