共用方式為


適用於 Azure Functions 的 Dapr 延伸模組

適用於 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

安裝擴充功能

您安裝的延伸模組 NuGet 套件取決於您在函式應用程式中使用的 C# 模式 同程序隔離背景工作進程

安裝 NuGet 套件 1.0.0 版即可使用此延伸模組。

使用 .NET CLI:

dotnet add package Microsoft.Azure.WebJobs.Extensions.Dapr

安裝配套

若要能夠在應用程式中使用這個繫結延伸模組,請確定專案根目錄中的 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 ]:

螢幕擷取畫面示範在 Azure 入口網站中尋找函式應用程式啟用 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# 執行模式,這可以是下列其中一項:

同進程類別庫是已編譯的 C# 函式,在與 Functions 執行階段相同的進程中執行。

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). 若要解決此錯誤訊息:

  1. 在容器應用程式的 Dapr 設定中:

    • 如果您在程式碼中使用 Dapr 觸發程序,請確認應用程式埠已設定為 3001 或設定為環境變數的 DAPR_APP_PORT 值。

    • 如果您 在程式碼中使用 Dapr 觸發程序,請確認 未設定應用程式 埠。 它應該是空的。

  2. 確認您在 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。