Azure Functions 用の Dapr 拡張機能

重要

Azure Functions の Dapr 拡張機能は現在プレビュー段階であり、Azure Container Apps 環境でのみサポートされています。

Azure Functions 用 Dapr 拡張機能の一連のツールとサービスを使うことで、開発者は Azure Functions と Distributed Application Runtime (Dapr) プラットフォームを簡単に統合できます。

Azure Functions は、他の Azure サービスと簡単に接続するための一連のトリガーとバインドを提供するイベントドリブンのコンピューティング サービスです。 Dapr には、マイクロサービス、状態管理、パブリッシュ/サブスクライブ メッセージングなど、分散アプリケーションを構築するための一連の構成要素とベスト プラクティスが用意されています。

Dapr と Functions を統合すると、Dapr または外部システムからのイベントに反応する関数を構築できます。

アクション Direction Type
Dapr 入力バインドでトリガーする 該当なし daprBindingTrigger
Dapr サービス呼び出しでトリガーする 該当なし daprServiceInvocationTrigger
Dapr トピック サブスクリプションでトリガーする 該当なし daprTopicTrigger
実行に対する Dapr の状態をプルする 含まれる daprState
実行のために Dapr シークレットをプルする 含まれる daprSecret
値を Dapr の状態に保存する Out daprState
別の Dapr アプリを呼び出す Out daprInvoke
Dapr トピックにメッセージを発行する Out daprPublish
Dapr 出力バインドに値を送信する Out daprBinding

拡張機能のインストール

インストールする拡張機能 NuGet パッケージは、関数アプリで使用している C# モード (インプロセスまたは分離ワーカー プロセス) によって異なります。

この拡張機能は、NuGet パッケージ バージョン 0.17.0-preview01 をインストールすることで使用できます。

.NET CLI の使用

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

バンドルのインストール

プレビュー拡張機能は、host.json ファイルで次のコードを追加または置き換えることによって追加できます。

{
  "version": "2.0",
  "extensionBundle": {
    "id": "Microsoft.Azure.Functions.ExtensionBundle.Preview",
    "version": "[4.*, 5.0.0)"
  }
}

Dapr の有効化

Dapr は、ランタイム コンテキストに基づいてさまざまな[引数と注釈](dapr-args)を使用して構成できます。 2 つのチャネルを使って、Azure Functions 用に Dapr を構成できます。

  • Bicep や Azure Resource Manager (ARM) のテンプレートのような、コードとしてのインフラストラクチャ (IaC) テンプレート
  • Azure portal

IaC テンプレートを使用する場合は、コンテナー アプリ リソース定義の properties セクションで、次の引数を指定します。

DaprConfig: {
  enabled: true
  appId: '${envResourceNamePrefix}-funcapp'
  appPort: 3001
  httpReadBufferSize: ''
  httpMaxRequestSize: ''
  logLevel: ''
  enableApiLogging: true
}

上記の Dapr 構成値は、アプリケーション スコープの変更と見なされます。 複数リビジョン モードでコンテナー アプリを実行すると、これらの設定を変更しても新しいリビジョンは作成されません。 代わりに、既存のすべてのリビジョンが再起動されて、最新の値で確実に構成されます。

Azure portal を使って Dapr を構成するときは、関数アプリに移動し、左側のメニューから [Dapr] を選びます。

Screenshot demonstrating where to find Dapr enablement for a Function App in the Azure portal.

Dapr のポートとリスナー

Dapr から関数をトリガーすると、拡張機能はポート 3001 を自動的に公開して、Dapr サイドカーから着信する要求をリッスンします。

重要

ポート 3001 は、Dapr トリガーが関数アプリで定義されている場合にのみ、公開およびリッスンされます。 Dapr を使うと、サイドカーは、定義されたポートから応答を受信するのを待ってから、インスタンス化を完了します。 トリガーがない場合は、dapr.io/port 注釈または --app-port を定義 "しないでください"。 それを行うと、Dapr サイドカーからアプリケーションがロックされる可能性があります。

入力と出力のバインドのみを使っている場合は、ポート 3001 を公開または定義する必要はありません。

既定では、Azure Functions は Dapr と通信しようとするとき、環境変数 DAPR_HTTP_PORT から解決されたポートを介して Dapr を呼び出します。 その変数が null の場合、ポートは既定で 3500 になります。

バインド (または属性) の function.jsonDaprAddress プロパティを設定することで、入力と出力のバインドで使われる Dapr アドレスをオーバーライドできます。 既定では、http://localhost:{DAPR_HTTP_PORT} が使われます。

関数アプリには、まだ他にも HTTP トリガーなどのために公開されるポートとエンドポイントがあります。その既定値は、ローカル環境では 7071 ですが、コンテナーでは 80 です。

バインドの種類

.NET でサポートされるバインドの種類は、拡張機能のバージョンと C# 実行モードの両方によって異なります。これは次のいずれかになります。

インプロセス クラス ライブラリは、Functions ランタイムと同じプロセスで実行されるコンパイル済みの 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 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 トリガーを使用している場合は、アプリ ポートが環境変数の値DAPR_APP_PORT3001設定されていることを確認します。

    • コードで Dapr トリガーを使用していない場合は、アプリ ポートが設定されていないことを確認します。 中には何も入っていないはずです。

  2. Dapr 構成で正しいアプリ ポート値を指定したことを確認します。

    • Azure Container Apps を使用している場合は、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 の詳細を理解する。