Azure Event Grid の MQTT ブローカー機能のトピック空間
トピック空間は、一連のトピック テンプレートを介して複数のトピックを表します。 トピック テンプレートは MQTT フィルターの拡張機能であり、変数と MQTT ワイルドカードをサポートします。 各トピック・スペースは、同じクライアント・セットが通信するために使用する必要がある MQTT トピックを表します。
トピック空間は、個々のトピックのアクセスを管理するのではなく、トピック グループへのパブリッシュまたはサブスクライブのアクセスをまとめて許可できるようにすることで、アクセスの制御の管理を簡素化するために使用されます。 MQTT トピックに対して発行またはサブスクライブするには、次を実行する必要があります。
- MQTT 経由で通信する必要があるクライアントごとにクライアント リソースを作成します。
- 同じ MQTT トピックで発行またはサブスクライブするためのアクセスが必要なクライアントを含むクライアント グループを作成します。
- 目的のトピック/トピック フィルターを表すトピック テンプレートを含むトピック空間を作成します。
- クライアント グループにトピック空間への発行またはサブスクライブへのアクセスを付与するアクセス許可バインドを作成します。
MQTT トピック フィルター:
MQTT トピック フィルターは、1 つ以上のセグメントのワイルドカードを含めることができる MQTT トピックであり、複数の MQTT トピックと一致させることができます。 1 つのトピック フィルターを複数のトピックと一致させることができるため、サブスクリプション要求を簡略化するために使用されます。
MQTT ブローカーでは、MQTT 仕様で定義されている次のすべての MQTT ワイルドカードがサポートされます。
- +: 1 つのセグメントに一致します。
- たとえば、トピック フィルター "machines/+/alert" は次のトピックと一致します。
- machines/temp/alert
- machines/humidity/alert
- たとえば、トピック フィルター "machines/+/alert" は次のトピックと一致します。
- #: トピックの末尾にある 0 個以上のセグメントに一致します。
- たとえば、トピック フィルター "machines/#" は次のトピックと一致します。
- machines
- machines/temp
- machines/humidity
- machines/temp/alert など。
- たとえば、トピック フィルター "machines/#" は次のトピックと一致します。
ワイルドカードの詳細については、MQTT のトピック ワイルドカードの仕様に関するページを参照してください。
トピック テンプレート
トピック テンプレートは MQTT フィルターの拡張機能であり、変数と MQTT ワイルドカードをサポートします。 トピック空間の構成では、その独自のトピックに対するクライアント グループ内の各クライアントの発行またはサブスクライブの認可を制御することで、詳細なアクセスの制御も実現します。 トピック テンプレートで詳細なアクセスの制御を実現する方法について確認してください。
トピック空間の構成:
トピック空間は、最大 10 個のトピック テンプレートをグループ化できます。 トピック テンプレートでは、MQTT のワイルドカード (+ および #) と次の変数がサポートされています。
- ${client.authenticationName}: この変数はクライアントの認証名を表します。 クライアント認証名の詳細については、こちらを参照してください。
- ${client.attributes.x}: この変数は、クライアントの作成/更新中にクライアントに割り当てられた属性を表します。たとえば、"x" は属性キーの正確な文字列と等しくなります。 たとえば、クライアントに属性がある場合、トピック テンプレート "area/${client.attributes.area}/telemetry" を使用すると、クライアント属性> "area:section1" を持つクライアントのみが MQTT トピック "area/section1/telemetry" に発行できます。 クライアント属性の詳細を確認してください。
注:
$ で始まるトピックは、内部使用のために予約されています。
変数は、セグメントの一部またはセグメント全体を表すことができますが、複数のセグメントを対象にすることはできません。 たとえば、トピック テンプレートに "machines/${client.authenticationName|.factory1}/temp" を含めることができ、これは "machines/machine1.factory1/temp"、"machines/machine2.factory1/temp" などのトピックに一致します。
トピック テンプレートでは特殊文字 $ と | が使用されます。これらは、使用するシェルに基づいて異なる方法でエスケープする必要があります。 PowerShell では、$ は vehicles/${dollar}telemetry/# でエスケープできます。 PowerShell を使用している場合は、次の例に示すように、これらの特殊文字をエスケープできます。
"vehicles/${client.authenticationName|dollar}/#"
vehicles/${client.authenticationName"|"dollar}/#
Azure portal の構成
トピック空間を作成するには、次のステップを実行します。
- Azure portal でご使用の名前空間に移動します。
- [トピック空間] で、[+ トピック空間] を選択します。
- トピック空間に名前を割り当てます。
注意
- トピック空間の名前は 3 から 50 文字の長さにすることができます。
- トピック空間名には、英数字、ハイフン (-) を含めることができ、スペースは不可です。
- [+ トピック テンプレートの追加] を選択して、少なくとも 1 つのトピック テンプレートを追加します。
- [作成] を選択します。
Azure CLI の構成:
トピック空間を作成するには、次のコマンドを使用します。
az eventgrid namespace topic-space create -g myRG --namespace-name myNS -n myTopicSpace --topic-templates ['segment1/+/segment3/${client.authenticationName}', "segment1/${client.attributes.attribute1}/segment3/#"]
Note
トピック空間の構成の更新が反映されるまでに数分かかる場合があります。
次のステップ:
認可と認証の詳細を確認する: