Azure Functions 用の Dapr 拡張機能
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 パッケージバージョン 1.0.0 をインストールすることで使用できます。
.NET CLI の使用
dotnet add package Microsoft.Azure.WebJobs.Extensions.Dapr
バンドルのインストール
この拡張機能を追加するには、host.json
ファイル内に次のコードを追加するまたは置き換えます。
{
"version": "2.0",
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle",
"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] を選びます。
Dapr のポートとリスナー
Dapr から関数をトリガーすると、拡張機能はポート 3001
を自動的に公開して、Dapr サイドカーから着信する要求をリッスンします。
重要
ポート 3001
は、Dapr トリガーが関数アプリで定義されている場合にのみ、公開およびリッスンされます。 Dapr を使うと、サイドカーは、定義されたポートから応答を受信するのを待ってから、インスタンス化を完了します。 トリガーがない場合は、dapr.io/port
注釈または --app-port
を定義 "しないでください"。 それを行うと、Dapr サイドカーからアプリケーションがロックされる可能性があります。
入力と出力のバインドのみを使っている場合は、ポート 3001
を公開または定義する必要はありません。
既定では、Azure Functions は Dapr と通信しようとするとき、環境変数 DAPR_HTTP_PORT
から解決されたポートを介して Dapr を呼び出します。 その変数が null の場合、ポートは既定で 3500
になります。
バインド (または属性) の function.json
で DaprAddress
プロパティを設定することで、入力と出力のバインドで使われる 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 Function が Azure Container Apps 内にデプロイされている場合は、「Azure Functions 用の Dapr 拡張機能」の「Dapr の有効化」手順を参照してください。
Azure Function が 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 Function をローカルで実行している場合は、次のコマンドを実行して、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