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.0が5.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 を選択します。
Dapr ポートとリスナー
Dapr から関数をトリガーすると、拡張機能はポート 3001 を自動的に公開して、Dapr サイドカーからの受信要求をリッスンします。
Important
ポート 3001 は、Dapr トリガーが関数アプリで定義されている場合にのみ公開され、リッスンされます。 Dapr を使用する場合、サイドカーは、インスタンス化を完了する前に、定義されたポートからの応答の受信を待機します。 トリガーがない限り、注釈またはdapr.io/portを定義--app-port。 そうすると、Dapr サイドカーからアプリケーションがロックされる可能性があります。
入力バインドと出力バインドのみを使用している場合、ポート 3001 を公開または定義する必要はありません。
既定では、Azure Functions は Dapr と通信しようとしたときに、環境変数 DAPR_HTTP_PORTから解決されたポートを介して Dapr を呼び出します。 その変数が null の場合、既定ではポート 3500になります。
バインディング (または属性) のDaprAddressでfunction.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). このエラー メッセージを解決するには:
コンテナー アプリの Dapr 設定で、次の手順を実行します。
コードで Dapr トリガーを使用している場合は、アプリ ポートが
3001またはDAPR_APP_PORT環境変数の値に設定されていることを確認します。コードで Dapr トリガーを使用 していない 場合は、アプリ ポートが設定 されていないこと を確認します。 空である必要があります。
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