MQTT データフロー エンドポイントを構成する
重要
Azure Arc によって実現されている Azure IoT Operations プレビューは、現在プレビュー段階です。 運用環境ではこのプレビュー ソフトウェアを使わないでください。
Azure IoT Operations の一般公開リリースが提供されたときには、新規インストールをデプロイすることが必要になります。 プレビュー インストールからのアップグレードはできません。
ベータ版、プレビュー版、または一般提供としてまだリリースされていない Azure の機能に適用される法律条項については、「Microsoft Azure プレビューの追加使用条件」を参照してください。
MQTT データフロー エンドポイントは、MQTT の送信元と送信先に使われます。 エンドポイントの設定、トランスポート層セキュリティ (TLS)、認証、その他の設定を構成できます。
前提条件
Azure IoT Operations ローカル MQTT ブローカー
Azure IoT Operations で提供されている組み込みのローカル MQTT ブローカーをデータフローで使用できます。 MQTT ブローカーは、他のシステムからメッセージを受信するソースとして、または他のシステムにメッセージを送信する宛先として使用できます。
既定のエンドポイント
Azure IoT Operations をデプロイすると、"default" という名前の MQTT ブローカー データフロー エンドポイントが既定の設定で作成されます。 このエンドポイントを、データフローの送信元または送信先として使用できます。
重要
既定のエンドポイントは、常にすべてのデータフローでソースまたは宛先として使用される必要があります。 詳細については、「データフローではローカル MQTT ブローカー エンドポイントの使用が必須」を参照してください。
既定のエンドポイントでは、次の設定が使用されます。
- ホスト: 既定の MQTT ブローカー リスナーを使用する
aio-broker:18883
- 認証: 既定の BrokerAuthentication リソースを使用するサービス アカウント トークン (SAT)
- TLS: 有効
- 信頼された CA 証明書: 既定のルート CA からの既定の CA 証明書
azure-iot-operations-aio-ca-trust-bundle
注意事項
既定のエンドポイントは削除しないでください。 既定のエンドポイントを削除した場合は、同じ設定を使用して再作成する必要があります。
既定の MQTT ブローカー エンドポイント設定を表示または編集するには、以下を行います。
操作エクスペリエンスで、[データフロー エンドポイント] を選択します。
既定のエンドポイントを選択して、設定を表示または編集します。
新しいエンドポイントを作成する
カスタム設定を使って、新しいローカル MQTT ブローカー エンドポイントを作成することもできます。 たとえば、異なるポート、認証、または認可の設定を使って、新しい MQTT ブローカー エンドポイントを作成できます。 ただし、新しいエンドポイントを作成する場合でも、常にすべてのデータフローで既定のエンドポイントをソースまたは宛先として使用する必要があります。
操作エクスペリエンスで、[データフロー エンドポイント] を選択します。
[新しいデータフロー エンドポイントの作成] で、[Azure IoT Operations ローカル MQTT]>[新規] を選びます。
エンドポイントに関する次の設定を入力します。
設定 内容 Name データフロー エンドポイントの名前。 Host MQTT ブローカーのホスト名とポート。 <hostname>:<port>
という形式を使用します認証方法 認証に使用する方式。 サービス アカウント トークンまたは X509 証明書を選択する サービス対象ユーザー サービス アカウント トークンの対象ユーザー。 サービス アカウント トークンを使用する場合に必要です。 X509 クライアント証明書 認証に使用する X.509 クライアント証明書。 "X509 証明書" を使う場合に必要です。 X509 クライアント キー X.509 クライアント証明書に対応する秘密キー。 "X509 証明書" を使う場合に必要です。 X509 中間証明書 X.509 クライアント証明書チェーンの中間証明書。 "X509 証明書" を使う場合に必要です。
Azure Event Grid
Azure IoT Operations データフローで動作するフル マネージド MQTT ブローカーが Azure Event Grid で提供されています。 Azure Event Grid MQTT ブローカー エンドポイントを構成するには、認証にマネージド ID を使うことをお勧めします。
Event Grid 名前空間を構成する
まだ行っていない場合は、まず Event Grid 名前空間を作成します。
MQTT を有効にする
Event Grid 名前空間を作成したら、[構成] に移動し、次のことを確認します。
- MQTT を有効にする: チェック ボックスをオンにします。
- 認証名あたりの最大クライアント セッション数: 3 以上に設定します。
最大クライアント セッション オプションは、データフローがスケールアップしても接続できるようにするために重要です。 詳細については、Event Grid MQTT マルチセッションのサポートに関するページを参照してください。
トピック空間を作成する
データフローが Event Grid MQTT ブローカーにメッセージを送受信するには、Event Grid 名前空間に少なくとも 1 つのトピック空間を作成する必要があります。 Event Grid 名前空間にトピック空間を作成するには、[トピック空間]>[新しいトピック空間] を選択します。
すぐに開始してテストするために、トピック テンプレートとしてワイルドカード トピック #
を使用してトピック空間を作成できます。
マネージド ID にアクセス許可を割り当てる
トピック空間が作成されたので、Azure IoT Operations Arc 拡張機能のマネージド ID を Event Grid 名前空間またはトピック空間に割り当てる必要があります。
Azure portal で、Arc に接続された Kubernetes クラスターに移動し、[設定]>[拡張機能] を選択します。 拡張機能の一覧で、Azure IoT Operations 拡張機能の名前を見つけます。 拡張機能の名前をコピーします。
次に、Event Grid 名前空間 >[アクセス制御 (IAM)]>[ロールの割り当ての追加] に移動します。 EventGrid TopicSpaces Publisher
や EventGrid TopicSpaces Subscriber
などの適切なロールを使用して、Azure IoT Operations Arc 拡張機能のマネージド ID を割り当てます。 これにより、名前空間内のすべてのトピック空間のメッセージを送受信するために必要なアクセス許可がマネージド ID に付与されます。
または、トピック空間レベルでロールを割り当てることもできます。 >[アクセス制御 (IAM)]>[ロールの割り当ての追加] に移動します。 EventGrid TopicSpaces Publisher
や EventGrid TopicSpaces Subscriber
などの適切なロールを使用して、Azure IoT Operations Arc 拡張機能のマネージド ID を割り当てます。 これにより、特定のトピック空間のメッセージを送受信するために必要なアクセス許可がマネージド ID に付与されます。
データフロー エンドポイントを作成する
Event Grid 名前空間を構成したら、Event Grid MQTT ブローカーのデータフロー エンドポイントを作成できます。
操作エクスペリエンスで、[データフロー エンドポイント] タブを選択します。
[新しいデータフロー エンドポイントの作成] で、[Azure Event Grid MQTT]>[新規] を選びます。
エンドポイントに関する次の設定を入力します。
設定 内容 Name データフロー エンドポイントの名前。 Host Event Grid MQTT ブローカーのホスト名とポート。 <NAMESPACE>.<REGION>-1.ts.eventgrid.azure.net:8883
という形式を使用します認証方法 認証に使用する方式。 システム割り当てマネージド ID を選択する [適用] を選択してエンドポイントをプロビジョニングします。
エンドポイントが作成されたら、それをデータフローで使って、送信元または送信先としての Event Grid MQTT ブローカーに接続できます。 MQTT トピックは、データフローで構成されます。
Event Grid で X.509 証明書認証を使用する
認証にはマネージド ID を使うことをお勧めします。 Event Grid MQTT ブローカーで X.509 証明書認証を使うこともできます。
Event Grid MQTT ブローカーで X.509 認証を使用する場合は、[Event Grid 名前空間] >[構成] に移動し、次の設定を確認します。
- MQTT を有効にする: チェック ボックスをオンにします。
- 代替クライアント認証名ソースを有効にする: チェック ボックスをオンにします。
- 証明書のサブジェクト名: ドロップダウン リストでこのオプションを選択します。
- 認証名あたりの最大クライアント セッション数: 3 以上に設定します。
代替クライアント認証オプションと最大クライアント セッション数オプションを使用すると、データフローでは、MQTT CONNECT Username
の代わりにクライアント証明書のサブジェクト名を認証に使用できます。 この機能は、データフローが複数のインスタンスを生成して接続を維持できるようにするために重要です。 詳細については、「Event Grid MQTT クライアント証明書認証」および「マルチセッションのサポート」を参照してください。
次に、X.509 証明書の手順に従って、X.509 証明書の設定でエンドポイントを構成します。
Event Grid の共有サブスクリプションの制限
Azure Event Grid MQTT ブローカーでは共有サブスクリプションはサポートされていません。つまり、Event Grid がデータフローのソース (データフローがメッセージをサブスクライブする場所) として使用されている場合、データフロー プロファイルで instanceCount
を 1
より大きく設定することはできません。 この場合、instanceCount
を 1
より大きい値に設定すると、データフローの開始に失敗します。
カスタム MQTT ブローカー
その他の MQTT ブローカーの場合は、必要に応じてエンドポイント、TLS、認証、その他の設定を構成できます。
操作エクスペリエンスで、[データフロー エンドポイント] タブを選択します。
[新しいデータフロー エンドポイントの作成] で、[カスタム MQTT ブローカー]>[新規] を選びます。
エンドポイントに関する次の設定を入力します。
設定 内容 Name データフロー エンドポイントの名前 Host <hostname>.<port>
形式での MQTT ブローカー エンドポイントのホスト名。認証方法 認証に使用する方式。 [システム割り当てマネージド ID]、[ユーザー割り当てマネージド ID]、または [サービス アカウント トークン] を選びます。 サービス対象ユーザー サービス アカウント トークンの対象ユーザー。 サービス アカウント トークンを使う場合に必要です。 クライアント ID ユーザー割り当てマネージド ID のクライアント ID "ユーザー割り当てマネージド ID" を使う場合に必要です。 テナント ID ユーザー割り当てマネージド ID のテナント ID。 "ユーザー割り当てマネージド ID" を使う場合に必要です。 アクセス トークンのシークレット名 SAS トークンを含む Kubernetes シークレットの名前。 "アクセス トークン" を使う場合に必要です。 [適用] を選択してエンドポイントをプロビジョニングします。
MQTT エンドポイントの設定のカスタマイズについて詳しくは、以降のセクションを参照してください。
使用可能な認証方法
MQTT ブローカー データフローのエンドポイントでは、次の認証方法を使用できます。 Azure Key Vault を構成し、ワークロード ID を有効にして、セキュリティ保護された設定を有効にする方法について詳しくは、「Azure IoT Operations プレビューのデプロイでセキュリティで保護された設定を有効にする」をご覧ください。
X.509 証明書
Event Grid などの多くの MQTT ブローカーでは、X.509 認証がサポートされています。 データフローでは、クライアント X.509 証明書を提示して、TLS 通信をネゴシエートすることができます。
Operations Experience のデータフロー エンドポイント設定ページで、[基本] タブを選択し、[認証方法]>[X509 証明書] を選択します。
エンドポイントに関する次の設定を入力します。
設定 | 説明 |
---|---|
X509 クライアント証明書 | 認証に使用する X.509 クライアント証明書。 |
X509 中間証明書 | X.509 クライアント証明書チェーンの中間証明書。 |
X509 クライアント キー | X.509 クライアント証明書に対応する秘密キー。 |
システム割り当てマネージド ID
認証にシステム割り当てマネージド ID を使う場合は、シークレットを作成する必要はありません。 システム割り当てマネージド ID は、MQTT ブローカーでの認証に使われます。
エンドポイントを構成する前に、Azure IoT Operations のマネージド ID に MQTT ブローカーに接続するために必要なアクセス許可があることを確認します。
- Azure portal で、Azure IoT Operations インスタンスに移動し、[概要] を選択します。
- Azure IoT Operations Arc 拡張機能の後一覧表示されている拡張機能の名前をコピーします。 たとえば、azure-iot-operations-xxxx7。
- 拡張機能の名前を使用して、Azure portal でマネージド ID を検索します。 たとえば、azure-iot-operations-xxxx7 を検索します。
- MQTT ブローカーに接続するアクセス許可を付与するロールを Azure IoT Operations Arc 拡張機能のマネージド ID に割り当てます。 たとえば、Azure Event Grid MQTT ブローカーでは、適切なロールを使って、マネージド ID を Event Grid 名前空間またはトピック空間に割り当てます。
- システム割り当てマネージド ID の設定を使ってエンドポイントを構成します。
操作エクスペリエンスのデータフロー エンドポイント設定ページで、[基本] タブを選択し、[認証方法]>[システム割り当てマネージド ID] を選択します。
Event Grid と共に使うとき、ほとんどの場合は、示されているように設定を空のままにできます。 これにより、マネージド ID の対象ユーザーが、Event Grid の一般的な対象ユーザー https://eventgrid.azure.net
に設定されます。 別の対象ユーザーを設定する必要がある場合は、設定で指定できます。
サポートされていません。
ユーザー割り当てマネージド ID
認証にユーザー マネージド ID を使用するには、まず、セキュリティで保護された設定を有効にして Azure IoT Operations をデプロイする必要があります。 詳細については、「Azure IoT Operations プレビューのデプロイでセキュリティで保護された設定を有効にする」を参照してください。
その後で、ユーザー割り当てマネージド ID 認証方法を、マネージド ID のクライアント ID およびテナント ID と共に指定します。
Operations Experience のデータフロー エンドポイント設定ページで、[基本] タブを選択し、[認証方法]>[ユーザー割り当てマネージド ID] を選択します。
ここでは、スコープは省略可能であり、既定値の https://eventgrid.azure.net/.default
はすべての Azure Event Grid 名前空間に対して機能します。 別のスコープを設定する必要がある場合は、Bicep または Kubernetes を介して設定の中で指定できます。
Kubernetes サービス アカウント トークン (SAT)
認証に Kubernetes サービス アカウント トークン (SAT) を使う場合は、シークレットを作成する必要はありません。 SAT は、オーディエンスを照合するという方法での MQTT ブローカーでの認証に使われます。
操作エクスペリエンスのデータフロー エンドポイント設定ページで、[基本] タブを選択し、[認証方法]>[サービス アカウント トークン] を選択します。
サービスの対象ユーザーを入力します。
匿名
匿名認証を使うには、認証方法を Anonymous
に設定します。
Operations Experience ではまだサポートされていません。 既知の問題を参照してください。
詳細設定
TLS、信頼された証明機関証明書、MQTT メッセージの設定、CloudEvents など、MQTT ブローカー データフロー エンドポイントの詳細設定を設定できます。 これらの設定は、データフロー エンドポイントのカスタム リソース内のデータフロー エンドポイントの [詳細設定] ポータル タブで設定できます。
Operations Experience で、データフロー エンドポイントの [詳細設定] タブを選択します。
TLS の設定
TLS モード
Kafka エンドポイントの TLS を有効または無効にするには、TLS 設定の mode
設定を更新します。
Operations Experience のデータフロー エンドポイント設定ページで、[詳細設定] タブを選択し、[TLS モードが有効] の横にあるチェックボックス使用します。
TLS モードは、Enabled
または Disabled
に設定できます。 モードが Enabled
に設定されている場合、データフローは Kafka ブローカーに対して安全な接続を使用します。 モードが Disabled
に設定されている場合、データフローは Kafka ブローカーに対して安全ではない接続を使用します。
信頼された証明機関証明書
MQTT ブローカーへのセキュリティで保護された接続を確立するために、MQTT エンドポイントの信頼された CA 証明書を構成します。 この設定は、MQTT ブローカーが自己署名証明書または既定では信頼されていないカスタム証明機関によって署名された証明書を使用する場合に重要です。
Operations Experience のデータフロー エンドポイント設定ページで、[詳細設定] タブを選択し、[信頼された CA 証明書構成マップ] フィールドを使用して、信頼された CA 証明書を含む ConfigMap を指定します。
この ConfigMap には、PEM 形式の証明機関証明書が含まれている必要があります。 この ConfigMap は、MQTT データフロー リソースと同じ名前空間に存在する必要があります。 次に例を示します。
kubectl create configmap client-ca-configmap --from-file root_ca.crt -n azure-iot-operations
ヒント
Event Grid MQTT ブローカーに接続するときに CA 証明書は必要ありません。Event Hubs サービスでは、既定で信頼されているパブリック CA によって署名された証明書が使用されるからです。
クライアント ID プレフィックス
MQTT クライアントのクライアント ID プレフィックスを設定できます。 プレフィックスの後にデータフロー インスタンス名を追加してクライアント ID が生成されます。
注意事項
ほとんどのアプリケーションでは、クライアント ID プレフィックスを変更しないでください。 最初の IoT 操作のデプロイ後にこれを変更しないでください。 デプロイ後にクライアント ID プレフィックスを変更すると、データが失われる可能性があります。
操作エクスペリエンスのデータフロー エンドポイント設定ページで、[詳細設定] タブを選択し、[クライアント ID プレフィックス] フィールドを使用してプレフィクスを指定します。
QoS
MQTT メッセージのサービス品質 (QoS) レベルを 1 または 0 に設定できます。 既定値は 1 です。
操作エクスペリエンスのデータフロー エンドポイント設定ページで、[詳細設定] タブを選択し、[サービスの品質 (QoS)] フィールドを使用して QoS レベルを指定します。
保持する
retain
の設定は、データフローが MQTT メッセージで保持フラグを維持する必要があるかどうかを指定するために使います。 既定値は、Keep
です。
このフィールドを Keep
に設定することは、リモート ブローカーでもローカル ブローカーと同じメッセージを確実に保持するのに役立ちます。このことは、統合名前空間 (UNS) のシナリオで重要になる可能性があります。
Never
に設定すると、保持フラグは MQTT メッセージから削除されます。 これは、リモート ブローカーにメッセージを保持させたくない場合や、リモート ブローカーが保持をサポートしていない場合に役立ちます。
保持設定を構成するには、以下を行います。
操作エクスペリエンスのデータフロー エンドポイント設定ページで、[詳細設定] タブを選択し、[保持] フィールドを使用して保持設定を指定します。
"保持" 設定は、データフローが MQTT エンドポイントを送信元と送信先の両方として使う場合にのみ有効です。 たとえば、MQTT ブリッジのシナリオの場合です。
重要
Azure Event Grid MQTT ブローカーは、現在は保持フラグをサポートしていません。 つまり、Event Grid MQTT ブローカー エンドポイントで保持フラグを Keep
に設定した場合、それが宛先として使われると、メッセージは拒否されます。 Event Grid MQTT ブローカーを宛先として使うときは、これを避けるため、保持フラグを Never
に設定します。
セッションの有効期間
データフロー MQTT クライアントのセッションの有効期間を設定できます。 セッションの有効期間は、データフロー クライアントが切断された場合に MQTT セッションが維持される最大時間です。 既定値は 3600 秒です。 セッションの有効期限間隔を構成するには、以下を行います。
操作エクスペリエンスのデータフロー エンドポイント設定ページで、[詳細設定] タブを選択し、[セッションの有効期間] フィールドを使用してセッションの有効期間間隔を指定します。
MQTT または WebSocket プロトコル
既定では、WebSocket は有効にされません。 WebSocket 経由で MQTT を使うには、protocol
フィールドを WebSockets
に設定します。
操作エクスペリエンスのデータフロー エンドポイント設定ページで、[詳細設定] タブを選択し、[プロトコル] フィールドを使用してプロトコルを指定します。
最大配信中メッセージ数
データフロー MQTT クライアントが保持できる配信中メッセージの最大数を設定できます。 既定値は、100 です。
操作エクスペリエンスのデータフロー エンドポイント設定ページで、[詳細設定] タブを選択し、[配信中のメッセージの最大数] フィールドを使用して配信中のメッセージの最大数を指定します。
MQTT エンドポイントが送信元として使われているときのサブスクライブの場合、これは受信の最大値です。 MQTT エンドポイントが送信先として使われているときのパブリッシュの場合、これは受信確認を待機する前に送信するメッセージの最大数です。
キープ アライブ
データフロー MQTT クライアントのキープ アライブ間隔を設定できます。 キープ アライブ間隔は、PINGREQ メッセージがブローカーに送信されるまで、データフロー クライアントがアイドル状態になっていられる最大時間です。 既定値は 60 秒です。
操作エクスペリエンスのデータフロー エンドポイント設定ページで、[詳細設定] タブを選択し、[キープ アライブ] フィールドを使用してキープ アライブ間隔を指定します。
CloudEvents
CloudEvents は、イベント データを一般的な方法で記述する方法です。 CloudEvents の設定は、CloudEvents 形式でメッセージを送受信するために使われます。 CloudEvents は、同じ、または異なるクラウド プロバイダー内にある異なるサービスが相互に通信する必要があるイベント駆動型アーキテクチャに使用できます。
CloudEventAttributes
オプションは、Propagate
または CreateOrRemap
です。 CloudEvents の設定を構成するには、以下を行います。
操作エクスペリエンスのデータフロー エンドポイント設定ページで、[詳細設定] タブを選択し、クラウド イベント属性] フィールドを使用して CloudEvents 設定を指定します。
以降のセクションでは、CloudEvents設定の詳細について説明します。
Propagate の設定
CloudEvent プロパティは、必要なプロパティを含むメッセージではパススルーされます。 メッセージに必要なプロパティが含まれていない場合、メッセージはそのままパススルーされます。
名前 | 必須 | サンプルの値 | 出力値 |
---|---|---|---|
specversion |
はい | 1.0 |
そのままパススルーされます |
type |
はい | ms.aio.telemetry |
そのままパススルーされます |
source |
はい | aio://mycluster/myoven |
そのままパススルーされます |
id |
はい | A234-1234-1234 |
そのままパススルーされます |
subject |
いいえ | aio/myoven/telemetry/temperature |
そのままパススルーされます |
time |
いいえ | 2018-04-05T17:31:00Z |
そのままパススルーされます。 タイムスタンプは更新されません。 |
datacontenttype |
いいえ | application/json |
オプションの変換ステージの後で、出力データのコンテンツ タイプに変更されます。 |
dataschema |
いいえ | sr://fabrikam-schemas/123123123234234234234234#1.0.0 |
変換構成に出力データ変換スキーマが指定されている場合、dataschema は出力スキーマに変更されます。 |
CreateOrRemap の設定
CloudEvent プロパティは、必要なプロパティを含むメッセージではパススルーされます。 メッセージに必要なプロパティが含まれていない場合は、プロパティが生成されます。
名前 | 必須 | ない場合に生成される値 |
---|---|---|
specversion |
はい | 1.0 |
type |
イエス | ms.aio-dataflow.telemetry |
source |
イエス | aio://<target-name> |
id |
はい | ターゲット クライアントで生成された UUID |
subject |
いいえ | メッセージが送信される出力トピック |
time |
いいえ | ターゲット クライアントで RFC 3339 として生成 |
datacontenttype |
いいえ | オプションの変換ステージの後で、出力データのコンテンツ タイプに変更 |
dataschema |
いいえ | スキーマ レジストリで定義されているスキーマ |
次のステップ
データフローの詳細については、データフローの作成に関するページを参照してください。