チュートリアル: Azure IoT Hub 経由でデバイス メッセージを受信する
MedTech サービスは、Azure IoT Hub の IoT ハブを介して、作成および管理するデバイスからのメッセージを受信できます。 このチュートリアルでは、Azure Resource Manager テンプレート (ARM テンプレート) と [Azure へのデプロイ] ボタンを使って MedTech サービスをデプロイします。 また、このテンプレートを使うと、IoT ハブをデプロイしてデバイスの作成と管理を行い、デバイス メッセージをイベント ハブにメッセージ ルーティングし、MedTech サービスが読み取って処理できるようにすることができます。 デバイス データの処理後、FHIR® リソースは FHIR サービスに保持されます。これはテンプレートにも含まれています。
ヒント
MedTech サービスがデバイス データを変換して FHIR リソースとして FHIR サービスに保持する方法については、「MedTech サービス デバイスのデータ処理ステージの概要」を参照してください。
このチュートリアルで学習する内容は次のとおりです:
- Azure portal で ARM テンプレートを開きます。
- デプロイ用のテンプレートを構成します。
- デバイスを作成します。
- テスト メッセージを送信します。
- テスト メッセージのメトリックを確認します。
ヒント
ARM テンプレートの詳細については、「ARM テンプレートとは」を参照してください。
前提条件
デプロイを開始してチュートリアルを完了するには、次の前提条件が必要です。
アクティブな Azure サブスクリプション アカウント。 Azure サブスクリプションをお持ちでない場合は、サブスクリプションに関する判断ガイドのページを参照してください。
Azure サブスクリプションの所有者または共同作成者とユーザー アクセス管理者のロールの割り当て。 詳細については、「Azure ロールベースのアクセス制御 (Azure RBAC) とは」
Azure サブスクリプションに登録されている Microsoft.HealthcareApis、Microsoft.EventHub、Microsoft.Devices リソース プロバイダー。 詳細については、「Azure リソース プロバイダーと種類」を参照してください。
Visual Studio Code がローカルにインストールされていること。
Visual Studio Code にインストールされている Azure IoT Tools。 Azure IoT Tools は、IoT ハブへの接続、デバイスの作成、メッセージの送信が簡単になる拡張機能のコレクションです。 このチュートリアルでは、Visual Studio Code で Azure IoT Hub 拡張機能を使って、デプロイされている IoT ハブに接続し、デバイスを作成し、デバイスから IoT ハブにテスト メッセージを送信します。
これらの前提条件を満たすと、[Azure へのデプロイ] ボタンを使って ARM テンプレートを構成する準備は完了です。
ARM テンプレートを確認する
このチュートリアルでリソースのデプロイに使う ARM テンプレートは、GitHub 上の azuredeploy.json ファイルを使って、Azure Quickstart Templates から入手できます。
[Azure へのデプロイ] ボタンを使う
Azure portal でデプロイを開始するには、[Azure へのデプロイ] ボタンを選びます。
展開を構成する
Azure portal の Azure Quickstart Template の [基本] タブで、デプロイに関する次の情報を選ぶか入力します。
サブスクリプション: デプロイに使う Azure サブスクリプション。
リソース グループ: 既存のリソース グループ。または、新しいリソース グループを作成できます。
リージョン - デプロイに使われるリソース グループの Azure リージョン。 [リージョン] には、リソース グループのリージョンを使って自動入力されます。
ベース名 - デプロイされる Azure リソースとサービスの名前に追加される値。 このチュートリアルの例では、azuredocsdemo というベース名を使っています。 独自のベース名値を選択できます。
場所: Azure Health Data Services でサポートされている Azure リージョン (値は、リソース グループが存在するリージョンと同じにするか、別にすることができます)。 Health Data Services を使用できる Azure リージョンの一覧については、「リージョン別の利用可能な製品」を参照してください。
Fhir Contributor Principal Id (Fhir 共同作成者プリンシパル ID) (省略可能): FHIR サービスの読み取り/書き込みアクセス許可を提供する Microsoft Entra ユーザー オブジェクト ID。
このアカウントを使って、FHIR サービスへのアクセスを許可し、このチュートリアルで生成される FHIR 観測記録を表示できます。 FHIR サービスのメッセージにアクセスできるように、独自の Microsoft Entra ユーザー オブジェクト ID を使うことをお勧めします。 [Fhir 共同作成者プリンシパル ID] (Fhir 共同作成者プリンシパル ID) オプションを使わない場合は、テキスト ボックスをクリアします。
Microsoft Entra ユーザー オブジェクト ID を取得する方法については、「ユーザー オブジェクト ID を検索する」を参照してください。 このチュートリアルで使うユーザー オブジェクト ID は一例にすぎません。 このオプションを使う場合は、自分のユーザー オブジェクト ID、または FHIR サービスへのアクセスを許可する別のユーザーのオブジェクト ID を使います。
デバイス マッピング: このチュートリアルでは既定値のままにします。
Destination mapping (変換先マッピング): このチュートリアルでは既定値のままにします。
構成を検証するには、[確認および作成] を選びます。
[確認および作成] でテンプレート検証の状態を確認します。 検証が成功した場合、テンプレートには "検証に成功しました" と表示されます。 検証に失敗した場合は、エラー メッセージに示されている問題を修正してから、[確認および作成] をもう一度選びます。
検証に成功したら、[作成] を選んでデプロイを開始します。
数分後、デプロイが完了したことを示すメッセージが Azure portal に表示されます。
重要
複数のサービスからイベント ハブへのアクセスを許可する場合は、各サービスに独自のイベント ハブ コンシューマー グループが必要です。
コンシューマー グループを使うと、複数のコンシューマー アプリケーションがイベント ストリームの個別のビューを保有し、独自のペースで独自のオフセットを指定してストリームを別々に読み取ることができます。 詳細については、「コンシューマー グループ」を参照してください。
例 :
同じイベント ハブにアクセスする 2 つの MedTech サービス。
同じイベント ハブにアクセスする MedTech サービスとストレージ ライター アプリケーション。
デプロイされたリソースとアクセス許可を確認する
デプロイが完了すると、次のリソースとアクセス ロールが作成されます。
Event Hubs の名前空間とイベント ハブ。 このデプロイでは、イベント ハブの名前は devicedata です。
イベント ハブ コンシューマー グループ。 このデプロイでは、コンシューマー グループの名前は $Default です。
Azure Event Hubs のデータ送信者ロール。 このデプロイでは、送信者ロールの名前は devicedatasender です。Shared Access Signature (SAS) を使ってイベント ハブへのアクセスを提供するために使用できます。 SAS を使ったアクセスの認可の詳細については、「Shared Access Signature を使用する Event Hubs リソースへのアクセスの承認」を参照してください。 Azure Event Hubs のデータ送信者ロールは、このチュートリアルでは使いません。
デバイス メッセージをイベント ハブにルーティングするように構成されたメッセージ ルーティングを持つ IoT ハブ。
ユーザー割り当てマネージド ID。IoT ハブからイベント ハブへの送信アクセスを提供します。 このマネージド ID は、イベント ハブの [Access control section (IAM)] (アクセス制御セクション (IAM)) で Azure Event Hubs のデータ送信者ロールを持ちます。
Health Data Services ワークスペース。
Health Data Services FHIR サービス。
システム割り当てマネージド ID が有効であり、次のアクセス ロールが付与されている Health Data Services MedTech サービス。
イベント ハブの場合、Azure Event Hubs のデータ受信者アクセス ロールは、イベント ハブの [Access control section (IAM)] (アクセス制御セクション (IAM)) で割り当てられます。
FHIR サービスの場合、FHIR データ ライター アクセス ロールは、FHIR サービスの [Access control section (IAM)] (アクセス制御セクション (IAM)) で割り当てられます。
適合する有効な MedTech サービスのデバイスと FHIR 変換先マッピング。 [Resolution type] (解決の種類) は [Create] (作成) に設定されています。
重要
このチュートリアルでは、ARM テンプレートを使って [Create] (作成) モードで動作するように MedTech サービスを構成します。 FHIR サービスにデータを送信する各デバイスに、患者リソースとデバイス リソースが作成されます。
[Create] (作成) と [Lookup] (検索) という MedTech サービスの解決の種類については、「[宛先] タブを構成する」を参照してください。
デバイスを作成してテスト メッセージを送信する
リソースが正常にデプロイされたら、次に IoT ハブに接続してデバイスを作成し、IoT ハブにテスト メッセージを送信します。 これらの手順を完了すると、MedTech サービスで次のことができるようになります。
- IoT ハブによってイベント ハブからルーティングされたテスト メッセージを読み取ります。
- テスト メッセージを 5 つの FHIR 観測記録に変換します。
- FHIR 観測記録を FHIR サービスに保持します。
Azure IoT Hub 拡張機能をインストールした Visual Studio Code を使って、次の手順を完了します。
Azure IoT Tools をインストールした Visual Studio Code を開きます。
エクスプローラーで、Azure IoT Hub の [...] を選び、[IoT ハブの選択] を選びます。
IoT ハブがプロビジョニングされた Azure サブスクリプションを選びます。
IoT ハブを選択します。 IoT ハブの名前は、リソースのプロビジョニング時に指定した "ベース名" の前に ih- を付けたものです。 ハブ名の例は ih-azuredocsdemo です。
エクスプローラーで、Azure IoT Hub の [...] を選び、[デバイスの作成] を選びます。 デバイス名の例は iot-001 です。
デバイスから IoT ハブにテスト メッセージを送信するには、デバイスを右クリックし、[IoT Hub に D2C メッセージを送信します] を選びます。
Note
この device-to-cloud (D2C) の例では、"クラウド" とは、デバイス メッセージを受信する Azure IoT ハブ内の IoT ハブです。 Azure IoT Hub は双方向通信をサポートしています。 cloud-to-device (C2D) シナリオを設定するには、[Send C2D Message to Device Cloud] (デバイス クラウドに C2D メッセージを送信する) を選びます。
[Send D2C Messages] (D2C メッセージの送信) で、次の値を選ぶか入力します。
Device(s) to send messages from (メッセージを送信するデバイス): 作成したデバイスの名前。
Message(s) per device (デバイスごとのメッセージ): 1。
Interval between two messages (2 つのメッセージ間の間隔): 1 秒。
メッセージ: プレーン テキスト。
編集: 既存のテキストをクリアし、次のテスト メッセージ JSON をコピーして貼り付けます。
ヒント
次のテスト メッセージの右隅にある [コピー] オプションを使って、[編集] ウィンドウ内に貼り付けることができます。
{ "PatientId": "patient1", "HeartRate": 78, "RespiratoryRate": 12, "HeartRateVariability": 30, "BodyTemperature": 98.6, "BloodPressure": { "Systolic": 120, "Diastolic": 80 } }
IoT ハブにテスト メッセージを送信するプロセスを開始するには、[送信] を選びます。
[送信] を選んだ後、FHIR サービスで FHIR リソースが使用可能になるまで最長 5 分かかる場合があります。
重要
device-to-cloud (D2C) メッセージでのデバイスのスプーフィングを回避するために、Azure IoT Hub はプロパティを追加してすべてのデバイス メッセージをエンリッチしてから、イベント ハブにルーティングします。 例: SystemProperties:
iothub-connection-device-id
と Properties:iothub-creation-time-utc
。 詳細については、「なりすまし対策のプロパティ」と「MedTech サービス デバイス マッピングで IotJsonPathContent テンプレートを使用する方法」を参照してください。エンリッチメントが IoT ハブによって複製され、MedTech サービスでエラーが発生するため、このサンプル デバイス メッセージは IoT ハブに送信しないでください。 これは、IoT ハブによってデバイス メッセージがどのようにエンリッチされるかを示す一例にすぎません。
例:
patientIdExpression
は [Create] (作成) モードの MedTech サービスにのみ必要ですが、[Lookup] (検索) が使われている場合は、デバイス識別子が一致するデバイス リソースが FHIR サービスに存在する必要があります。 この例では、MedTech サービスが [Create] (作成) モードであることを前提としています。 このチュートリアルの [Resolution type] (解決の種類) は [Create] (作成) に設定されています。 [Create] (作成) と [Lookup] (検索) という [Destination properties] (変換先のプロパティ) の詳細については、「[宛先] タブを構成する」を参照してください。
テスト メッセージのメトリックを確認する
IoT ハブにテスト メッセージが正常に送信したら、MedTech サービスのメトリックを確認できるようになります。 メトリックを確認して、MedTech サービスがテスト メッセージを受信し、グループ化し、変換し、FHIR サービスに保持したことを検証してください。 詳細については、「MedTech サービスの監視と正常性チェックのタブを使用する方法」を参照してください。
MedTech サービスのメトリックでは、MedTech サービスがテスト メッセージに対して以下の手順を完了したことを確認できます。
- 受信メッセージの数: 受信テスト メッセージをイベント ハブから受信しました。
- 正規化されたメッセージの数: 5 つの正規化されたメッセージが作成されました。
- 測定数: 5 つの測定値を作成しました。
- FHIR リソースの数: FHIR サービスに保持される 5 つの FHIR リソースを作成しました。
FHIR サービスでテスト データを表示する
デプロイ テンプレートの Fhir Contributor Principal Id (Fhir 共同作成者プリンシパル ID) オプションの省略可能な値として Microsoft Entra ユーザー オブジェクト ID を指定した場合、FHIR サービスで FHIR リソースのクエリを実行できます。 IoT ハブに送信され、MedTech サービスによって処理されたテスト メッセージに基づいて、FHIR サービスに次の FHIR 観察リソースが表示されるはずです。
- HeartRate
- RespiratoryRate
- HeartRateVariability
- BodyTemperature
- BloodPressure
Microsoft Entra アクセス トークンを取得し、FHIR サービスで FHIR リソースを表示する方法については、「Postman を使用したアクセス」を参照してください。 Postman GET
要求で次の値を使用して、テスト メッセージによって作成された FHIR 観察リソースを表示する必要があります。{{fhirurl}}/Observation
次のステップ
MedTech サービスでのデバイス データの処理ステージの概要
Note
FHIR® は HL7 の登録商標であり、HL7 の許可を得て使用しています。