適用於 Azure Functions 的 Dapr 延伸模組是一組工具和服務,可讓開發人員輕鬆地將 Azure Functions 與 分散式應用程式執行階段 (Dapr) 平臺整合。
Azure Functions 是事件驅動的計算服務,提供一組 觸發程式和繫結 ,以輕鬆地與其他 Azure 服務連線。 Dapr 提供一組建置組塊和最佳做法,用於建置分散式應用程式,包括微服務、狀態管理、發佈/訂閱傳訊等等。
透過 Dapr 與 Functions 之間的整合,您可以建置對來自 Dapr 或外部系統的事件做出反應的函式。
| 行動 | 方向 | 類型 |
|---|---|---|
| 在 Dapr 輸入繫結上觸發 | N/A | daprBindingTrigger |
| 在 Dapr 服務叫用上觸發 | N/A | daprServiceInvocationTrigger |
| 在 Dapr 主題訂用帳戶上觸發 | N/A | daprTopic觸發程式 |
| 提取 Dapr 狀態以進行執行 | In | daprState |
| 提取 Dapr 秘密以進行執行 | In | dapr秘密 |
| 將值儲存至 Dapr 狀態 | Out | daprState |
| 叫用另一個 Dapr 應用程式 | Out | daprInvoke |
| 將訊息發佈至 Dapr 主題 | Out | dapr發佈 |
| 將值傳送至 Dapr 輸出繫結 | Out | daprBinding |
安裝擴充功能
安裝配套
若要能夠在應用程式中使用這個繫結延伸模組,請確定專案根目錄中的 host.json 檔案包含下列 extensionBundle 參考:
{
"version": "2.0",
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle",
"version": "[4.0.0, 5.0.0)"
}
}
在此範例中, version 的 [4.0.0, 5.0.0) 值指示 Functions 主機使用至少 4.0.0 但小於 5.0.0的套件版本,其中包括 4.x 的所有潛在版本。 此表示法可有效地在 v4.x 擴充功能套件組合的最新可用次要版本上維護您的應用程式。
可能的話,您應該使用最新的延伸套件組合主要版本,並允許執行階段自動維護最新的次要版本。 您可以在 延伸套件組合發行頁面上檢視最新套件組合的內容。 如需詳細資訊,請參閱 Azure Functions 延伸模組套件組合。
Dapr 啟用
您可以根據執行階段內容,使用各種 [引數和註釋][dapr-args] 來設定 Dapr。 您可以透過兩個通道設定適用於 Azure Functions 的 Dapr:
- 基礎結構即程式碼 (IaC) 範本,如 Bicep 或 Azure Resource Manager (ARM) 範本
- Azure 入口網站
使用 IaC 範本時,請在容器應用程式資源定義的區段中 properties 指定下列引數。
DaprConfig: {
enabled: true
appId: '${envResourceNamePrefix}-funcapp'
appPort: 3001
httpReadBufferSize: ''
httpMaxRequestSize: ''
logLevel: ''
enableApiLogging: true
}
上述 Dapr 設定值會被視為應用程式範圍變更。 當您在多重修訂模式中執行容器應用程式時,變更這些設定不會建立新的修訂。 相反地,所有現有的修訂都會重新啟動,以確保它們設定為最 up-to的 -date 值。
使用 Azure 入口網站設定 Dapr 時,請流覽至您的函式應用程式,然後從左側功能表中選取 [Dapr ]:
Dapr 埠和接聽程式
當您從 Dapr 觸發函式時,延伸模組會自動公開埠 3001 ,以接聽來自 Dapr 側車的傳入要求。
這很重要
只有在函式應用程式中定義 Dapr 觸發程式時,才會公開和接聽埠 3001 。 使用 Dapr 時,側車會等候從定義的埠接收回應,再完成具現化。
請勿 定義 dapr.io/port 註解,或 --app-port 除非您有觸發程式。 這樣做可能會從 Dapr 側車鎖定您的應用程式。
如果您只使用輸入和輸出繫結,則不需要公開或定義埠 3001 。
根據預設,當 Azure Functions 嘗試與 Dapr 通訊時,它會透過從環境變數 DAPR_HTTP_PORT解析的埠呼叫 Dapr。 如果該變數為 null,則預設為 port 3500。
您可以在繫結 (或屬性) 中DaprAddress設定function.json屬性,覆寫輸入和輸出繫結所使用的 Dapr 位址。 依預設,它會使用 http://localhost:{DAPR_HTTP_PORT}。
函式應用程式仍會公開 HTTP 觸發程式等專案的另一個埠和端點,在本機預設為 7071,但在容器中,預設為 80。
繫結類型
.NET 支援的繫結類型取決於延伸模組版本和 C# 執行模式,這可以是下列其中一項:
Dapr 延伸模組會根據下表支援參數類型。
| 捆綁 | 參數類型 |
|---|---|
| Dapr 觸發程序 |
daprBindingTrigger daprServiceInvocationTrigger daprTopic觸發程式 |
| Dapr 輸入 |
daprState dapr秘密 |
| Dapr 輸出 |
daprState daprInvoke dapr發佈 daprBinding |
如需使用這些類型的範例,請參閱 擴充功能的 GitHub 存放庫。
試用適用於 Azure Functions 的 Dapr 延伸模組
瞭解如何透過提供的範例使用適用於 Azure Functions 的 Dapr 延伸模組。
| Samples | Description |
|---|---|
| 快速入門 | 開始使用 Dapr Pub/Sub 繫結和 HttpTrigger。 |
| Dapr 卡夫卡 | 瞭解如何搭配 Kafka 系結 Dapr 元件使用 Azure Functions Dapr 延伸模組。 |
| .NET 同進程 | 瞭解如何使用 Azure Functions 同進程模型與 .NET 中的多個 Dapr 元件整合,例如服務叫用、Pub/sub、系結和狀態管理。 |
| .NET 隔離 | 使用 Azure Functions out-of-proc (OOP) 執行模型與 .NET 中的 Dapr 元件整合。 |
試用適用於 Azure Functions 的 Dapr 延伸模組
瞭解如何透過提供的範例使用適用於 Azure Functions 的 Dapr 延伸模組。
| Samples | Description |
|---|---|
| Java 函數 | 瞭解如何使用 Java 使用 Azure Functions Dapr 延伸模組。 |
試用適用於 Azure Functions 的 Dapr 延伸模組
瞭解如何透過提供的範例使用適用於 Azure Functions 的 Dapr 延伸模組。
| Samples | Description |
|---|---|
| 快速入門 | 開始使用 Dapr Pub/Sub 繫結和 HttpTrigger。 |
| Dapr 卡夫卡 | 瞭解如何搭配 Kafka 系結 Dapr 元件使用 Azure Functions Dapr 延伸模組。 |
| JavaScript | 執行 JavaScript Dapr 函式應用程式,並使用 Azure Functions 與 Dapr 服務叫用、Pub/sub、系結和狀態管理整合。 |
試用適用於 Azure Functions 的 Dapr 延伸模組
瞭解如何透過提供的範例使用適用於 Azure Functions 的 Dapr 延伸模組。
| Samples | Description |
|---|---|
| PowerShell 函式 | 瞭解如何搭配 PowerShell 使用 Azure Functions Dapr 延伸模組。 |
試用適用於 Azure Functions 的 Dapr 延伸模組
瞭解如何透過提供的範例使用適用於 Azure Functions 的 Dapr 延伸模組。
| Samples | Description |
|---|---|
| Dapr 卡夫卡 | 瞭解如何搭配 Kafka 系結 Dapr 元件使用 Azure Functions Dapr 延伸模組。 |
| Python v1 版 | 執行 Dapr 化的 Python 應用程式,並使用 Azure Functions Python v1 程式設計模型與 Dapr 元件整合。 |
| Python v2 | 使用 Azure Functions Python v2 程式設計模型啟動 Dapr 應用程式,以與 Dapr 元件整合。 |
故障排除
本節說明如何針對 Azure Functions 使用 Dapr 延伸模組時可能發生的問題進行疑難排解。
確定您的環境中已啟用 Dapr
如果您在 Azure Functions 中使用 Dapr 繫結和觸發程序,且您的環境中未啟用 Dapr,您可能會收到錯誤訊息: Dapr sidecar isn't present. Please see (https://aka.ms/azure-functions-dapr-sidecar-missing) for more information. 若要在您的環境中啟用 Dapr:
如果您的 Azure 函式部署在 Azure 容器應用程式中,請參閱 Azure Functions 的 Dapr 擴充功能的 Dapr 啟用指示。
如果您的 Azure 函式部署在 Kubernetes 中,請確認 部署的 YAML 設定 具有下列註解:
annotations: ... dapr.io/enabled: "true" dapr.io/app-id: "functionapp" # You should only set app-port if you are using a Dapr trigger in your code. dapr.io/app-port: "<DAPR_APP_PORT>" ...如果您在本機執行 Azure 函式,請執行下列命令,以確保您使用 Dapr 執行函式應用程式:
dapr run --app-id functionapp --app-port <DAPR_APP_PORT> --components-path <COMPONENTS_PATH> -- func host start
確認 Dapr 設定中的應用程式埠值
根據預設,Azure Functions 的 Dapr 延伸模組會在埠 3001 上啟動 HTTP 伺服器。 您可以使用環境變數來DAPR_APP_PORT設定此連接埠。
如果您在執行 Azure Functions 應用程式時提供不正確的應用程式埠值,您可能會收到錯誤訊息: The Dapr sidecar is configured to listen on port {portInt}, but the app server is running on port {appPort}. This may cause unexpected behavior. For more information, visit [this link](https://aka.ms/azfunc-dapr-app-config-error). 若要解決此錯誤訊息:
在容器應用程式的 Dapr 設定中:
如果您在程式碼中使用 Dapr 觸發程序,請確認應用程式埠已設定為
3001或設定為環境變數的DAPR_APP_PORT值。如果您 未 在程式碼中使用 Dapr 觸發程序,請確認 未設定應用程式 埠。 它應該是空的。
確認您在 Dapr 設定中提供正確的應用程式埠值。
如果您使用 Azure 容器應用程式,請在 Bicep 中指定應用程式埠:
DaprConfig: { ... appPort: <DAPR_APP_PORT> ... }如果您使用 Kubernetes 環境,請設定
dapr.io/app-port註釋:annotations: ... dapr.io/app-port: "<DAPR_APP_PORT>" ...如果您是在本機開發,請確認您在使用 Dapr 執行函式應用程式時所設定
--app-port的:dapr run --app-id functionapp --app-port <DAPR_APP_PORT> --components-path <COMPONENTS_PATH> -- func host start