IoT Edge and Serverless
playground with Node.js
IoT EdgeとサーバレスをNode.jsで遊ぶ実験ノート
https://jazug.connpass.com/event/115696/
Self introduction
自己紹介
{
"name": {
"ja": "大平かづみ",
"en": "Kazumi OHIRA"
},
"currentPosition": "フリーランス",
"awards": ["Microsoft MVP"],
"favorites": [
"Azure": ["ARM template", "IoT"]
],
"twitter": "@dz_"
}
Me
https://ascii.jp/elem/000/001/838/1838466/index-2.html
Me
私の生きざまを
記事にして
くださいました!
• コミットしているコミュニティ
• Cogbot
• Node-RED User Group
• NoOps
Things I’m
making
つくってるもの
Background image by https://flic.kr/p/8WabtH
https://github.com/dzeyelid/iot-edge-with-serverless-demo
What’s this!?
IoT サーバレス×
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
Why I make this?
なんでつくってるの?
学びたいことを詰め込みました
• IoT Edgeを習得したい
• サーバーレス構成を習得したい
• Node.jsを習得したい
• Vue.jsを習得したい
• 実際に手を動かして体得したい!
• ぜんぶつなげてしまえ~
Why make this public?
なんでオープンに公開してるの?
エンジニアとしてのチャレンジ
• オープンソースに関わりたい
• いきなりコミットするのは難しいので、まず自分で作ってみる
• 私が好きで得意なことで仕事をしたい
• 私がなにに興味持っているか知ってもらえる
• 私のスキルをみてもらえる
• 同じ興味をもつ人とつながれる
• 未来の自分に向けた参考書
• 気持ちを引き締められる
Dive!
IoT Edge
study note
IoT Edge 研究
ノート
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
Azure IoT を構成する要素
• Azure IoT Hub
• Azure IoT Edge
Azure IoT Hub
Azure IoT Hub
• デバイスと双方向でメッセージを送受信できる出入口
• Azure の他のサービスに連携できる
Azure IoT Hub
Functions
Event Grid
Stream
Analytics
Service Bus
Logic App
Blob Storage
IoT Hub
Things
Azure
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
Device twins
• エッジデバイスの「状態」や「メタデータ」を取り扱う
• properties
• Desired properties
• クラウドからエッジデバイスへ要求されるプロパティ
• Reported properties
• エッジデバイスからクラウドへ報告されるプロパティ
• 更新されたタイミングでイベント駆動
Device twins
IoT HubThings
LEDをしました~
{
"ledIsLighted": true
}
LEDを点灯
してください~
desired
reported
{
"ledIsLighted": true
}
Direct method
• Device SDKを用いて「メソッド」を定義しておくと、クラウド側からそ
のメソッドを実行できる
• CLIからも実行できる
Azure IoT Edge
Azure IoT Edge
• エッジデバイスで複数の「モジュール」を配置・管理できるサービス
• IoT Hubの一部
• コンテナ技術がベースで、コンテナ=モジュールとして扱う
• 各モジュールでは、独立したプロセス空間でOSが実行される
• モジュールの中で、IoT HubのDevice SDKを使う
• クラウドからモジュールの管理・更新ができる
• エッジデバイス内でメッセージルーティングを制御できる
IoT Edge runtime
module module
IoT
Edge
agent
IoT
Edge
hub
…
IoT Hub
IoT Edge の仕組み
Sensors, etc.
Device
Azure
Container
Registry
IoT Edge runtime
module module
IoT
Edge
agent
IoT
Edge
hub
…
IoT Hub
IoT Edge の仕組み
Sensors, etc.
Device
Azure
データストリーム
のプロキシ
モジュールのライ
フサイクル管理
エッジ内の
メッセージ
ルーティング
Container
Registry
IoT Edge runtime
module module
IoT
Edge
agent
IoT
Edge
hub
…
IoT Hub
IoT Edge の仕組み
Sensors, etc.
Device
Azure
モジュールを
自作できる
ホストに接続
されたデバイスに
も接続可能
Container
Registry
モジュールの
コンテナイメージ
を配信
デバイス上ではこのように見えます
iotedge コマンド
docker コマンド
IoT Edgeのいいところ
IoT Edgeのいいところ
• モジュールを利用して、エッジデバイスのシステムを分割できる
• 生産性、安全性が向上
• モジュールのライフサイクル管理は、IoT Edgeがしてくれる
• ロジックの開発に注力できる
• クラウドから管理できることで、継続的な更新ができる
• バグ修正、機能追加
• 機械学習の学習済みデータセットの更新、など
IoT Edgeのいいところ
• モジュール単位でも、Module twinsやDirect methodが利用でき
る
• モジュール間のメッセージルーティングを制御できることで、通信量を
抑えられる
• サーバーサイドで培ったコンテナ技術を活かせる
IoT Edgeを使った開発の流れ
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の運用も可能
Visual Studio Code Extension
Azure IoT Edge Extension
• IoT Edge モジュールの開発、
デプロイができる
Azure IoT Hub Toolkit Extension
• IoT Hub に登録されたデバイス
やモジュールを管理できる
Deployment manifest
• development.template.jsonに定義する
• EdgeAgent, EdgeHubの設定
• 自作モジュールの設定
• メッセージルーティング
• Twinのdesired propertiesの設定
• これをもとに、デバイスの環境(arm32v7など)向けのマニフェストを
生成する
• 参考: https://docs.microsoft.com/en-us/azure/iot-
edge/module-composition
デプロイの様子
deployment.template.
jsonを参照し
ビルド→レジストリへpush、
マニフェストの生成
マニフェストを指定して、
対象のデバイスに
デプロイ
メッセージルーティング
• deployment.template.jsonに定義する
• どのモジュールのoutputsを、どのモジュールのinputsまたは
$upstream(IoT Hub)に届けるか
• 参考: https://docs.microsoft.com/en-us/azure/iot-
edge/module-composition#declare-routes
deployment.template.json
IoT Edgeモジュール開発メモ
具体的な(ニッチな)コツ
モジュールからホストの /dev にアクセスする
• deployment.template.jsonで、
モジュールに右記のパラメータを指定する
• createOptions.HostConfig
• “Privileged”: true
• “Binds”: [“/dev/usb:/dev/usb”]
deployment.template.json
使いたいライブラリが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を更新
EdgeHubでOutOfMemory😐
• モジュール間のメッセージ送受信ができない
• $upsteam(IoT Hub)へはメッセージが届く🤔
• 原因は、EdgeHubがOutOfMemoryでエラー
で動作不良になっていた
• このissueから暫定対処を把握
• https://github.com/Azure/iot-edge-
v1/issues/475#issuecomment-403915333
deployment.template.json
モジュールの更新の仕方
1. イメージを更新してレジストリに push する
• タグは更新してもしなくてもよい
2. deployment.template.json のモジュー
ルのバージョンを更新する
3. Deployent manifest を生成する
4. デバイスにデプロイする
• これでエッジデバイスのiotedgeが、自動的に
pull して更新してくれる
deployment.template.json
Serverless
study note
サーバレス研究
ノート
Event Hubs
trigger
Card reader
IoT Edge runtime
module module
IoT
Edge
agent
IoT
Edge
hub
…
IoT Hub
Functions
SignalR Service
Azure
update!
Web
Blob Storage
構成図
サーバレス構成の要素
• Azure Functions
• Azure SignalR Service
• Static website on Azure Storage Blob
• Vue.js
Azure Functions
• 言わずと知れたAzureのFaaS
• 多用なトリガーに対応する
• 今回は、Event Hubトリガーを利用
• IoT Hubからのメッセージを受け付け、そのままSignalR Serviceに横流し
Azure SignalR Service
• SignalRのサーバーをホストしてくれるサービス
• SignalRは、リアルタイムに通信するためのライブラリ
• Websocketsなどを利用して通信
• Azure Functionsと組み合わせて処理を実装
• SignalRはJavaScriptのクライアントがあるので、静的サイト上でも
利用できる!
Static website on Azure Storage Blob
• 静的サイトをホスティングできる
• ストレージなら低価格
Static site by Vue.js
• Vue.js
• "Progressive" JavaScript Framework
• https://vuejs.org/
• SignalRクライアントのサンプルもVue.jsで
書かれているので、組み合わせばっちり
• Bulma
• CSS framework
• https://bulma.io/
• (まだプロトタイプすぎですけど…)
Demoデモ
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
Extrasおまけ
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を指定することで、リ
ソースのデプロイ時にコードもデプロイ
Have fun!

More Related Content

PDF
20190427 global azurebootcamp
PDF
Azureのサーバーレスで限界を超えよう~スマートスピーカースキル開発を題材に~
PDF
[TL04] .NET 15 周年の今こそ考えるクラウドネイティブ アプリケーションと .NET の活用
PDF
Vs code conf2020-11-21-extensions-for-microservices-app-dev
PDF
C#ユーザー会 //build/ まとめ(サーバー編)
PDF
.NET Micro Framework (プラレールと電子工作)
PDF
2021/02/19 Alterbooth 多忙なアーキテクトのためのクラウド導入フレームワーク (CAF) ダイジェスト
PDF
Azure Cosmos DB Emulator on Docker を GitHub Codespaces で動かす!
20190427 global azurebootcamp
Azureのサーバーレスで限界を超えよう~スマートスピーカースキル開発を題材に~
[TL04] .NET 15 周年の今こそ考えるクラウドネイティブ アプリケーションと .NET の活用
Vs code conf2020-11-21-extensions-for-microservices-app-dev
C#ユーザー会 //build/ まとめ(サーバー編)
.NET Micro Framework (プラレールと電子工作)
2021/02/19 Alterbooth 多忙なアーキテクトのためのクラウド導入フレームワーク (CAF) ダイジェスト
Azure Cosmos DB Emulator on Docker を GitHub Codespaces で動かす!

What's hot (20)

PDF
Smart Tennis Lesson Serverless Design
PDF
.NET Core と Docker コンテナー、そして Azure を使用したマイクロサービスのアーキテクチャ
PDF
Ignite 2021秋 recap - 開発者向け新機能紹介
PDF
[TL08] 50 分で Bot 開発者になれる!~実践的ノウハウと、 Azure や Office 365 を組み合わせたアーキテクチャの伝授~
PDF
.NET の過去、現在、そして未来
PDF
.NET 6の期待の新機能とアップデート
PDF
【NLU祭り 場外編】コミュニケーションをより身近に、よりかしこく。LUIS と Azure AI サービスの使いどころ
PDF
Introduction to extensions and other useful features for developing apps usin...
PDF
レガシー Web からの脱却 ~ 開発者が次に目指すべき Web アプリの姿とは?
PDF
VS Code & Flaskで作るCloud NativeアプリとDevOps
PDF
Building asp.net core blazor and elasticsearch elasticsearch using visual stu...
PPTX
Interactive connection2
PDF
Open Source x AI
PDF
Azure DevOps と開発管理
PDF
[AC09] Azure Stack パート1 ~今知っておくべき開発者/インフラ担当者の最新ハイブリッドクラウドとの向きあい方~
PPTX
Running Kubernetes on Azure
PDF
Sb tech night#1_document_otsuki_202104
PDF
2020/12/03 SaaS を正しい方向へ加速するフィードバックループ
PPTX
Relationship betweenddd and mvc
PDF
Cloud から IoT まで、なんでもおまかせ ~ .NET 5 正式リリース!
Smart Tennis Lesson Serverless Design
.NET Core と Docker コンテナー、そして Azure を使用したマイクロサービスのアーキテクチャ
Ignite 2021秋 recap - 開発者向け新機能紹介
[TL08] 50 分で Bot 開発者になれる!~実践的ノウハウと、 Azure や Office 365 を組み合わせたアーキテクチャの伝授~
.NET の過去、現在、そして未来
.NET 6の期待の新機能とアップデート
【NLU祭り 場外編】コミュニケーションをより身近に、よりかしこく。LUIS と Azure AI サービスの使いどころ
Introduction to extensions and other useful features for developing apps usin...
レガシー Web からの脱却 ~ 開発者が次に目指すべき Web アプリの姿とは?
VS Code & Flaskで作るCloud NativeアプリとDevOps
Building asp.net core blazor and elasticsearch elasticsearch using visual stu...
Interactive connection2
Open Source x AI
Azure DevOps と開発管理
[AC09] Azure Stack パート1 ~今知っておくべき開発者/インフラ担当者の最新ハイブリッドクラウドとの向きあい方~
Running Kubernetes on Azure
Sb tech night#1_document_otsuki_202104
2020/12/03 SaaS を正しい方向へ加速するフィードバックループ
Relationship betweenddd and mvc
Cloud から IoT まで、なんでもおまかせ ~ .NET 5 正式リリース!
Ad

Similar to IoT Edge and Serverless playground with Node.js ~ IoT EdgeとサーバレスをNode.jsで遊ぶ実験ノート (20)

PDF
【de:code 2020】 そのロジック、IoT Edge で動きます - Azure IoT Edge 開発 Deep Dive
PPTX
Japan MVP Community Connection 2017 Autumn smart Demonstration
PDF
インフラ管理者に送る あらためての IoT Edge / IoT Hub
PDF
ゼロから学ぶIoT
PPTX
Visual Studio Codeを使い倒そう! ~プログラミングから機械学習、クラウド連携、遠隔ペアプロまで~
PDF
Intel OpenVINO、 NVIDIA Deepstream対応開発キットから、 エッジサーバー、Azure Data Box Edgeまで、 Az...
PDF
Part 1: IoT 基盤 (製造リファレンス・アーキテクチャ勉強会)
PDF
Edge AI ソリューションを支える Azure IoT サービス
PPTX
Visual Studio Codeを使い倒そう! ~プログラミングから機械学習、クラウド連携、遠隔ペアプロまで~
PPTX
Qiita x Microsoft - 機械学習セミナー Microsoft AI Platform
PDF
Xamarin 概要 2014年08月版
PDF
Azure IoT Edge - EdgeAI #5
PDF
福井スマートフォンハッカソン Titanium Mobileの紹介
PDF
Microsoft Intelligent Edge Technologies
PPTX
Azure DevOpsとVisual Studio App CenterをモバイルアプリのCI/CDに活用しよう
PPTX
[Java Festa in 札幌 2012] Windows Azure を活用した Windows 8 アプリケーション開発
PDF
Azure IoT 最前線!~ Microsoft Ignite 2019での発表と直近アップデート総まとめ ~
PDF
【de:code 2020】 SaaS で迅速に IoT を実現 - Azure IoT Central 最新アップデートと活用術
PDF
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
PDF
【de:code 2020】 そのロジック、IoT Edge で動きます - Azure IoT Edge 開発 Deep Dive
Japan MVP Community Connection 2017 Autumn smart Demonstration
インフラ管理者に送る あらためての IoT Edge / IoT Hub
ゼロから学ぶIoT
Visual Studio Codeを使い倒そう! ~プログラミングから機械学習、クラウド連携、遠隔ペアプロまで~
Intel OpenVINO、 NVIDIA Deepstream対応開発キットから、 エッジサーバー、Azure Data Box Edgeまで、 Az...
Part 1: IoT 基盤 (製造リファレンス・アーキテクチャ勉強会)
Edge AI ソリューションを支える Azure IoT サービス
Visual Studio Codeを使い倒そう! ~プログラミングから機械学習、クラウド連携、遠隔ペアプロまで~
Qiita x Microsoft - 機械学習セミナー Microsoft AI Platform
Xamarin 概要 2014年08月版
Azure IoT Edge - EdgeAI #5
福井スマートフォンハッカソン Titanium Mobileの紹介
Microsoft Intelligent Edge Technologies
Azure DevOpsとVisual Studio App CenterをモバイルアプリのCI/CDに活用しよう
[Java Festa in 札幌 2012] Windows Azure を活用した Windows 8 アプリケーション開発
Azure IoT 最前線!~ Microsoft Ignite 2019での発表と直近アップデート総まとめ ~
【de:code 2020】 SaaS で迅速に IoT を実現 - Azure IoT Central 最新アップデートと活用術
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
Ad

More from Kazumi OHIRA (20)

PDF
地味だけど劇的に便利になるGitHubリポジトリ設定あれこれ
PDF
GitHub dockyardコミュニティ 竣工イベント!オープニング資料
PDF
GitHub最新情報キャッチアップ 2023年6月
PDF
GitHub と Azure でアプリケーションとインフラストラクチャの守りを固めるDevSecOps
PDF
高さ比べじゃない、キャリアは歩んできた道
PDF
GitHub Copilotとともに次の開発体験へ
PDF
突如登場したAzure Developer CLIでなにができるのか?検証してみる
PDF
GitHub Actions と Azure PaaS でプルリクエストごとに環境を ~ Azure Static Web Apps と Containe...
PDF
GitHub Codespaces と Azure でつくる、エンタープライズレベルの開発環境
PDF
Developers Summit 2023 9-D-1「もう悩まされない開発環境、プロジェクトで統一した環境をいつでもどこでも」
PDF
GitHub Codespaces が拡げる開発環境、いつでもどこでも Visual Studio Code で!
PDF
日々の開発フローにプラスする GitHub Actions ~ セキュリティ対策を取り込む
PDF
女性エンジニアコミュニティから見える価値観のリアル
PDF
「あの人の自分戦略を聞きたい!2022」~ 大平かづみの場合
PDF
Azure Functions 開発デプロイ環境を GitHub Codespaces で爆速に整える
PDF
本領を発揮するために、まずバリアを開放できる場を
PDF
「 Azure 」にデータを溜めて活用する のご紹介 - 「はじめてのNode-RED ver.1.3.0対応版」書籍出版記念イベント LT
PDF
Code Polaris 紹介(Woman type イベント「女性エンジニアのキャリアのお悩み相談室 with Code Polaris」)
PDF
Azure Rock Star Community Day #2 - Cogbot Community スタッフが選ぶ Microsoft Learn コ...
PDF
LINE LIFF with Azure ハンズオン資料 - Azure サービス解説
地味だけど劇的に便利になるGitHubリポジトリ設定あれこれ
GitHub dockyardコミュニティ 竣工イベント!オープニング資料
GitHub最新情報キャッチアップ 2023年6月
GitHub と Azure でアプリケーションとインフラストラクチャの守りを固めるDevSecOps
高さ比べじゃない、キャリアは歩んできた道
GitHub Copilotとともに次の開発体験へ
突如登場したAzure Developer CLIでなにができるのか?検証してみる
GitHub Actions と Azure PaaS でプルリクエストごとに環境を ~ Azure Static Web Apps と Containe...
GitHub Codespaces と Azure でつくる、エンタープライズレベルの開発環境
Developers Summit 2023 9-D-1「もう悩まされない開発環境、プロジェクトで統一した環境をいつでもどこでも」
GitHub Codespaces が拡げる開発環境、いつでもどこでも Visual Studio Code で!
日々の開発フローにプラスする GitHub Actions ~ セキュリティ対策を取り込む
女性エンジニアコミュニティから見える価値観のリアル
「あの人の自分戦略を聞きたい!2022」~ 大平かづみの場合
Azure Functions 開発デプロイ環境を GitHub Codespaces で爆速に整える
本領を発揮するために、まずバリアを開放できる場を
「 Azure 」にデータを溜めて活用する のご紹介 - 「はじめてのNode-RED ver.1.3.0対応版」書籍出版記念イベント LT
Code Polaris 紹介(Woman type イベント「女性エンジニアのキャリアのお悩み相談室 with Code Polaris」)
Azure Rock Star Community Day #2 - Cogbot Community スタッフが選ぶ Microsoft Learn コ...
LINE LIFF with Azure ハンズオン資料 - Azure サービス解説

Recently uploaded (7)

PDF
翔泳社 「C++ ゼロからはじめるプログラミング」対応 C++学習教材(三谷純)
PDF
ココロ分解帳|感情をやさしく分解し自分と他者を理解するためのモバイルノートアプリ
PDF
Working as an OSS Developer at Ruby Association Activity Report 2025
PDF
20250826_Devinで切り拓く沖縄ITの未来_AI駆動開発勉強会 沖縄支部 第2回
PPTX
生成AIとモデルベース開発:実はとても相性が良いことを説明します。まあそうだろうなと思われる方はご覧ください。
PDF
AIシステムのセキュリティ:脅威となりつつあるAIの現状と課題 [English] Security of AI Systems: The Current...
翔泳社 「C++ ゼロからはじめるプログラミング」対応 C++学習教材(三谷純)
ココロ分解帳|感情をやさしく分解し自分と他者を理解するためのモバイルノートアプリ
Working as an OSS Developer at Ruby Association Activity Report 2025
20250826_Devinで切り拓く沖縄ITの未来_AI駆動開発勉強会 沖縄支部 第2回
生成AIとモデルベース開発:実はとても相性が良いことを説明します。まあそうだろうなと思われる方はご覧ください。
AIシステムのセキュリティ:脅威となりつつあるAIの現状と課題 [English] Security of AI Systems: The Current...

IoT Edge and Serverless playground with Node.js ~ IoT EdgeとサーバレスをNode.jsで遊ぶ実験ノート