3
0

[Azure] IoT Hub と SQL DB を Stream Analytics を介して接続する

Last updated at Posted at 2024-03-11

前回、デバイスからIoT Hubにデータを送信する方法を書きました。

今回は IoT Hubに到達したデータをデータベース(Azure SQL)に格納してゆく方法を書きます。
なお、Azure SQLには必要なデータだけを格納してゆきますので、通信の生データを同時にblobストレージに格納することもやります。

おおまかな流れ

  1. Stream Analyticsの作成
  2. Azure SQL(サーバー)の作成
  3. Azure SQL(DB)の作成
  4. Azure Storage Accountの作成
  5. Stream Analyticsの設定
  6. ジョブの開始
  7. Azure SQL DBの確認
  8. Azure Storage Accountの確認

Stream Analyticsの作成

まずは前回作成したIoT Hubと同じリソースグループにStream Analyticsを作成します。
スクリーンショット 2024-03-08 162520.png
こいつですね

ホスティング環境はクラウドに、
スクリーンショット 2024-03-08 162607.png

ストレージは作りませんでした。
スクリーンショット 2024-03-08 162615.png

一旦ここまで

Azure SQL(サーバー)の作成

次にSQLサーバーを作ります。
Azure SQLはAzure SQL(サーバー)とAzure SQL(DB)をセットで作成しないといけないようです。
DBは実体で、サーバーは論理的にそれらを管理するリソースということのようです。

スクリーンショット 2024-03-08 162928.png
こいつを選んだあとに

スクリーンショット 2024-03-08 162938.png
データベースサーバーを選びます

それで認証を方法を選ぶ場面があるのですが、ここはSQL 認証を使用するを選んでおいたほうがよさそうです。
それ以外の方法ではStream AnalyticsとDBの接続がうまくいきませんでした。(うまくいく方法もあるとは思うのですが)

スクリーンショット 2024-03-08 163211.png

それで、このときサーバー管理者ログインの欄にメールアドレスを入力したんですよね。このときバリデートが通ってしまって、普通に作れるんですけど、メールアドレスの形式ではどうもStream Analyticsからの指定接続ができないっぽかったです(これもできる方法あるのかもしれませんが)

なので、普通の無難なIDの形式にしたほうがよいと思います。

このあたりで躓いて結構時間食ってしまいました。

スクリーンショット 2024-03-08 163506.png

あとネットワークのこの部分は「はい」にしておきましょう(後からリカバリーできますが)

これで作成完了

Azure SQL(DB)の作成

次にAzure SQL(DB)を作っていきます

さっきのSQLデータベースの作成選択肢のなかから単一データベースを選択します。

スクリーンショット 2024-03-08 163753.png

ここでサーバーを選択する場面があるので、先程作ったAzure SQL(サーバー)を選択しましょう。

スクリーンショット 2024-03-08 163839.png

ローカルの環境からDBにアクセスしたいこともあると思うので、ファイアウォールでは自分のIPアドレスを追加しておきましょう

スクリーンショット 2024-03-08 164103.png

あとは一旦そのまま、これでAzure SQL(DB)の作成完了、ということでリソースに移動してテーブルを作成します。

Azure SQL(DB)テーブルの準備

SQLデータベースリソースの左側のペインの「クエリエディター」に移動して、下記のSQLを投げます。

CREATE TABLE test_table (
    create_time DATETIME PRIMARY KEY,
    temperature FLOAT,
    humidity FLOAT
);

スクリーンショット 2024-03-08 171926.png

するとテーブルが作成されました。これでOK

スクリーンショット 2024-03-08 172344.png

Azure Storage Accountの作成

IoT Hubから飛んでくる生データを格納するストレージを作成します。

スクリーンショット 2024-03-08 164405.png
こいつですね。

作成したあとはリソースメニューの中からコンテナーも作成しておきましょう。

スクリーンショット 2024-03-08 173252.png

これで完了。

Stream Analyticsの設定

IoT Hubを入力元として接続

いよいよつなぎ込みをやっていきます。
Stream Analyticsのリソースに移動して「入力」を選択します。

input.png

入力の追加からIoT Hubを選択して追加します。

スクリーンショット 2024-03-08 172833.png

IoT Hubを選択すると右側にペインが出てきて、IoT Hubの接続の設定をします。
サブスクリプションの中のIoT Hubを自動で引っ張ってきてくれるので簡単です。
一点、「入力のエイリアス」は「input〇〇」としておいたほうが後からわかりやすくてよいです。
今回は「input-iot-hub」としました。

スクリーンショット 2024-03-08 165740.png

Blob Storageを出力先として接続

Stream Analyticsリソースの左側ペインから「出力」を選択

output.png

「出力を追加する」から「Blob storageまたは…」を選択します
スクリーンショット 2024-03-08 172622.png

