Azure Functions 在 Azure 容器應用程式 上提供一個完全管理的無伺服器託管環境,結合了 Azure Functions 的事件驅動功能與 Container Apps 的功能。 這些功能包括基於 Kubernetes 的編排、內建由 Kubernetes 事件驅動自動擴展(KEDA)驅動的自動擴展、DAPR 整合、GPU 工作負載支援、側車支援、虛擬網路(VNet)連接及版本管理。
當你希望函式能與其他容器化應用程式(如微服務、API 或網站)並行運行時,這種方法非常有用。 當你需要自訂相依或想擴展到零以降低成本時,將函式應用程式容器化也能提供幫助。 對於 AI 推論這類運算密集型工作,Container Apps 支援透過無伺服器 GPU 和專用工作負載設定檔提供以 GPU 為基礎的託管。
作為 Azure 容器應用程式 的整合功能,您可以使用Microsoft.App資源提供者,並設定kind=functionapp (在呼叫az containerapp create時) ,將 Azure Functions container 影像檔直接部署至 Azure 容器應用程式。 以此方式建立的應用程式可存取所有 Azure 容器應用程式 的功能。 在 Azure 入口網站中,設定時選擇「Optimize for Azure Functions」選項。 欲了解更多資訊,請參閱 部署與設定。
主要優點
容器應用程式託管模式建立在容器化工作負載的彈性與 Azure Functions 的事件驅動特性上。 它提供下列主要優點:
- 以容器形式執行Azure Functions,並支援自訂相依項和語言堆疊。
- 使用 KEDA 縮減至零及擴充至 1,000 個執行個體。
- 使用完整的 VNet 整合來保護網路。
- 容器應用程式的功能包括多重版本、流量分割、DAPR 整合及可觀察性元件。
- 運算密集型工作負載的無伺服器和專用 GPU 支援。
- 整合容器應用程式環境 ,以與微服務、API 和背景作業一起執行 Functions。
下表幫助你比較容器應用程式功能與 彈性消費方案的功能。
| 特徵 / 功能 | 容器應用程式 | 彈性使用量方案 (部分機器翻譯) |
|---|---|---|
| 調整至零 | ✅ 是(透過 KEDA) | ✅ 是 |
| 擴增上限 | 1,000 (預設值 10,可設定) | 1,000 |
| 一律開啟執行個體 |
✅ 是(透過 minReplicas) |
✅ 是 (透過隨時可用的實例) |
| VNet 整合 | ✅ 是 | ✅ 是 |
| 自訂容器支援 | ✅ 是的(攜帶您自己的影像) | ❌ 有限(不可攜帶您自己的容器) |
| GPU 支援 | ✅ 是 (透過無伺服器 GPU 專用工作負載設定檔) | ❌ 否 |
| 內建功能 | 容器應用程式功能支援。 例如,KEDA、Dapr、多重修訂、mTLS、側車、輸入控制項等等 | 僅限函式的功能 |
| 計費模型 | 容器應用程式定價:按使用量計費方案(vCPU、記憶體、請求)和專用方案(依據工作負載設定) | 執行時間 + 隨時可用執行個體 |
如需容器應用程式上的函式與彈性使用量方案和所有其他方案與裝載類型的完整比較,請參閱函式調整和裝載選項。
案例
Azure Functions 在容器應用上非常適合各種使用情境,特別是當你需要事件驅動執行、容器彈性,或與其他服務安全整合時:
- 業務線 API: 為業務線應用打包自訂函式庫、套件與 API,並附Azure Functions。
- 移民與現代化: 將本地的舊有及/或單體應用程式遷移至容器上的雲端原生微服務。
- 事件驅動處理:透過使用 Azure Functions 程式設計模型處理來自 Event Grid、服務匯流排、Event Hubs 及其他事件來源的事件。
- AI 與 GPU 工作負載: 處理影片、影像、逐字稿及其他需要 GPU 資源的運算密集型工作負載。 更多資訊請參見 在 Azure 容器應用程式 中使用無伺服器 GPU。
- 微服務: 將Azure Functions整合至其他容器應用程式託管服務。
- 自訂容器:使用自訂執行階段或側車來封裝 Azure Functions。
- 私人應用程式:使用 VNet 和內部輸入來保護僅限內部使用的 Azure Functions。
- .NET Aspire: .NET Aspire 與 Azure Functions 的整合,使你能在 .NET Aspire 應用程式主機中開發、除錯並協調 Azure Functions .NET 專案。 深入了解 Azure Functions 搭配 .NET Aspire
- General Functions: 執行任何支援的標準 Azure Functions 情境(例如計時器、檔案處理、資料庫觸發器)。
部署和設定
要在 Azure 容器應用程式 上部署 Azure Functions,請將你的函式應用打包成自訂容器映像,並像部署其他容器應用程式一樣部署,但有一個關鍵差異。 當你使用 Azure CLI、Azure Resource Manager 範本或 Bicep 時,設定該kind=functionapp屬性。 詳細步驟與範例請參見 「建立函式應用程式」。
az containerapp create \
--resource-group $RESOURCE_GROUP_NAME \
--name $CONTAINER_APP_NAME \
--environment $ENVIRONMENT_NAME \
--image mcr.microsoft.com/k8se/quickstart-functions:latest \
--ingress external \
--target-port 80 \
--kind functionapp \
--query properties.outputs.fqdn
此指令會回傳你函式應用程式的網址。 複製此 URL,並將其貼到網頁瀏覽器中。
在 Azure 入口網站中,建立容器應用程式時選擇「優化 Azure Functions」選項,以使用 Azure Functions 配置。
支援所有標準部署方法,包括:
- Azure CLI
- Azure portal
- ARM 模板 / Bicep
- CI/CD pipelines(例如 GitHub Actions、Azure Pipelines)
如需詳細步驟和範例,請參閱官方的入門文件。
定價和帳務
Azure Functions on Azure 容器應用程式 採用與 Azure 容器應用程式 相同的定價模式。 計費基於您為環境選擇的方案類型,可能是消耗型或專屬型。
您選擇的方案會決定計費計算的方式。 環境內的不同應用程式可以使用不同的方案。
帳單細節:
- 在容器應用程式中使用 Azure Functions 程式設計模型則不需額外付費。
- Durable Functions 及其他進階模式皆依照相同的容器應用程式定價模式支援與計費。
如需詳細計費機制與範例,請參閱Azure 容器應用程式中的
計費文件。
事件驅動擴展
Azure Functions on Container Apps 支援 Azure Functions 中所有主要語言執行環境,包括 C#、JavaScript / TypeScript(Node.js)、Python、Java、PowerShell 及自訂容器(可自備映像)。
在 Azure 容器應用程式 上執行的 Azure Functions 會根據事件來源自動設定縮放規則,因此在預設體驗中無需手動定義 KEDA 縮放規則。 這也是為什麼 Azure 入口網站上的「新增擴展規則」按鈕在容器應用程式功能中被停用。 不過,您仍然可以定義最小和最大複本計數,以建立調整界限,並維持對資源配置的控制能力。
如果你需要提供自己的縮放規則,可以使用 allowScalingRuleOverride 來選擇不採用平台產生的規則。 如需詳細資訊,請參閱 覆寫 Container Apps 上 Azure Functions 自動產生的 KEDA 調整規則。
平台會自動將你的函數觸發參數(來自 host.json 設定或觸發屬性)轉換成適當的 KEDA 縮放參數。 如需了解函數觸發配置與 KEDA 縮放參數之間的詳細對應,請參見 Azure Functions KEDA 縮放對應。
所有標準Azure Functions觸發器與綁定均支援於容器應用程式中,但有以下 例外:
- Blob 儲存體 觸發自動縮放:只有在使用 Event Grid 作為來源時才有效。 深入了解如何使用事件訂閱在 Blob 容器上觸發 Azure Functions (部分機器翻譯)
- Durable Functions 自動調整規模:僅支援 Microsoft SQL Server 和 Durable Task Scheduler 儲存體提供者。 欲了解更多資訊,請參閱 Deploy Durable Functions with SQL Server。
- 自動縮放不支援以下用途:
- Azure Cache for Redis
- Azure SQL
受控識別支援用於允許受控識別的觸發程序和繫結。 它們也可用於:
- 預設記憶體帳戶 (AzureWebJobsStorage)
- Azure Container Registry(ACR)
- 連線至觸發程序事件來源 (部分機器翻譯)
對於不支援的觸發器,請使用固定複本計數(即在 Azure 容器應用程式 上的 Azure Functions 中設定 minReplicas > 0)。 如需詳細資訊,請參閱 Functions 開發人員指南。
調整和效能
Azure Functions on Container Apps 預設會使用 KEDA 根據事件自動調整規模。 您仍然可以設定最小值/最大值副本來控制擴展行為。 你也可以用 allowScalingRuleOverride 來提供自訂的比例規則。
- 事件驅動縮放:根據事件網格、服務匯流排或 HTTP 等觸發條件自動縮放。
- 縮減到零:閒置應用程式自動縮減到零以節省成本。
- 冷啟動控制:了解如何縮短 Azure 容器應用程式 的冷啟動時間。
- 並行:每個實例都可以平行處理多個事件。
- 高擴充性:可擴展至每個應用程式的 1,000 個實例(預設值為 10)。
- GPU 支援:使用 GPU 支援的節點執行大量計算工作負載,例如 AI 推斷。
這使容器應用程式非常適合處理突然高增和穩定狀態的工作負載。 欲了解更多,請參閱 Azure 容器應用程式 中的設定縮放規則。
網路和安全性
Azure Functions on Container Apps 使用 Container Apps 的網路功能和安全性功能:
- VNet 整合:透過內部端點和私人資料庫安全地存取私人資源。
- 管理身份:透過系統指派或使用者指派的身份來驗證 Azure 服務。 你不需要管理秘密或連線字串。
- Dapr 支援:透過 Dapr 側車啟用發佈/子、狀態管理和安全服務叫用。 如需詳細資訊,請參閱 Dapr 所提供的微服務 API。
- Ingress 和 TLS:透過 TLS/mTLS、自訂網域公開安全的 HTTP 端點,或者將其保留在內部。
- 環境隔離:函式共享容器應用程式的環境邊界,以達成安全且有範圍的通訊。
監視與記錄
Azure Functions on Container Apps 整合 Azure 可觀察性工具用於效能追蹤及問題診斷:
- Application Insights:提供要求、相依性、例外狀況和自訂追蹤的遙測資料。 更多資訊請參見 Monitor Azure Functions。
-
Log Analytics:捕捉容器生命週期與擴展事件,例如
FunctionsScalerInfo條目。 欲了解更多資訊,請參閱 Azure 容器應用程式 中的應用程式日誌。 - 自訂記錄:支援 ILogger 和主控台記錄等標準架構,以提供結構化輸出。
- 集中監視:容器應用程式環境提供跨所有應用程式的統一儀表板和警示。
環境變數
在容器應用程式上運行的 Azure Functions 可以存取系統提供的環境變數。
CONTAINER_NAME環境變數會自動設定為你函式應用程式的副本名稱。 在多副本情境中,使用此變數進行日誌記錄、關聯與除錯。
如需完整的系統提供環境變數清單,請參閱 Azure 容器應用程式 中的
考慮事項
在使用 Azure Functions 於 Azure 容器應用程式 時,請留意以下其他考量:
- 自動擴展的入口需求:若要啟用基於事件的自動擴展,請 啟用入口,無論是公開或容器應用程式內部環境內。
- 強制儲存帳號:所有部署在容器應用程式的功能應用程式必須綁定到儲存帳號。 這個儲存帳號負責管理觸發器、日誌和狀態。 如需最佳做法,請檢閱儲存體帳戶指引。
- 多重修訂儲存體:使用多個作用中修訂進行部署時,請向每個修訂指派專用的儲存體帳戶。 使用專用儲存體帳戶有助於防止衝突,並確保適當的隔離。 或者,如果您不需要同時修訂,則可以考慮使用預設的單一修訂模式來簡化管理。
- 多重修訂觸發器:如果您使用多重修訂模式搭配提取式觸發程序,請針對每個修訂使用不同的事件來源,以避免與競爭取用者相關的衝突。 使用 Azure 佇列儲存體、Azure 事件中樞、Azure 服務匯流排 或 Durable Functions 觸發器的函式,都是拉取式觸發器的例子。
- 冷啟動延遲:當您的容器應用程式在閒置期間縮減為零時,閒置結束後的第一個要求會經歷冷啟動。 深入了解如何減少冷啟動時間 (部分機器翻譯)。
- Application Insights 整合:要監控和診斷你的函式應用程式,請將其連接到 Application Insights。 欲了解更多資訊,請參閱 Application Insights 與函數的整合。
- Azure Functions Proxy:不支援。 對於 API 閘道場景,應改用 Azure API 管理 進行整合。
- 部署位置:不提供預備與生產位置。 使用藍綠部署策略來進行零停機時間發行。
- 功能存取鍵:不支援使用入口網站產生功能存取鍵。 可以考慮用 Azure Key Vault 來存放金鑰。 您也可以使用下列選項來保護生產環境中的 HTTP 端點:
- 配額和資源限制:容器應用程式環境對每個區域的記憶體、CPU 和執行個體計數有預設限制。 如需詳細資訊,請參閱環境限制和預設配額。 如果您的工作負載需要更多資源,您可以要求增加配額。
- 手動縮放規則設定:Azure 入口網站上的「新增縮放規則」按鈕對於承載於容器應用程式上的 Azure Functions 被停用,因為縮放規則會自動根據事件來源進行設定。 此配置不需要手動 KEDA 規則定義。
提交意見反應
請向 Azure 容器應用程式 GitHub repo 提交問題或功能請求。
後續步驟/其他資源
若想繼續在容器應用程式上學習並建置 Azure Functions,請探索以下資源:
- 入門:Azure 容器應用程式 中部署與配置Azure Functions的逐步指南。
- Azure 容器應用程式 文件:容器應用程式功能的完整參考資料,包括擴展、網路、DAPR 及工作負載設定檔。
- Azure 容器應用程式 價格:關於以用電量計費及專屬方案費用的詳細資訊。
- Azure Functions 主機選項:主機方案比較,包括容器應用程式、彈性使用、Premium 及專用。
- Azure Functions 開發者指南:深入探討觸發器、綁定、執行時行為與設定。