次の方法で共有


Azure Digital Twins でイベント ルートとフィルターを作成する

この記事では、Azure portalAzure CLI az dt route コマンドEvent Routes データ プレーン API.NET (C#) SDK を使用して、"イベント ルート" を作成するプロセスについて説明します。

Azure Digital Twins からダウンストリーム サービスまたは接続されたコンピューティング リソースにイベント通知をルーティングするには、エンドポイントを作成してから、それらのエンドポイントにデータを送信するイベント ルートを作成する 2 つの手順があります。 この記事では、どのイベントがどの Azure Digital Twin エンドポイントに配信されるかを制御するルートの設定という 2 つ目の手順について説明します。 この記事を進めるには、エンドポイントを既に作成している必要があります。

前提条件

  • 無料で設定できる Azure アカウントが必要です

  • Azure サブスクリプションに Azure Digital Twins インスタンスが必要です。 まだインスタンスをお持ちでない場合は、「インスタンスと認証を設定する」の手順を使用して作成してください。 セットアップ中、次の値をメモしておいてください。後でこの記事の中で使用します。

    • インスタンス名
    • リソース グループ

    これらの詳細については、インスタンスの設定後に、Azure portal で確認できます。

    Azure portal での Azure Digital Twins インスタンスの [概要] ページのスクリーンショット。名前とリソース グループが強調表示されています。

  • エンドポイントの作成に関するページの手順に従ってエンドポイントを作成します。 この記事では、そのエンドポイントにデータを送信するルートを作成します。

次に、このガイドに従って Azure CLI を使用する場合は、次の手順を実行します。

Azure CLI の環境を準備する

  • Azure Cloud Shell で Bash 環境を使用します。 詳細については、「Azure Cloud Shell の概要」を参照してください。

  • CLI リファレンス コマンドをローカルで実行する場合、Azure CLI をインストールします。 Windows または macOS で実行している場合は、Docker コンテナーで Azure CLI を実行することを検討してください。 詳細については、「Docker コンテナーで Azure CLI を実行する方法」を参照してください。

    • ローカル インストールを使用する場合は、az login コマンドを使用して Azure CLI にサインインします。 認証プロセスを完了するには、ターミナルに表示される手順に従います。 その他のサインイン オプションについては、「 Azure CLI を使用した Azure への認証」を参照してください。

    • 初回使用時にインストールを求められたら、Azure CLI 拡張機能をインストールします。 拡張機能の詳細については、「Azure CLI で拡張機能を使用および管理する」を参照してください。

    • az version を実行し、インストールされているバージョンおよび依存ライブラリを検索します。 最新バージョンにアップグレードするには、az upgrade を実行します。

イベント ルートを作成する

エンドポイントを作成した後、実際にデータをエンドポイントに送信するには、"イベント ルート" を定義する必要があります。 これらのルートにより、開発者はシステム全体およびダウンストリーム サービスへのイベント フローを結び付けることができます。 1 つのルートで、複数の通知とイベントの種類を選択できるようにします。 イベント ルートの詳細については、「 Azure Digital Twins イベントのルーティング」を参照してください。

ルートの作成に進む前に、「 前提条件 」の説明に従って少なくとも 1 つのエンドポイントを作成していることを確認してください。

エンドポイントを最近デプロイしただけの場合は、新しいイベント ルートに使用する前に、エンドポイントのデプロイが完了したことを検証します。 エンドポイントの準備ができていないためにルートのデプロイが失敗する場合は、数分待ってからやり直してください。

このフローをスクリプト化する場合は、エンドポイント サービスのデプロイが完了するまで 2 ~ 3 分待ってから、ルートのセットアップに進む前にデプロイを考慮することが必要になる場合があります。

ルート定義にはこれらの要素を含めることができます。

  • 使用するルート名
  • 使用するエンドポイントの名前
  • エンドポイントに送信されるイベントを定義するフィルター
    • イベントが送信されないようにルートを無効にするには、false のフィルター値を使用します
    • 特定のフィルターを適用しないルートを有効にするには、true のフィルター値を使用します
    • その他の種類のフィルターの詳細については、「 フィルター イベント 」セクションを参照してください。

ルート名がない場合、メッセージは Azure Digital Twins の外部にルーティングされません。 ルート名があり、フィルターが true の場合は、すべてのメッセージがエンドポイントにルーティングされます。 ルート名があり、別のフィルターが追加された場合、メッセージはフィルターに基づいてフィルター処理されます。

イベント ルートは、 Azure portalEvent Routes データ プレーン API、または az dt route CLI コマンドを使用して作成できます。 このセクションの残りの部分では、作成プロセスについて説明します。

イベント ルートを作成するには、 Azure portal で Azure Digital Twins インスタンスの詳細ページに移動します。 インスタンスを見つけるには、ポータルの検索バーにその名前を入力します。

インスタンスのメニューから、[イベント ルート] を選択します。 次に、[イベント ルート] ページで、[+ イベント ルートの作成] を選択します。

開いた [イベント ルートの作成] ページで、少なくとも次を選択します。

  • [名前] フィールドでルートの名前
  • ルートの作成に使用する [エンドポイント]

有効にするルートについて、少なくとも true必要もあります。 (既定値の false のままにするとルートが作成されますが、イベントは送信されません)。そのためには、詳細エディターのスイッチを切り替えて有効にし、[true] ボックスにを書き込みます。

Azure portal でインスタンスのイベント ルートを作成するスクリーンショット。

完了したら、[保存] ボタンを選択して、イベント ルートを作成します。

イベントのフィルター処理

前述のように、ルートにはフィルター フィールドがあります。 ルートのフィルター値が falseされている場合、エンドポイントにイベントは送信されません。

trueの最小フィルターを有効にすると、エンドポイントは Azure Digital Twins からさまざまな種類のイベントを受信します。

  • Azure Digital Twins サービス API を使用して、デジタル ツインで起動されたテレメトリ
  • Azure Digital Twins インスタンス内のいずれかのツインでプロパティが変更されたときに発生する、ツインプロパティ変更の通知
  • デジタル ツインまたはリレーションシップが作成または削除されたときに発生するライフサイクル イベント

より具体的なフィルターを定義することで、送信されるイベントの種類を制限できます。

フィルターは大文字と小文字を区別し、ペイロードの大文字と小文字と一致する必要があります。 テレメトリ フィルターの場合、フィルター内の大文字と小文字は、デバイスによって送信されるテレメトリの大文字と小文字と一致している必要があります。

イベント ルートの作成中にイベント フィルターを追加するには、[イベント ルートを作成する] ページの [イベント ルート フィルターの追加] セクションを使用します。

いくつかの基本的な共通フィルター オプションから選択することも、高度なフィルター オプションを使用して独自のカスタム フィルターを作成することもできます。

基本的なフィルターを使用する

基本的なフィルターを使用するには、[イベントの種類] オプションを展開し、エンドポイントに送信する必要があるイベントに対応するチェックボックスをオンにします。

Azure portal の基本フィルターでイベント ルートを作成するスクリーンショット。イベントのチェックボックスが強調表示されています。

これにより、選択したフィルターのテキストがフィルター テキスト ボックスに自動的に入力されます。

Azure portal の基本フィルターでイベント ルートを作成するスクリーンショット。イベントの選択後の自動設定されたフィルター テキストが強調表示されています。

高度なフィルターを使用する

[高度なフィルター] オプションを使用して、独自のカスタム フィルターを作成することもできます。

高度なフィルター オプションを使用してイベント ルートを作成するには、 [詳細エディター] のスイッチを切り替えて、有効にします。 それにより、 [フィルター] ボックスに独自のイベント フィルターを記述できます。

Azure portal の高度なフィルターを使用してイベント ルートを作成するスクリーンショット。

サポートされているルート フィルター

サポートされているルート フィルターを次に示します。

フィルター名 説明 テキスト スキーマをフィルタリング サポートされている値
真 / 偽 フィルター処理なしでルートを作成したり、ルートを無効にしてイベントが送信されないようにしたりすることができます <true/false> true = ルートはフィルター処理なしで有効になります。
false = ルートは無効になります。
タイプ デジタル ツイン インスタンスを通過するイベントの種類 type = '<event-type>' 指定できるイベントの種類の値は次のとおりです。
Microsoft.DigitalTwins.Twin.Create
Microsoft.DigitalTwins.Twin.Delete
Microsoft.DigitalTwins.Twin.Update
Microsoft.DigitalTwins.Relationship.Create
Microsoft.DigitalTwins.Relationship.Update
Microsoft.DigitalTwins.Relationship.Delete
microsoft.iot.telemetry
ソース Azure Digital Twins インスタンスの名前 source = '<host-name>' 指定できるホスト名の値は次のとおりです。

通知の場合: <your-Digital-Twins-instance>.api.<your-region>.digitaltwins.azure.net

テレメトリの場合: <your-Digital-Twins-instance>.api.<your-region>.digitaltwins.azure.net/<twin-ID>
サブジェクト イベント ソースのコンテキストでのイベントの説明 subject = '<subject>' 指定できるサブジェクトの値は次のとおりです。

通知の場合: サブジェクトは <twin-ID>
または、対象を URI 形式で示し、複数の部分または ID で一意に識別する形式です。
<twin-ID>/relationships/<relationship-ID>

テレメトリの場合: ツイン コンポーネントからテレメトリが生成された場合、サブジェクトはコンポーネント パス (例: comp1.comp2) です。 コンポーネントからテレメトリが生成されていない場合、サブジェクト フィールドは空になります。
データ スキーマ DTDL モデル ID dataschema = '<model-dtmi-ID>' テレメトリの場合: データ スキーマは、テレメトリを生成するツインまたはコンポーネントのモデル ID です。 たとえば、dtmi:example:com:floor4;2 のように指定します。

通知の場合 (作成/削除): データ スキーマには、$body.$metadata.$model の通知本文でアクセスできます。

通知の場合 (更新): データ スキーマには、$body.modelId の通知本文でアクセスできます
コンテンツ タイプ データ値の内容の種類 datacontenttype = '<content-type>' コンテンツ タイプはapplication/json です。
仕様バージョン 使用しているイベント スキーマのバージョン specversion = '<version>' バージョンは 1.0 である必要があります。 この値は、CloudEvents スキーマ バージョン 1.0 を示しています
通知本文 通知の data フィールドの任意のプロパティを参照します $body.<property> 通知の例については、「イベント通知」をご覧ください。 data フィールドの任意のプロパティは、$body を使用して参照できます

Azure Digital Twins では現在、配列内のフィールドに基づくイベントのフィルタリングはサポートされていません。 この制限には、patch セクション内のプロパティのフィルター処理が含まれます。

次のデータ型は、前のデータへの参照によって返される値としてサポートされています。

データの種類
ストリング STARTS_WITH($body.$metadata.$model, 'dtmi:example:com:floor')
CONTAINS(subject, '<twin-ID>')
整数 $body.errorCode > 200
ダブル $body.temperature <= 5.5
ブール $body.poweredOn = true
無効 $body.prop != null

ルート フィルターを定義するときは、次の演算子がサポートされます。

ファミリ オペレーター
論理 と、または、( ) (type != 'microsoft.iot.telemetry' OR datacontenttype = 'application/json') OR (specversion != '1.0')
比較 <、<=、>、>=、=、!= $body.temperature <= 5.5

ルート フィルターを定義するときは、次の関数がサポートされます。

関数 説明
STARTS_WITH(X,Y) x が文字列 y で始まっている場合、true を返します。 STARTS_WITH($body.$metadata.$model, 'dtmi:example:com:floor')
ENDS_WITH(X,Y) x が文字列 y で終わっている場合、true を返します。 ENDS_WITH($body.$metadata.$model, 'floor;1')
次を含む(x,y) x に文字列 y が含まれる場合、true を返します。 CONTAINS(subject, '<twin-ID>')

フィルターを実装または更新すると、変更がデータ パイプラインに反映されるまでに数分かかる場合があります。

イベント ルートの監視

カウント、待ち時間、失敗率などのルーティング メトリックは、Azure portal で確認できます。

Azure Monitor を使用したメトリックの表示と管理の詳細については、Azure Monitor メトリック ス エクスプローラーを使用したメトリックの分析に関するページを参照してください。 Azure Digital Twins で使用できるルーティング メトリックの完全な一覧については、「 ルーティング メトリック」を参照してください。

次のステップ

受信できるさまざまな種類のイベント メッセージについてご確認ください。