重要
現在可以使用新的裝載方法來直接在 Azure Container Apps 中執行 Azure Functions(請參閱 公告),並建議用於大多數新的工作負載。 這項整合功能可讓您充分運用 Azure Container Apps 的所有特性和功能,同時受益於 Azure Functions 所提供的函式程式設計模型和自動擴展的簡便性。
如需詳細資訊,請參閱 Azure Container Apps 中的原生 Azure Functions 支援
Azure Functions 提供整合式支援,可在 Azure Container Apps 上開發、部署和管理容器化函式應用程式。 當您需要在 Azure 中與其他微服務、API、網站、工作流程或任何容器裝載程式相同的環境中執行事件驅動的函式時,請使用 Azure 容器應用程式來裝載函數應用程式容器。 容器應用程式裝載可讓您在完全受控的 Kubernetes 型環境中執行函式,內建支援開放原始碼監視、mTLS、Dapr 和 Kubernetes 事件導向自動調整 (KEDA)。
您可以使用 Functions 所支援的任何語言堆疊撰寫函式程式碼。 您可以透過事件驅動的調整來使用相同的 Functions 觸發程序和繫結。 您也可以使用現有的 Functions 用戶端工具和 Azure 入口網站來建立容器、將函數應用程式容器部署至容器應用程式,以及設定持續部署。
容器應用程式整合也表示網路和可檢視性組態是在容器應用程式環境層級定義,並套用至函數應用程式,如同其套用至容器應用程式環境中執行的所有微服務。 您也可以取得容器應用程式的其他雲端原生功能,包括 KEDA、Dapr、Envoy。 您仍然可以使用 Application Insights 來監視函式執行,而您的函數應用程式可以存取環境所提供的相同虛擬網路資源。
如需 Azure Functions 容器裝載選項的一般概觀,請參閱 Azure Functions 中的 Linux 容器支援。
裝載和工作負載設定檔
容器應用程式有兩個主要方案:無伺服器取用方案和專用方案。 這兩者都可以用於工作負載配置檔環境類型,工作負載配置檔會決定您的應用程式可用的計算和記憶體資源。 工作負載設定檔會決定部署在環境中容器應用程式的計算和記憶體資源數量。 這些設定檔已設定為符合應用程式的不同需求。
使用量工作負載設定檔是新增至每個工作負載設定檔環境類型的預設設定檔。 您可以在建立環境時或在建立環境之後,將專用工作負載設定檔新增至您的環境。 若要深入瞭解工作負載配置檔,請參閱 Azure Container Apps 中的工作負載配置檔。
所有 支援 Container Apps 的區域都支援裝載容器化函式應用程式的容器應用程式。
如果您的應用程式沒有特定的硬體需求,您可以使用預設的使用量工作負載設定檔,在使用量方案或專用方案中執行環境。 在容器應用程式上執行函式時,您只需支付容器應用程式使用量的費用。 如需詳細資訊,請參閱 Azure Container Apps 定價頁面。
Azure 容器應用程式上的 Azure Functions 支援使用工作負載設定檔在專用方案中啟用 GPU 的裝載。
若要瞭解如何在預設取用方案中建立函式應用程式容器並將其部署至 Container Apps,請參閱 在 Azure Container Apps 上建立您的第一個容器化函式。
若要瞭解如何使用工作負載配置檔建立 Container Apps 環境,並將函式應用程式容器部署到特定工作負載,請參閱 Container Apps 工作負載配置檔。
容器中的函式
若要使用容器應用程式裝載,您的程式碼必須在您所建立及維護 Linux 容器中的函數應用程式上執行。 函式會維護一組 語言特定的基底映像 ,可用來產生容器化函式應用程式。
當您使用 Azure Functions Core Tools 建立程式碼專案並包含 --docker
選項時,Core Tools 會產生具有正確基底映像的 Dockerfile,當做建立容器時的起點。
重要
建立自己的容器時,您必須將容器的基底映射更新為最新的支援基底映射。 Azure Functions 支援的基底映像是特定語言,且可在 Azure Functions 基底映像存放庫中找到。
Functions 小組致力於發佈這些基礎映像的每月更新。 一般更新包括 Functions 執行階段和語言的最新次要版本更新與安全性修正。 您應該定期從最新的基礎映像更新容器,並重新部署更新後的容器版本。 如需詳細資訊,請參閱 維護自定義容器。
當您變更函式程式碼時,必須重建並重新發佈您的容器映像。 如需詳細資訊,請參閱 更新登錄中的映像。
部署選項
Azure Functions 目前支援將容器化函數應用程式部署至 Azure 容器應用程式的下列方法:
- Apache Maven
- ARM 範本
- Azure CLI
- Azure 開發人員命令列介面 (azd)
- Azure Functions Core Tools
- Azure Pipeline 任務
- Azure 入口網站
- Bicep 檔案
- GitHub Actions(GitHub 行動)
- Visual Studio 代碼
您可以使用 Azure Pipelines 或 GitHub Actions,從原始程式碼持續部署容器化應用程式。 部署至容器應用程式時,目前不支援 Functions 的持續部署功能。
受控識別授權
為了獲得最佳安全性,您應該使用 Microsoft Entra 驗證和受控識別授權來連線到遠端服務。 您可以針對這些連線使用受控識別:
在 Container Apps 中執行時,您可以針對支援受控識別的所有系結延伸模組,使用 Microsoft Entra ID 搭配受控識別。 目前,只有這些系結延伸模組支援使用受控識別驗證時的事件驅動調整:
- Azure 事件中樞
- Azure 佇列儲存體
- Azure 服務匯流排
對於其他系結,使用受控識別驗證時,請使用固定複本。 如需詳細資訊,請參閱 Functions 開發人員指南。
虛擬網路整合
當您在容器應用程式環境中裝載函數應用程式時,您的函式能夠同時利用內部和外部可存取的虛擬網路。 若要深入了解環境網路,請參閱 Azure Container Apps 環境中的網路功能。
事件驅動調整
所有函式觸發程式都可以在容器化函式應用程式中使用。 不過,在 Container Apps 環境中執行時,只有這些觸發程式可以根據收到的事件動態調整(從零個實例) :
- Azure Cosmos DB (KEDA 連線)
- 事件格線
- Azure 事件中樞
- Azure Blob 儲存體(基於事件網格)
- Azure 佇列儲存體
- Azure 服務匯流排
- Durable Functions (MSSQL 記憶體提供者)
- HTTP 協定
- 卡 夫 卡
- 計時器
容器應用程式上的 Azure Functions 是設計來根據事件目標設定縮放參數和規則。 您不需要擔心設定 KEDA 縮放物件。 建立或修改函數應用程式時,您仍然可以設定最小和最大複本計數。 下列 Azure CLI 命令會設定從 Azure Container Registry 在容器應用程式環境中建立新函數應用程式時的最小和最大複本計數:
az functionapp create --name <APP_NAME> --resource-group <MY_RESOURCE_GROUP> --max-replicas 15 --min-replicas 1 --storage-account <STORAGE_NAME> --environment MyContainerappEnvironment --image <LOGIN_SERVER>/azurefunctionsimage:v1 --registry-username <USERNAME> --registry-password <SECURE_PASSWORD> --registry-server <LOGIN_SERVER>
下列命令會在現有的函數應用程式上設定相同的最小和最大複本計數:
az functionapp config container set --name <APP_NAME> --resource-group <MY_RESOURCE_GROUP> --max-replicas 15 --min-replicas 1
受控資源群組
容器應用程式上的 Azure Functions 會在特別受控的資源群組中執行容器化函數應用程式資源。 這些受控資源群組可藉由防止非預期或未經授權的修改或刪除受控群組中的資源,甚至是服務主體,協助保護應用程式的一致性。
當您第一次在容器應用程式環境中建立函數應用程式資源時,隨即會為您建立受控資源群組。 容器化函數應用程式所需的容器應用程式資源會在此受控資源群組中執行。 您在相同環境中建立的任何其他函數應用程式都會使用此現有的群組。
從環境中移除所有函數應用程式容器資源之後,系統會自動移除受控資源群組。 雖然可以看到受控資源群組,但嘗試進行任何修改或移除受控資源群組都會導致錯誤。 若要從環境中移除受控資源群組,請移除所有函數應用程式容器資源,隨即會為您移除受控資源群組。
如果您遇到這些受控資源群組的任何問題,應連絡支持人員。
應用程式記錄檔
您可以使用 Azure 監視器 Application Insights 來監視容器化函式應用程式裝載在 Container Apps 中,就像使用 Azure Functions 所裝載的應用程式一樣。 如需詳細資訊,請參閱 監視 Azure Functions。
對於支援事件驅動調整的系結,縮放事件會記錄為 FunctionsScalerInfo
Log Analytics工作區中的事件和 FunctionsScalerError
事件。 如需詳細資訊,請參閱 Azure Container Apps 中的應用程式記錄。
容器應用程式裝載的考量事項
將函數應用程式容器部署至容器應用程式時,請記住下列考量事項:
- 這些限制適用於 Kafka 觸發程序:
- 在容器應用程式上裝載時,不支援
ssl
的通訊協定值。 使用不同的 通訊協定值。 - 若要讓 Kafka 觸發程序在連線到事件中樞時進行動態調整,
username
屬性必須解析為包含實際使用者名稱值的應用程式設定。 使用預設值$ConnectionString
時,Kafka 觸發程式無法讓應用程式動態調整。
- 在容器應用程式上裝載時,不支援
- 針對內建的 Container Apps 原則定義,目前僅適用於 Azure Functions 容器的環境層級原則。
- 根據預設,容器化函式應用程式會監視埠 80 以取得連入要求。 如果您的應用程式必須使用不同的埠,請使用
WEBSITES_PORT
應用程式設定 來變更此預設埠。 - 在容器應用程式上裝載時,您目前無法使用內建的持續部署功能。 您必須改用 Azure Pipelines 或 GitHub Actions 從原始程式碼部署。
- 您目前無法在資源群組之間或訂用帳戶之間移動裝載容器應用程式的函數應用程式部署。 相反地,您必須在新的資源群組、訂用帳戶或區域中重新建立現有的容器化應用程式部署。
- 使用容器應用程式時,您沒有較低層級 Kubernetes API 的直接存取權。
-
containerapp
延伸模組與 Azure CLI 中的appservice-kube
延伸模組互相衝突。 如果您先前已將應用程式發佈至 Azure Arc,請執行az extension list
並確定未安裝appservice-kube
。 如果是,您可以執行az extension remove -n appservice-kube
來移除它。