事件
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 Pipelines 或 GitHub Actions,從原始程式碼持續部署容器化應用程式。 部署至容器應用程式時,目前不支援 Functions 的持續部署功能。
為了獲得最佳安全性,您應該使用 Microsoft Entra 驗證和受控識別授權來連線到遠端服務。 您可以針對這些連線使用受控識別:
在 Container Apps 中執行時,您可以針對支援受控識別的所有系結延伸模組,使用 Microsoft Entra ID 搭配受控識別。 目前,只有這些系結延伸模組支援使用受控識別驗證時的事件驅動調整:
- Azure 事件中樞
- Azure 佇列儲存體
- Azure 服務匯流排
對於其他系結,使用受控識別驗證時,請使用固定複本。 如需詳細資訊,請參閱 Functions 開發人員指南。
當您在容器應用程式環境中裝載函數應用程式時,您的函式能夠同時利用內部和外部可存取的虛擬網路。 若要深入了解環境網路,請參閱 Azure 容器應用程式環境中的網路功能。
所有函式觸發程式都可以在容器化函式應用程式中使用。 不過,在 Container Apps 環境中執行時,只有這些觸發程式可以根據收到的事件動態調整(從零個實例) :
- 事件格線
- Azure 事件中樞
- Azure Blob 儲存體 (事件型)
- Azure 佇列儲存體
- Azure 服務匯流排
- Durable Functions (MSSQL 記憶體提供者)
- HTTP
- Kafka
- 計時器
容器應用程式上的 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 觸發程式無法讓應用程式動態調整。
- 在容器應用程式上裝載時,不支援
- 針對內建的容器應用程式原則定義,目前僅適用於 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
來移除它。
其他資源
訓練
模組
在 Azure 容器應用程式中設定容器應用程式 - Training
本課程模組將指導使用者如何建立、設定和管理容器應用程式及其環境。 它也會探討輸入選項、縮放調整、執行個體管理和安全性考量事項,以及設定 Azure 容器應用程式的最佳做法。
認證
Microsoft Certified: Azure Developer Associate - Certifications
在 Microsoft Azure 中建置端對端解決方案,以建立 Azure Functions、實作和管理 Web 應用程式、開發使用 Azure 儲存體的解決方案等等。
文件
-
說明在 Azure 中 Linux 容器中執行函式程式碼的選項和優點。
-
在 Azure 容器應用程式上建立您的第一個容器化 Azure Functions
從容器登錄中的 Linux 映像部署您的第一個函式應用程式,開始在 Azure 容器應用程式上使用 Azure Functions。
-
了解如何使用在 Linux 容器中執行的函式應用程式。