Más contenido relacionado
La actualidad más candente (20)
Similar a IoT Edge and Serverless playground with Node.js ~ IoT EdgeとサーバレスをNode.jsで遊ぶ実験ノート (20)
Más de Kazumi IWANAGA (20)
IoT Edge and Serverless playground with Node.js ~ IoT EdgeとサーバレスをNode.jsで遊ぶ実験ノート
- 1. IoT Edge and Serverless
playground with Node.js
IoT EdgeとサーバレスをNode.jsで遊ぶ実験ノート
https://jazug.connpass.com/event/115696/
- 3. {
"name": {
"ja": "大平かづみ",
"en": "Kazumi OHIRA"
},
"currentPosition": "フリーランス",
"awards": ["Microsoft MVP"],
"favorites": [
"Azure": ["ARM template", "IoT"]
],
"twitter": "@dz_"
}
Me
- 9. Event Hubs
trigger
Card reader
IoT Edge runtime
module
(Python)
module
(Node.js)
IoT
Edge
agent
IoT
Edge
hub
…
IoT Hub
Functions
SignalR Service
update!
Web
Blob Storage
構成図
Azure
- 16. Event Hubs
trigger
Card reader
IoT Edge runtime
module
(Python)
module
(Node.js)
IoT
Edge
agent
IoT
Edge
hub
…
IoT Hub
Functions
SignalR Service
update!
Web
Blob Storage
構成図
Azure
- 21. Azure IoT Hubのおすすめポイント
• 扱えるプロトコル
• MQTT、AMQPなど
• SDKが豊富
• C, C#, Java, Python, Node.jsなどの言語展開
• Device SDK, Service SDK, Provisioning SDK
• IoT Hub単体でもメッセージのルーティング、フィルタリングが可能
• 参考: Check! Azure IoT Hub message routing と Azure Stream
Analytics の使いどころ比較
(https://qiita.com/dz_/items/babb9404192693d71a65)
• Device twinsとDirect method
- 26. Azure IoT Edge
• エッジデバイスで複数の「モジュール」を配置・管理できるサービス
• IoT Hubの一部
• コンテナ技術がベースで、コンテナ=モジュールとして扱う
• 各モジュールでは、独立したプロセス空間でOSが実行される
• モジュールの中で、IoT HubのDevice SDKを使う
• クラウドからモジュールの管理・更新ができる
• エッジデバイス内でメッセージルーティングを制御できる
- 27. IoT Edge runtime
module module
IoT
Edge
agent
IoT
Edge
hub
…
IoT Hub
IoT Edge の仕組み
Sensors, etc.
Device
Azure
Container
Registry
- 28. IoT Edge runtime
module module
IoT
Edge
agent
IoT
Edge
hub
…
IoT Hub
IoT Edge の仕組み
Sensors, etc.
Device
Azure
データストリーム
のプロキシ
モジュールのライ
フサイクル管理
エッジ内の
メッセージ
ルーティング
Container
Registry
- 29. IoT Edge runtime
module module
IoT
Edge
agent
IoT
Edge
hub
…
IoT Hub
IoT Edge の仕組み
Sensors, etc.
Device
Azure
モジュールを
自作できる
ホストに接続
されたデバイスに
も接続可能
Container
Registry
モジュールの
コンテナイメージ
を配信
- 35. IoT Edgeを使った開発の流れ
1. Azure IoT Hubを作成する
2. IoT Hubにエッジデバイスを登録する(手動 or 自動)
3. Visual Studio Codeで開発する
1. Dockerfile更新, Device SDKを使ってコーディング
2. deployment.template.jsonを編集
4. Visual Studio Codeからデプロイする
5. Azure DevOpsなどCI/CDの運用も可能
- 36. Visual Studio Code Extension
Azure IoT Edge Extension
• IoT Edge モジュールの開発、
デプロイができる
Azure IoT Hub Toolkit Extension
• IoT Hub に登録されたデバイス
やモジュールを管理できる
- 41. モジュールからホストの /dev にアクセスする
• deployment.template.jsonで、
モジュールに右記のパラメータを指定する
• createOptions.HostConfig
• “Privileged”: true
• “Binds”: [“/dev/usb:/dev/usb”]
deployment.template.json
- 42. 使いたいライブラリがPython
Card reader
IoT Edge runtime
module
(Python)
module
(Node.js)
IoT
Edge
agent
IoT
Edge
hub
…
• 本当は、全体的にNode.jsで統一した
かったが、カードリーダーのライブラリが
ない
• Pythonのライブラリなら実績も豊富なの
で、カードリーダー用モジュールは
Pythonで構成した
• ライブラリがPython2.7でしか動かないの
で、いずれアップデートが必要だろう
• IoT Edgeなら更新が容易♪
カードの情報を
メッセージ送信
メッセージを受け
取り、Twinを更新
- 44. モジュールの更新の仕方
1. イメージを更新してレジストリに push する
• タグは更新してもしなくてもよい
2. deployment.template.json のモジュー
ルのバージョンを更新する
3. Deployent manifest を生成する
4. デバイスにデプロイする
• これでエッジデバイスのiotedgeが、自動的に
pull して更新してくれる
deployment.template.json
- 49. Azure SignalR Service
• SignalRのサーバーをホストしてくれるサービス
• SignalRは、リアルタイムに通信するためのライブラリ
• Websocketsなどを利用して通信
• Azure Functionsと組み合わせて処理を実装
• SignalRはJavaScriptのクライアントがあるので、静的サイト上でも
利用できる!
- 51. Static site by Vue.js
• Vue.js
• "Progressive" JavaScript Framework
• https://vuejs.org/
• SignalRクライアントのサンプルもVue.jsで
書かれているので、組み合わせばっちり
• Bulma
• CSS framework
• https://bulma.io/
• (まだプロトタイプすぎですけど…)
- 53. Event Hubs
trigger
Card reader
IoT Edge runtime
module
(Python)
module
(Node.js)
IoT
Edge
agent
IoT
Edge
hub
…
IoT Hub
Functions
SignalR Service
update!
Web
Blob Storage
構成図
Azure
- 55. ARMテンプレート
• ARM = Azure Resource Manager
• 使うリソースを定義しておき、いつでも構築可能
• パラメータの指定や変数、ビルトイン関数を利用できる
• コツ
• AzureのREST APIと連動しているので、API versionに留意する
• リファレンス https://docs.microsoft.com/en-us/azure/templates/ を駆使する
• Functionsのオートデプロイ
• Azure DevOpsでzip化して、GitHub releaseに配置
• ARMテンプレートで、WEBSITE_RUN_FROM_PACKAGEにzipを指定することで、リ
ソースのデプロイ時にコードもデプロイ