次の方法で共有


Azure Functions 用 Dapr 拡張機能

Azure Functions 用 Dapr 拡張機能は、開発者が Azure Functions と 分散アプリケーション ランタイム (Dapr) プラットフォームを簡単に統合できる一連のツールとサービスです。

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

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

アクション 通信方向 タイプ
Dapr 入力バインドでのトリガー N/A daprBindingTrigger
Dapr サービス呼び出しでのトリガー N/A daprServiceInvocationTrigger
Dapr トピック サブスクリプションでのトリガー N/A daprTopicTrigger
実行の Dapr 状態をプルする In daprState
実行のために Dapr シークレットをプルする In daprSecret
値を Dapr 状態に保存する Out daprState
別の Dapr アプリを呼び出す Out daprInvoke
Dapr トピックにメッセージを発行する Out daprPublish
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)値は、少なくとも4.0.05.0.0未満のバンドル バージョン (4.x のすべての潜在的なバージョンを含む) を使用するように Functions ホストに指示します。 この表記は、v4.x 拡張機能バンドルの利用可能な最新のマイナー バージョンでアプリを効果的に維持します。

可能であれば、最新の拡張機能バンドルメジャー バージョンを使用し、ランタイムが最新のマイナー バージョンを自動的に維持できるようにする必要があります。 最新のバンドルの内容は、 拡張機能バンドルのリリース ページで確認できます。 詳細については、 Azure Functions 拡張機能バンドルに関するページを参照してください。

Dapr の有効化

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

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

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

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

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

Azure portal を使用して Dapr を構成する場合は、関数アプリに移動し、左側のメニューから Dapr を選択します。

Azure portal で Function App の Dapr 有効化を見つける場所を示すスクリーンショット。

Dapr ポートとリスナー

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

Important

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

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

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

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

関数アプリは、HTTP トリガーなどの別のポートとエンドポイントを引き続き公開します。HTTP トリガーはローカルでは既定で 7071 ですが、コンテナーでは既定で 80されます。

バインドの種類

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

インプロセス クラス ライブラリは、Functions ランタイムと同じプロセスで実行されるコンパイル済みの C# 関数です。

Dapr 拡張機能では、次の表に従ってパラメーターの型がサポートされています。

Binding パラメーターの型
Dapr トリガー daprBindingTrigger
daprServiceInvocationTrigger
daprTopicTrigger
Dapr 入力 daprState
daprSecret
Dapr の出力 daprState
daprInvoke
daprPublish
daprBinding

これらの型の使用例については、 拡張機能の GitHub リポジトリを参照してください。

Azure Functions 用の Dapr 拡張機能を試す

提供されているサンプルを使用して、Azure Functions 用 Dapr 拡張機能を使用する方法について説明します。

Samples Description
クイック スタート Dapr Pub/sub バインドと HttpTriggerの使用を開始します。
Dapr Kafka Kafka バインド Dapr コンポーネントで Azure Functions Dapr 拡張機能を使用する方法について説明します。
.NET のインプロセス Azure Functions のインプロセス モデルを使用して、サービス呼び出し、Pub/sub、バインディング、状態管理など、.NET の複数の Dapr コンポーネントと統合する方法について説明します。
.NET Isolated 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 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 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 Container Apps にデプロイされている場合は、 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 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 の詳細を確認します。