Azure Functions 的 Azure 容器應用程式裝載
Azure Functions 提供整合式支援,可在 Azure 容器應用程式上開發、部署和管理容器化函數應用程式。 當您需要在 Azure 中與其他微服務、API、網站、工作流程或任何容器裝載程式相同的環境中執行事件驅動的函式時,請使用 Azure 容器應用程式來裝載函數應用程式容器。 容器應用程式裝載可讓您在完全受控的 Kubernetes 型環境中執行函式,內建支援開放原始碼監視、mTLS、Dapr 和 Kubernetes 事件導向自動調整 (KEDA)。
您可以使用 Functions 所支援的任何語言堆疊來撰寫函式程式碼。 您可以透過事件驅動的調整來使用相同的 Functions 觸發程序和繫結。 您也可以使用現有的 Functions 用戶端工具和 Azure 入口網站來建立容器、將函數應用程式容器部署至容器應用程式,以及設定持續部署。
容器應用程式整合也表示網路和可檢視性組態是在容器應用程式環境層級定義,並套用至函數應用程式,如同其套用至容器應用程式環境中執行的所有微服務。 您也可以取得容器應用程式的其他雲端原生功能,包括 KEDA、Dapr、Envoy。 您仍然可以使用 Application Insights 來監視函式執行,而您的函數應用程式可以存取環境所提供的相同虛擬網路資源。
如需 Azure Functions 容器裝載選項的一般概觀,請參閱 Azure Functions 中的 Linux 容器支援。
裝載和工作負載設定檔
Container Apps 有兩個主要主控方案 (無伺服器使用量方案和專用方案),其使用工作負載設定檔更妥善地控制部署資源。 工作負載設定檔會決定部署在環境中容器應用程式的計算和記憶體資源數量。 這些設定檔已設定為符合應用程式的不同需求。
使用量工作負載設定檔是新增至每個工作負載設定檔環境類型的預設設定檔。 您可以在建立環境時或在建立環境之後,將專用工作負載設定檔新增至您的環境。 若要深入了解工作負載設定檔,請參閱 Azure Container Apps 中的工作負載設定檔。
所有支援容器應用程式的區域都支援裝載容器化函數應用程式的容器應用程式。
如果您的應用程式沒有特定的硬體需求,您可以使用預設的使用量工作負載設定檔,在使用量方案或專用方案中執行環境。 在容器應用程式上執行函式時,您只需支付容器應用程式使用量的費用。 如需詳細資訊,請參閱 Azure 容器應用程式定價頁面。
Azure 容器應用程式上的 Azure Functions 支援使用工作負載設定檔在專用方案中啟用 GPU 的裝載。
若要了解如何在預設使用量方案中建立函數應用程式容器並將其部署至容器應用程式,請參閱在 Azure 容器應用程式上建立您的第一個容器化函式。
若要了解如何使用工作負載設定檔建立容器應用程式環境,並將函數應用程式容器部署到特定工作負載,請參閱容器應用程式工作負載設定檔。
容器中的函式
若要使用容器應用程式裝載,您的程式碼必須在您所建立及維護 Linux 容器中的函數應用程式上執行。 Functions 會維護一組您可用來產生容器化函數應用程式的語言特定基礎映像。
當您使用 Azure Functions Core Tools 建立程式碼專案並包含 --docker
選項時,Core Tools 會產生具有正確基底映像的 Dockerfile,您可用來當做建立容器時的起點。
重要
在建立自己的容器時,必須讓容器的基礎映像持續更新為最新的受支援基礎映像。 Azure Functions 的受支援基礎映像為語言特定,可在 Azure Functions 基礎映像存放庫中找到。
Functions 小組致力於發佈這些基礎映像的每月更新。 一般更新包括 Functions 執行階段和語言的最新次要版本更新與安全性修正。 您應該定期從最新的基礎映像更新容器,並重新部署更新後的容器版本。
當您變更函式程式碼時,必須重建並重新發佈您的容器映像。 如需詳細資訊,請參閱更新登錄中的映像。
部署選項
Azure Functions 目前支援將容器化函數應用程式部署至 Azure 容器應用程式的下列方法:
- Apache Maven
- ARM 範本
- Azure CLI
- Azure Developer CLI (azd)
- Azure Functions Core Tools
- Azure Pipeline 工作
- Azure 入口網站
- Bicep 檔案
- GitHub 動作
- Visual Studio Code
虛擬網路整合
當您在容器應用程式環境中裝載函數應用程式時,您的函式能夠同時利用內部和外部可存取的虛擬網路。 若要深入了解環境網路,請參閱 Azure 容器應用程式環境中的網路功能。
設定調整規則
容器應用程式上的 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 事件中樞
- Azure Blob 記憶體(以事件為基礎)
- Azure 佇列儲存體
- Azure 服務匯流排
- Durable Functions (MSSQL 記憶體提供者)
- HTTP
- Kafka
- 計時器
- 這些限制適用於 Kafka 觸發程序:
- 在容器應用程式上裝載時,不支援
ssl
的通訊協定值。 使用不同的通訊協定值。 - 若要讓 Kafka 觸發程序在連線到事件中樞時進行動態調整,
username
屬性必須解析為包含實際使用者名稱值的應用程式設定。 使用預設$ConnectionString
值時,Kafka 觸發程序將無法讓應用程式動態調整。
- 在容器應用程式上裝載時,不支援
- 針對內建的容器應用程式原則定義,目前僅適用於 Azure Functions 容器的環境層級原則。
- 您可以針對這些連線使用受控識別:
- 您目前無法在資源群組之間或訂用帳戶之間移動裝載容器應用程式的函數應用程式部署。 相反地,您必須在新的資源群組、訂用帳戶或區域中重新建立現有的容器化應用程式部署。
- 使用容器應用程式時,您沒有較低層級 Kubernetes API 的直接存取權。
containerapp
延伸模組與 Azure CLI 中的appservice-kube
延伸模組互相衝突。 如果您先前已將應用程式發佈至 Azure Arc,請執行az extension list
並確定未安裝appservice-kube
。 如果是,您可以執行az extension remove -n appservice-kube
來移除它。