こちらの一連の記事では、Azure Functions で SignalR Service のバインドを使用して、Azure SignalR Service に接続されたクライアントに対して認証を行い、リアルタイム メッセージを送信する方法を説明しています。 Azure Functions ランタイム バージョン2.x 以上では、SignalR Service の入力および出力バインドがサポートされています。
| アクション | タイプ |
|---|---|
| SignalR Service からのメッセージの処理 | トリガー バインド |
| サービス エンドポイント URL とアクセス トークンを返す | 入力バインド |
| SignalR Service メッセージの送信とグループの管理 | 出力バインド |
拡張機能のインストール
インストールする拡張機能 NuGet パッケージは、関数アプリで使用している C# モードによって異なります。
関数は分離された C# ワーカー プロセスで実行されます。 詳しくは、「分離ワーカー プロセスにおける C# Azure Functions の実行のガイド」をご覧ください。
この NuGet パッケージをインストールすることによって、プロジェクトに拡張機能を追加します。
バンドルのインストール
アプリでこのバインド拡張機能を使用できるようにするには、プロジェクトのルートにある 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 拡張機能バンドルに関するページを参照してください。
依存関係を追加する
SignalR Service の注釈を Java 関数で使用するには、azure-functions-java-library-signalr アーティファクト (バージョン 1.0 以降) への依存関係を pom.xml ファイルに追加する必要があります。
<dependency>
<groupId>com.microsoft.azure.functions</groupId>
<artifactId>azure-functions-java-library-signalr</artifactId>
<version>1.0.0</version>
</dependency>
つながり
接続文字列または Microsoft Entra ID を使用して、Azure SignalR Service に接続できます。
接続文字列
Azure SignalR Service の接続文字列を取得する方法については、「Azure SignalR Service の Connection 文字列」を参照してください。
この接続文字列は、AzureSignalRConnectionStringという名前のアプリケーション設定に格納する必要があります。 バインド構成の connectionStringSetting プロパティを使用して、アプリケーション設定名をカスタマイズできます。
ID ベースの接続
バージョン 1.7.0 以降を使用している場合、シークレットで接続文字列を使用する代わりに、アプリで Microsoft Entra ID を使用させることができます。
まず、Microsoft Entra ID にSignalR サービス所有者 ロールがあることを確認。
次に、共通のプレフィックス AzureSignalRConnectionStringを使用して設定を定義します。 バインド構成の connectionStringSetting プロパティを使用して、プレフィックス名をカスタマイズできます。
このモードでは、設定には次の項目が含まれます。
| プロパティ | 環境変数テンプレート | 説明 | 必須 | 例値 |
|---|---|---|---|---|
| サービス URI | AzureSignalRConnectionString__serviceUri |
サービス エンドポイントの URI。 "サービス URI" のみを構成する場合、拡張機能は DefaultAzureCredential 型を使用してサービスに対する認証を試みます。 | はい | https://mysignalrsevice.service.signalr.net |
| トークン資格情報 | AzureSignalRConnectionString__credential |
接続のためにトークンを取得する方法を定義します。 デプロイされた Azure Function でマネージド ID 認証を使用する場合は、この設定を managedidentity に設定する必要があります。 この値は、ホスティング環境でマネージド ID が使用できる場合にのみ有効です。 |
いいえ | managedidentity |
| クライアント ID | AzureSignalRConnectionString__clientId |
credential が managedidentity に設定されると、このプロパティによって、トークン取得時に使用されるユーザー割り当て ID を指定できます。 このプロパティは、アプリケーションに割り当てられたユーザー割り当て ID に相当するクライアント ID を受け取ります。 リソース ID とクライアント ID の両方を指定することは無効です。 指定されていない場合、システム割り当て ID が使用されます。 このプロパティは、 を設定しないとき、credentialで異なる方法で使用されます。 |
いいえ | 00000000-0000-0000-0000-000000000000 |
| リソース ID | AzureSignalRConnectionString__managedIdentityResourceId |
credential が managedidentity に設定されると、このプロパティによって、トークン取得時に使用されるリソース ID を指定できます。 プロパティは、ユーザー定義マネージド ID のリソース ID に対応するリソース識別子を受け取ります。 リソース ID とクライアント ID の両方を指定することは無効です。 両方とも指定されていない場合は、システム割り当て ID が使用されます。 このプロパティは、 を設定しないとき、credentialで異なる方法で使用されます。 |
いいえ | /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/mygroup/providers/Microsoft.SignalRService/SignalR/mysignalrservice |
注
ローカル、local.settings.json、または Key Vault で ファイルを使用して ID ベースの接続の設定を提供する場合は__を設定名の:に置き換えて、名前が正しく解決されるようにします。
たとえば、AzureSignalRConnectionString:serviceUri のようにします。
複数のエンドポイントの設定
複数のエンドポイントを構成し、エンドポイントごとに ID 設定を指定することもできます。
この場合は、設定の前に Azure__SignalR__Endpoints__{endpointName} を付けます。
{endpointName}は、設定のグループをサービス エンドポイントに関連付けるために割り当てられた任意の名前です。 プレフィックス Azure__SignalR__Endpoints__{endpointName} は、 connectionStringSetting プロパティではカスタマイズできません。
| プロパティ | 環境変数テンプレート | 説明 | 必須 | 例値 |
|---|---|---|---|---|
| サービス URI | Azure__SignalR__Endpoints__{endpointName}__serviceUri |
サービス エンドポイントの URI。 "サービス URI" のみを構成する場合、拡張機能は DefaultAzureCredential 型を使用してサービスに対する認証を試みます。 | はい | https://mysignalrsevice1.service.signalr.net |
| エンドポイントの種類 | Azure__SignalR__Endpoints__{endpointName}__type |
サービス エンドポイントがプライマリかセカンダリかを示します。 指定しない場合の既定値は Primary です。 有効な値は Primary と Secondary です。大文字と小文字は区別されません。 |
いいえ | Secondary |
| トークン資格情報 | Azure__SignalR__Endpoints__{endpointName}__credential |
接続のためにトークンを取得する方法を定義します。 デプロイされた Azure Function でマネージド ID 認証を使用する場合は、この設定を managedidentity に設定する必要があります。 この値は、ホスティング環境でマネージド ID が使用できる場合にのみ有効です。 |
いいえ | managedidentity |
| クライアント ID | Azure__SignalR__Endpoints__{endpointName}__clientId |
credential が managedidentity に設定されると、このプロパティによって、トークン取得時に使用されるユーザー割り当て ID を指定できます。 このプロパティは、アプリケーションに割り当てられたユーザー割り当て ID に相当するクライアント ID を受け取ります。 リソース ID とクライアント ID の両方を指定することは無効です。 指定されていない場合、システム割り当て ID が使用されます。 このプロパティは、 を設定しないとき、credentialで異なる方法で使用されます。 |
いいえ | 00000000-0000-0000-0000-000000000000 |
| リソース ID | Azure__SignalR__Endpoints__{endpointName}__managedIdentityResourceId |
credential が managedidentity に設定されると、このプロパティによって、トークン取得時に使用されるリソース ID を指定できます。 プロパティは、ユーザー定義マネージド ID のリソース ID に対応するリソース識別子を受け取ります。 リソース ID とクライアント ID の両方を指定することは無効です。 両方とも指定されていない場合は、システム割り当て ID が使用されます。 このプロパティは、 を設定しないとき、credentialで異なる方法で使用されます。 |
いいえ | /subscriptions/00000000-0000-0000-0000-00000000000/resourceGroups/myrg/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myusermanagedidentity |
複数のエンドポイントの詳細については、「 Scale SignalR Service with multiple instances (複数のインスタンスを含む SignalR Service のスケーリング)」を参照してください。
最適なセキュリティを確保するために、関数アプリでは、共有シークレット キーを含む接続文字列を使用する代わりに、Azure SignalR サービスに接続するときにマネージド ID を使用する必要があります。 詳細については、「 Microsoft Entra マネージド ID を使用して Azure SignalR Service リソースへの要求を認証するを参照してください。
次のステップ
SignalR Service と Azure Functions を構成して一緒に使用する方法の詳細については、「Azure Functions development and configuration with Azure SignalR Service (Azure SignalR Service を使用した Azure Functions の開発と構成)」を参照してください。