共用方式為


Azure Container Apps 上的 Azure Functions 概觀

Azure 容器應用程式上的 Azure Functions 提供完全受控的無伺服器裝載環境,將 Azure Functions 的事件驅動功能與容器應用程式的強固功能結合在一起。 此整合包括多項進階功能,例如 Kubernetes 型協調流程、由 KEDA (Kubernetes 型事件驅動自動調整) 提供的內建自動調整、Dapr (分散式應用程式執行階段) 整合、GPU 工作負載支援、側車支援、虛擬網路 (VNet) 連線和修訂管理。

當您希望 Azure Functions 與其他容器化應用程式 (例如微服務、API 或網站) 一起執行時,此方法非常有用。 此外,當您需要自訂相依性或想要利用調整至零的方式來節省成本時,將函式應用程式容器化會有所幫助。 如果您執行 AI 推斷等需要大量計算的工作,容器應用程式也能透過無伺服器 GPU 供應專案和專用工作負載設定檔,支援 GPU 型裝載。

作為 Azure 容器應用程式上的整合功能,您可以在呼叫 Microsoft.App 時設定 kind=functionapp,使用 az containerapp create 資源提供者直接將 Azure Functions 映像部署至 Azure 容器應用程式。 以此方式建立的應用程式可以存取所有 Azure Container Apps 功能。 如果透過 Azure 入口網站進行部署,您可以在設定期間啟用 [針對 Azure Functions 應用程式最佳化] 選項。 如需詳細資訊,請參閱部署和設定一節。

主要優點

Container Apps 裝載模型是以容器化工作負載的彈性和 Azure Functions 的事件驅動本質為基礎所建置。 它提供下列主要優點:

下表可協助您比較 Container Apps 上的 Functions 功能與 Flex 耗用量方案