出力エイリアスを「output-blog」などにしておいたほうが後々わかりやすいです。

コンテナーは、ストレージで作っておいたrawdataコンテナーを選びます。

パスパターンは {date} とします。

スクリーンショット 2024-03-08 170124.png

SQL DBを出力先として接続

「出力を追加する」から「SQL Database」を選択します。

db.png

同じくエイリアスはoutput-sql-dbなどにしておきましょう。

ユーザー名とパスワードを入れると、テーブル部分は既存のテーブルの読み込みで取ってこれるので、先程DBの作成の際に作ったテーブルを指定します。

スクリーンショット 2024-03-08 171617.png

クエリを作成

次にクエリを作成して、入力元と出力元を繋げていきます。

スクリーンショット 2024-03-08 164624.png

クエリを開くと、概ね以下のような状況になっているかと思います(クエリはまだ書かれていないはず)

スクリーンショット 2024-03-11 134109.png

入力と出力

これまでの作業で入力と出力を設定できていると、以下のような状況になっていると思います。

スクリーンショット 2024-03-11 133744.png

この入力と出力として設定したエイリアスは右側のクエリ部で引用して使用することができます。

スクリーンショット 2024-03-11 133828.png

クエリには一旦以下のように書くと良いです。

SELECT
    *
INTO
    [output-blob]
FROM
    [input-iot-hub]

SELECT
    EventProcessedUtcTime as [create_time],
    temperature,
    humidity
INTO
    [output-sql-db]
FROM 
    [input-iot-hub]

下記部分で、IoT Hubからの入力をblobストレージに保存しています。

SELECT
    *
INTO
    [output-blob]
FROM
    [input-iot-hub]

加えて、下記部分でIoT Hubからの入力をAzure Sqlに格納するということになります。

SELECT
    EventProcessedUtcTime as [create_time],
    temperature,
    humidity
INTO
    [output-sql-db]
FROM 
    [input-iot-hub]

プレビューエリアについて

入力のプレビュー

このエリアではIoT Hubからの入力を確認したり、SQL-DBに出力としてどのように格納されるかということを確認することができます。

下図の最新の情報に更新ボタンを押すと、IoT Hubに入ってきている情報を見ることができます。
ボタンを押してしばらくすると、その下段にtemperature: 25.56 humidity:60.35 などの情報がIoT Hubに入力されていることが確認できました。

スクリーンショット 2024-03-11 134453.png

IoT Hubに情報をおくる方法は前回の記事を参照してください。

Azure IoT Hubにエッジデバイスからデータを送信から確認まで #Azure - Qiita

クエリのテスト

クエリを走らせたときに、どのような結果になるかは、テスト結果のタブで見ることができます。
クエリのテストボタンを押すと、このタブに結果が表示されます。

スクリーンショット 2024-03-11 155932.png

SQLテーブルスキーマのプレビュー

SQLテーブルのカラムと、クエリによって処理される値の型チェックなどを行うことができます。
定かじゃないんですが、どうもこの部分がすべて「一致」とならないとDBに飛んで行ってくれなかったような挙動をしました。
ひょっとすると、その時、その他なにか致命的な設定ミスがあったのかもしれませんが。。
このあたりもひっかかりポイントでしたね。

ジョブを開始するにも停止するにも2~3分時間がかかるので、このあたりの試行錯誤は少し面倒かもしれません。

スクリーンショット 2024-03-11 160019.png

ジョブの開始

ここまで確認できたらいよいよジョブを開始しましょう。

ジョブを開始することで、IoT Hubに入力されたデータが先程Stream Analyticsに設定された処理に基づいて、DBとblobストレージに格納されていくことになります。

スクリーンショット 2024-03-11 160607.png

Azure SQL DBの確認

ジョブが開始したらIoT Hubにデータを送ってみます。
データの送信を確認したらAzure SQL(DB)に行って送信先に指定したテーブルの中身を確認してみましょう。

うまく設定ができていれば、データが到着しているのが確認できると思います。

スクリーンショット 2024-03-11 161059.png

Azure Storage Accountの確認

次に、生データを記録しているはずのblobストレージを確認します。

ストレージアカウントリソースに移動して、コンテナーを確認します。

スクリーンショット 2024-03-11 161404.png

中に入ると、日付によってパスが規定されていますので、それを辿ってblobオブジェクトに到達したらダウンロードします。

スクリーンショット 2024-03-11 161523.png

ダウンロードしたjsonファイルを開くと、IoT Hubから送られた全てのデータが記録されていることが確認できました。

スクリーンショット 2024-03-11 161751.png

ということで、IoT Hubに送ったデータの生データをblobストレージに、抽出データをDBに格納することができました。

この記事を書くにあたって、下記の記事を大いに参考にさせていただきました。

[初心者向]Azure IoT システム構築 (ハンズオン) – サポートページTOP

心より感謝申し上げます。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0