適用於 Azure Functions 的 Dapr 延伸模組
適用於 Azure Functions 的 Dapr 延伸模組是一組可讓開發人員輕鬆地整合 Azure Functions 與分散式應用程式執行階段 (Dapr) 平台的工具和服務。
Azure Functions 是事件驅動的計算服務,會提供一組可與其他 Azure 服務輕鬆連線的觸發程序和繫結。 Dapr 則會提供一組建置組塊和用於建置分散式應用程式的最佳做法,包括微服務、狀態管理、發佈/訂閱傳訊等等。
透過 Dapr 與 Azure Functions 的整合,您可以建置會針對來自 Dapr 或外部系統的事件做出回應的函式。
動作 | 方向 | 類型 |
---|---|---|
針對 Dapr 輸入繫結來觸發 | N/A | daprBindingTrigger (部分機器翻譯) |
針對 Dapr 服務叫用來觸發 | N/A | daprServiceInvocationTrigger (部分機器翻譯) |
針對 Dapr 主題訂用帳戶來觸發 | N/A | daprTopicTrigger (部分機器翻譯) |
提取某個執行的 Dapr 狀態 | In | daprState (部分機器翻譯) |
提取某個執行的 Dapr 祕密 | In | daprSecret (部分機器翻譯) |
將值儲存至 Dapr 狀態 | 外 | daprState (部分機器翻譯) |
叫用另一個 Dapr 應用程式 | 外 | daprInvoke (部分機器翻譯) |
將訊息發佈至 Dapr 主題 | 外 | daprPublish (部分機器翻譯) |
將值傳送至 Dapr 輸出繫結 | 外 | daprBinding (部分機器翻譯) |
安裝擴充功能
您安裝的延伸模組 NuGet 套件取決於您在函式應用程式中使用的 C# 模式內含式 (部分機器翻譯) 或隔離式背景工作處理序 (部分機器翻譯):
安裝搭售方案
您可以在 host.json
檔案中新增或取代下列程式碼,以新增延伸模組:
{
"version": "2.0",
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle",
"version": "[4.*, 5.0.0)"
}
}
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 設定值會被視為應用程式範圍變更。 當您在多個修訂模式中執行容器應用程式時,這些設定的變更將不會建立新的修訂。 相反地,所有現有的修訂都會重新啟動,以確保它們已設定最新的值。
使用 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,則其會預設為連接埠 3500
。
您可以在 function.json
中設定繫結 (或屬性 (attribute)) 的 DaprAddress
屬性 (property),以覆寫輸入和輸出繫結所使用的 Dapr 位址。 依預設,其會使用 http://localhost:{DAPR_HTTP_PORT}
。
函式應用程式仍會為 HTTP 觸發程序等項目公開另一個連接埠和端點,其在本機會預設為 7071
,但在容器中,則會預設為 80
。
繫結型別
針對 .NET 所支援的繫結類型同時取決於延伸模組版本和 C# 執行模式,這可以是下列其中一項:
Dapr 延伸模組會根據下表來支援參數類型。
繫結 | 參數型別 |
---|---|
Dapr 觸發程序 | daprBindingTrigger (英文) daprServiceInvocationTrigger (英文) daprTopicTrigger (英文) |
Dapr 輸入 | daprState (英文) daprSecret (英文) |
Dapr 輸出 | daprState (英文) daprInvoke (英文) daprPublish (英文) daprBinding (英文) |
如需使用這些類型的範例,請參閱 GitHub 的延伸模組存放庫。
試用適用於 Azure Functions 的 Dapr 延伸模組
透過所提供的範例來了解如何使用適用於 Azure Functions 的 Dapr 延伸模組。
範例 | 描述 |
---|---|
快速入門 | 開始使用 Dapr 發佈/訂閱繫結和 HttpTrigger 。 |
Dapr Kafka (英文) | 了解如何搭配 Kafka 繫結 Dapr 元件來使用 Azure Functions Dapr 延伸模組。 |
.NET 內含式 (英文) | 了解如何使用 Azure Functions 內含式模型來與 .NET 中的多個 Dapr 元件整合,例如服務叫用、發佈/訂閱、繫結和狀態管理。 |
.NET 隔離式 (英文) | 使用 Azure Functions 跨處理序 (OOP) 執行模型來與 .NET 中的 Dapr 元件整合。 |
試用適用於 Azure Functions 的 Dapr 延伸模組
透過所提供的範例來了解如何使用適用於 Azure Functions 的 Dapr 延伸模組。
範例 | 描述 |
---|---|
Java 函式 (英文) | 了解如何使用 Java 以使用 Azure Functions Dapr 延伸模組。 |
試用適用於 Azure Functions 的 Dapr 延伸模組
透過所提供的範例來了解如何使用適用於 Azure Functions 的 Dapr 延伸模組。
範例 | 描述 |
---|---|
快速入門 | 開始使用 Dapr 發佈/訂閱繫結和 HttpTrigger 。 |
Dapr Kafka (英文) | 了解如何搭配 Kafka 繫結 Dapr 元件來使用 Azure Functions Dapr 延伸模組。 |
JavaScript | 執行 JavaScript Dapr 函式應用程式,並使用 Azure Functions 來與 Dapr 服務叫用、發佈/訂閱、繫結和狀態管理整合。 |
試用適用於 Azure Functions 的 Dapr 延伸模組
透過所提供的範例來了解如何使用適用於 Azure Functions 的 Dapr 延伸模組。
範例 | 描述 |
---|---|
PowerShell 函式 (英文) | 了解如何搭配 PowerShell 來使用 Azure Functions Dapr 延伸模組。 |
試用適用於 Azure Functions 的 Dapr 延伸模組
透過所提供的範例來了解如何使用適用於 Azure Functions 的 Dapr 延伸模組。
範例 | 描述 |
---|---|
Dapr Kafka (英文) | 了解如何搭配 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
下一步
深入了解 Dapr。(英文)