特徵 / 功能 容器應用程式 彈性使用量方案 (部分機器翻譯)
調整至零 ✅ 是(透過 KEDA) ✅ 是
擴增上限 1,000 (預設值 10,可設定) 1,000
一律開啟執行個體 ✅ 是(透過 minReplicas ✅ 是 (透過隨時可用的實例)
VNet 整合 ✅ 是 ✅ 是
自訂容器支援 ✅ 是的(攜帶您自己的影像) ❌ 有限(不可攜帶您自己的容器)
GPU 支援 ✅ 是 (透過無伺服器 GPU 專用工作負載設定檔) ❌ 否
內建功能 容器應用程式功能支援。 例如,KEDA、Dapr、多重修訂、mTLS、側車、輸入控制項等等 僅限函式的功能
計費模型 容器應用程式定價:按使用量計費方案(vCPU、記憶體、請求)和專用方案(依據工作負載設定) 執行時間 + 隨時可用執行個體

如需容器應用程式上的函式與彈性使用量方案和所有其他方案與裝載類型的完整比較,請參閱函式調整和裝載選項

案例

容器應用程式上的 Azure Functions 非常適合各種使用案例,特別是當您需要事件驅動的執行、容器彈性或與其他服務進行安全整合時:

  • 企業營運 API:使用適用於企業營運應用程式的 Azure Functions 來封裝自訂程式庫、套件和 API。
  • 移轉和現代化:將內部部署的舊版和/或單體應用程式移轉至容器上的雲端原生微服務。
  • 事件驅動處理:透過 Azure Functions 的程式設計模型,輕鬆處理來自 Azure 事件方格、Azure 服務匯流排、Azure 事件中樞以及其他事件來源的事件。
  • 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
  • 一般 Azure Functions:執行任何支援的標準 Azure Functions 案例 (例如計時器、檔案處理、資料庫觸發程序)。

部署和設定

若要在 Azure 容器應用程式上部署 Azure Functions,您可以將 Azure Functions 應用程式封裝為自訂容器映像,並像任何其他容器應用程式一樣部署該映像,但有一個重要差異。 使用 Azure CLI 或 ARM/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

此命令會傳回 Azure Functions 應用程式的 URL。 複製此 URL,並將其貼到網頁瀏覽器中。

在 Azure 入口網站中,於建立容器應用程式期間選取 [針對 Azure Functions 進行最佳化] 選項,以簡化設定。

當您建立針對 Azure Functions 預先設定的容器應用程式時,Azure 入口網站的螢幕擷取畫面。

支援所有標準部署方法,包括:

如需詳細步驟和範例,請參閱官方的入門文件

定價和帳務

Azure Container Apps 上的 Azure Functions 遵循與 Azure Container Apps 相同的定價模式。 計費基於您為環境選擇的方案類型,可能是消耗型或專屬型。

  • 取用方案:此無伺服器計算選項只會向您收取應用程式在執行時所使用的資源費用。
  • 專用方案:此選項提供量身訂製的計算資源,為您針對配置給每個工作負載的實例計費。

您選擇的方案會決定計費計算的方式。 環境內的不同應用程式可以使用不同的方案。

要注意的要點:

  • 在容器應用程式內使用 Azure Functions 程式設計模型不會產生額外費用。
  • Durable Functions 和其他進階模式受到支援,並在相同的 Container Apps 定價模式下計費。 如需詳細的計費機制和範例,請參閱 Azure Container Apps 中的計費 檔。

事件驅動擴展

容器應用程式上的 Azure Functions 支援 Azure Functions 中可用的所有主要語言執行階段,包括:C#、JavaScript/TypeScript (Node.js)、Python、Java、PowerShell、自訂容器 (自備映像)。

在 Azure 容器應用程式上執行的 Azure Functions 會根據事件來源自動設定調整規則,而不需要手動的 KEDA 調整規則定義。 這就是 Azure 入口網站上會針對容器應用程式上的 Azure Functions 停用 [新增調整規則] 按鈕的原因。 不過,您仍然可以定義最小和最大複本計數,以建立調整界限,並維持對資源配置的控制能力。

容器應用程式中支援所有標準的 Azure Functions 觸發程序和繫結,但有下列例外

受控識別支援用於允許受控識別的觸發程序和繫結。 其也可用於:

針對不支援的觸發程序,請在 Azure 容器應用程式上的 Azure Functions 中使用固定的複本計數 (亦即,設定 minReplicas > 0)。 如需詳細資訊,請參閱 Azure Functions 開發人員指南 (部分機器翻譯)。

調整和效能

Container Apps 上的 Azure Functions 會根據使用 KEDA 的事件自動調整,而不需要手動設定調整規則。 您仍然可以設定最小值/最大值副本來控制擴展行為。

  • 事件驅動調整:根據事件方格、服務總線或 HTTP 等觸發程式自動調整。
  • 縮減到零:閒置應用程式自動縮減到零以節省成本。
  • 冷啟動控制:了解如何減少 Azure 容器應用程式上的冷啟動時間 (部分機器翻譯)。
  • 並行:每個實例都可以平行處理多個事件。
  • 高擴充性:可擴展至每個應用程式的 1,000 個實例(預設值為 10)。
  • GPU 支援:使用 GPU 支援的節點執行大量計算工作負載,例如 AI 推斷。

這使容器應用程式非常適合處理突然高增和穩定狀態的工作負載。 若要深入瞭解,請參閱 在 Azure Container Apps 中設定調整規則

網路和安全性

Azure Functions 在 Container Apps 上受益於 Container Apps 的強大網路安全功能,使部署更加安全且易於擴展。

  • VNet 整合:透過內部端點和私人資料庫安全地存取私人資源。
  • 受控識別:使用系統/使用者指派的身分識別向 Azure 服務進行驗證,不需要秘密或連接字串。
  • Dapr 支援:透過 Dapr 側車啟用發佈/子、狀態管理和安全服務叫用。 如需詳細資訊,請參閱 Dapr 所提供的微服務 API
  • Ingress 和 TLS:透過 TLS/mTLS、自訂網域公開安全的 HTTP 端點,或者將其保留在內部。
  • 環境隔離:函式會共用容器應用程式環境界限,以進行安全的限定範圍通訊。

這些功能讓 Container Apps 裝載的 Functions 非常適合企業級、安全的無伺服器應用程式。

監視與記錄

容器應用程式上的 Azure Functions 會與 Azure 的可檢視性工具緊密整合,以追蹤效能並診斷問題:

  • Application Insights:提供要求、相依性、例外狀況和自訂追蹤的遙測資料。 如需詳細資訊,請參閱監視 Azure Functions
  • Log Analytics:擷取容器生命週期和調整事件 (例如,FunctionsScalerInfo 項目)。 如需詳細資訊,請參閱 Azure Container Apps 中的應用程式記錄
  • 自訂記錄:支援 ILogger 和主控台記錄等標準架構,以提供結構化輸出。
  • 集中監視:容器應用程式環境提供跨所有應用程式的統一儀表板和警示。

考慮事項

在 Azure 容器應用程式上使用 Azure Functions 時,請注意以下其他考量:

  • 自動調整的輸入需求:若要根據事件啟用自動調整,就必須啟用輸入,不論是公開啟用,還是在容器應用程式內部環境中啟用都可以。
  • 強制性儲存體帳戶:部署在容器應用程式上的每個 Azure Functions 應用程式都必須連結至儲存體帳戶。 必須這麼做才能管理觸發程序、記錄和狀態。 如需最佳做法,請檢閱儲存體帳戶指引
  • 多重修訂儲存體:使用多個作用中修訂進行部署時,請向每個修訂指派專用的儲存體帳戶。 使用專用儲存體帳戶有助於防止衝突,並確保適當的隔離。 或者,如果您不需要同時修訂,則可以考慮使用預設的單一修訂模式來簡化管理。
  • 多重修訂觸發器:如果您使用多重修訂模式搭配提取式觸發程序,請針對每個修訂使用不同的事件來源,以避免與競爭取用者相關的衝突。 使用 Azure 佇列儲存體、Azure 事件中樞、Azure 服務匯流排或 Durable Functions 觸發程序的函式是拉取型觸發程序的範例。
  • 冷啟動延遲:當您的容器應用程式在閒置期間縮減為零時,閒置結束後的第一個要求會經歷冷啟動。 深入了解如何減少冷啟動時間 (部分機器翻譯)。
  • Application Insights 整合:若要獲得強固的監視和診斷能力,請將您的 Azure Functions 應用程式連結至 Application Insights。 如需詳細資訊,請參閱 Application Insights 與 Azure Functions 的整合 (部分機器翻譯)。
  • Azure Functions Proxy:不支援。 針對 API 閘道案例,請改為與 Azure APIM 整合。
  • 部署位置:暫存和生產位置無法使用。 使用藍綠部署策略來進行零停機時間發行。
  • Azure Functions 存取金鑰:不支援使用入口網站來產生 Azure Functions 存取金鑰。 請考慮使用 Azure Key Vault 來儲存金鑰 (英文)。 您也可以使用下列選項來保護生產環境中的 HTTP 端點:
  • 配額和資源限制:容器應用程式環境對每個區域的記憶體、CPU 和執行個體計數有預設限制。 如需詳細資訊,請參閱環境限制預設配額。 如果您的工作負載需要更多資源,您可以要求增加配額
  • 手動調整規則設定:對於裝載在容器應用程式上的 Azure Functions,Azure 入口網站上的 [新增調整規則] 按鈕會停用,因為調整規則會根據事件來源自動設定。 此設定中不需要手動的 KEDA 規則定義。

提交意見反應

將問題或功能要求提交至 Azure Container Apps GitHub 存放庫

後續步驟/其他資源

若要繼續使用容器應用程式上的 Azure Functions 來進行學習和建置,請探索下列資源: