Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
サーバレスで挑む IoT プロジェクトの現実解 / Real solutions for th...
Search
Genki Ogasawara
October 11, 2024
Technology
930
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
サーバレスで挑む IoT プロジェクトの現実解 / Real solutions for the IoT project using serverless service
Genki Ogasawara
October 11, 2024
More Decks by Genki Ogasawara
See All by Genki Ogasawara
IoT デバイス監視から始める SRE / SRE starts with IoT device monitoring
genkiogasawara
2
270
クラウドのスケーリングの力で5時間 かかるバッチジョブを10分に短縮する / Reduce the batch job time by a 36th using the power of scaling in the public cloud
genkiogasawara
2
82
IT知識ゼロからのスタートで、 事業部における内製開発をどうやって 推進してきたか?/How did we promote in-house development by starting from scratch?
genkiogasawara
1
600
クラウドネイティブな省エネサービスの内製開発で、BizDevOpsを実現する / Achieving BizDevOps in in-house development of cloud-native energy-saving services
genkiogasawara
2
1.6k
エンジニアゼロの組織から内製開発の DX をどう実現したのか / How did we achieve DX in in-house development in an organization with zero engineers?
genkiogasawara
8
4.5k
入門 AWS Amplify Gen2 / Introduction to AWS Amplify Gen2
genkiogasawara
1
1.2k
ソフトウェア開発の生産性と信頼性向上に取り組んだ結果、どうなった?/What has changed as a result of efforts to improve software development productivity and reliability?
genkiogasawara
0
200
「魔の川」「死の谷」をクラウド ネイティブなチーム作りで越境する / Crossing the "Devil River" and "Death Valley" by building cloud-native teams
genkiogasawara
2
910
Amazon CodeCatalyst で実現!開発環境とCI/CDパイプライン
genkiogasawara
0
9k
Other Decks in Technology
See All in Technology
10倍の生産性を実現するAI駆動並列エージェントのすべて
kumaiu
4
1.3k
FDE という解 ― 暗黙知と明示知をつなぐ、伴走型エンジニアリング ―
otanet
0
130
新しいVibe Codingと”自走”について
watany
5
290
AIっぽい文章を採点して人間らしく直すアプリを作ってみた
yama3133
2
120
protovalidate-es を導入してみた
bengo4com
0
170
爆速でマルチプロダクトを立ち上げる時 事業・CTO目線で大事にしたい事
miyatakoji
0
100
Claude Code の Sandbox 機能を Anthropic Sandbox Runtime(srt) で試そう!/lets-play-anthropic-sandbox-runtime
tomoki10
1
520
非定型業務をAI slackbotで自動化する ~ 社内要望を自動壁打ちするbotを作った ~/automating-ad-hoc-work-with-ai-slackbot
shibayu36
0
580
Building applications in the Gemini API family.
line_developers_tw
PRO
0
2.8k
2026TECHFRESH畢業分享會 - 葬送的通靈師:化系統與用戶雜訊成行動訊號
line_developers_tw
PRO
0
700
脆弱性対応、どこで線を引くか
rymiyamoto
0
350
2026TECHFRESH畢業分享會 - 原生還是跨平台? App 開發踩坑實錄
line_developers_tw
PRO
0
710
Featured
See All Featured
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.2k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2k
How to make the Groovebox
asonas
2
2.2k
Darren the Foodie - Storyboard
khoart
PRO
3
3.4k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
65
55k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
122
22k
Code Review Best Practice
trishagee
74
20k
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
840
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.5k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
62
44k
The untapped power of vector embeddings
frankvandijk
2
1.8k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
560
Transcript
北海道ガス株式会社 小笠原 元気 サーバレスで挑む IoT プロジェクトの現実解 2024.10.12 JAWS FESTA 2024
in Hiroshima
⾃⼰紹介 Genki (⼩笠原 元気) 北海道ガス株式会社(2017〜) ・Job, Role フロントエンド・バックエンドエンジニア 開発チームのリードエンジニア 趣味︓旅⾏・筋トレ
最近興味があること︓Engineering Manager @geivk 2 Copyright Hokkaido Gas Co.,Ltd. All rights reserved.
IoT と Serverless
4 Agenda 会社 / プロジェクト(Mys3︓ミース)概要 課題解決︓サービスローンチに挑む 課題解決︓お客さま課題・ビジネス要件の現実解 課題解決︓サービスローンチ後の機能要求 まとめ
5 Agenda 会社 / プロジェクト(Mys3︓ミース)概要 課題解決︓サービスローンチに挑む 課題解決︓お客さま課題・ビジネス要件の現実解 課題解決︓サービスローンチ後の機能要求 まとめ
北海道ガス株式会社 主要事業内容 本社所在地 従業員数 沿⾰ 1911年 設⽴ ガス事業 電気供給事業 ガス機器販売
851名 札幌市東区北7条東2丁⽬1-1 売上⾼ 1,738億円(連結) 2024年3⽉末時点 お客さま 件数 ガス︓604,329件 電⼒︓254,956件 会社概要 6 Copyright Hokkaido Gas Co.,Ltd. All rights reserved.
業務⽤省エネサービス「Mys3(ミース)」 • 多額の初期投資が必要 • 既設設備の停⽌期間や⼤掛かりな⼯事が必要 • 中⼩規模向けの選択肢(少機能・低価格)が少ない。 Make your smart
solution service Mys(ミース): スウェーデン語で“楽しい・⼼地よい” の意 最新の技術を活⽤した多様なサービスで、お客さまの楽しい・ ⼼地よいを創造する意図を込めている。 業務⽤のお客さまで省エネ設備を導⼊する際の課題 こうしたお客さまの課題を、デジタル技術を⽤いて解決 北ガスグループ 独⾃開発 7 Copyright Hokkaido Gas Co.,Ltd. All rights reserved.
8 「Mys3(ミース)」i-Ch / REM 常時計測・監視、 ⾃動で省エネ制御 セントラル空調機器 当社クラウドシステム 冷温⽔(往) 冷温⽔(還)
アタッチメント型 制御ユニットを設置 計測データの⾒える化 遠隔制御 吸収式冷温⽔機遠隔省エネサービス 当社クラウドシステム 計測データの⾒える化 CO2/温度/湿度 データ CO2・温湿度可視化サービス Copyright Hokkaido Gas Co.,Ltd. All rights reserved.
IoT でサーバレスを使う理由 • 今回の IoT プロジェクトではデータは1分ごとの瞬時データ送信 • サーバーの待機している時間を節約したい → イベントドリブン「◦◦したら・××する」が適している
設定値を書き換えたら、履歴をデータベースに残す エラーが起きたら、Slack に通知をする • 地⽅ガス会社の少⼈数チームで運⽤負荷を下げたい → AWS IoT Core ⾃体がサーバレス さらに、AWS IoT Rule で、後続のさまざまなサービスに繋げやすい 9 Copyright Hokkaido Gas Co.,Ltd. All rights reserved.
10 サービス年表 サービス着想 2018 共同開発フェーズ 2019 2020 2021 2022 2023
2024 自作フェーズ 6⽉ ローンチ PoC 運用 10⽉ 内製開発 スタート 9⽉ 共同開発 スタート 管理者画⾯作成 Grafana導⼊ 年間スケジュール機能 SSO導⼊
11 Agenda 会社 / プロジェクト(Mys3︓ミース)概要 課題解決︓サービスローンチに挑む 課題解決︓お客さま課題・ビジネス要件の現実解 課題解決︓サービスローンチ後の機能要求 まとめ
12 サービス年表 サービス着想 2018 共同開発フェーズ 2019 2020 2021 2022 2023
2024 自作フェーズ 6⽉ ローンチ PoC 運用 10⽉ 内製開発 スタート 9⽉ 共同開発 スタート 管理者画⾯作成 Grafana導⼊ SSO導⼊ ⾃作フェーズにおける 課題と解決策 年間スケジュール機能
PoC︓⾃作段階のアーキテクチャ ◆ PoC • ほぼ SORACOM 完結したアーキテクチャ • AWS 上にデータレイク+パイプラインを構築
• デバイスの設定情報は直接 SSH で接続して書き換える (ここまでデータベース構築なし) PLC modbus アナログ I/O 制御 信号 ゲートウェイ SORACOM AWS Cloud データ 遠隔操作 可視化 クラウド アダプタ IoT Core データレイク SSH 制御盤 13 Copyright Hokkaido Gas Co.,Ltd. All rights reserved.
PoC から量産フェーズ・サービスローンチに向けた課題 ◆ 管理者側の課題 • SSH でデバイス上にフロントエンド を⽴ち上げ、設定値変更をしていた • 設定値をスプレッドシートで管理
• 設定値変更の履歴が残せていなかった • デバイスのファームウェア、 ソフトウェアのアップデートの問題 14 Copyright Hokkaido Gas Co.,Ltd. All rights reserved.
管理者の課題解決︓管理⽤画⾯の作成 ◆ 管理者側の課題(従来の課題) SSH による設定値の⼿動変更 デバイスの設定値管理不⾜ ヒューマンエラー対策 15 ゲートウェイ SSH
SORACOM Napter { “duration”: 60, “mode”: ”auto”, “temp”: 55, ...... } Copyright Hokkaido Gas Co.,Ltd. All rights reserved.
管理者の課題解決︓管理⽤画⾯の作成 ◆ 管理者側の課題(従来の課題) SSH による設定値の⼿動変更 デバイスの設定値管理不⾜ ヒューマンエラー対策 • 王道パターン Amazon
API Gateway + AWS Lambda • AWS Lambda で AWS IoT の API 実⾏ iot:UpdateThingShadow 16 ゲートウェイ { “duration”: 60, “mode”: ”auto”, “temp”: 55, ...... } Amazon API Gateway AWS Lambda IoT Shadow 同期 Copyright Hokkaido Gas Co.,Ltd. All rights reserved.
AWS IoT Core とは︖ • MQQTS(MQQT over TLS: 8883) •
Pub/Subモデル • 「モノ」=Internet of 「Thing」 AWS IoT Coreでできること • 「モノ」の属性 • 証明書の管理 • 監査 etc. 17 デバイス Publish Subscribe topic/device/upload topic/device/ settingUpdate AWS IoT Publish Subscribe IoT Topic Copyright Hokkaido Gas Co.,Ltd. All rights reserved.
IoT Rule • AWS Lambda • Amazon DynamoDB • Amazon
Data Firehose • AWS Simple Queue Service (SQS) • AWS Step Functions etc. Fan-out パターン →IoT Rule でトピックから複数の出⼒可 ◆ Step Functions → AwsCallService ◆ DynamoDB →DynamoDB Streams ◆ SQS → EventBridige Pipes 18 IoT Rule 各サービスに メッセージを転送できる topic/xxx/yyy/zzz Copyright Hokkaido Gas Co.,Ltd. All rights reserved.
設定値変更・履歴を残すためのアーキテクチャ 19 Lambda Function Amazon DynamoDB IoT Topic IoT Rule
IoT Shadow ※全ての Thing で⾏う場合は ワイルドカード ”+” を Rule に設定 $aws/thing/+/shadow/update/documents Lambda Function Publish Publish via iot:UpdateThingShadow Query Amazon API Gateway $aws/thing/[thingName]/shadow/update $aws/thing/[thingName]/shadow/update/documents
OTA(On The Air) アップデートのしくみ ◆課題 ファームウェアアップデート セキュリティパッチ適⽤ • AWS IoT
Jobs + S3 presigned URL Job document に記載されている S3 presigned URL からオブジェクト取得 所定の操作を実施︓ ファームアップデート セキュリティパッチ適⽤など 20 $aws/thing/[thingName]/jobs/notify $aws/thing/[thingName]/jobs/notify-next Job Document { “operation”: “update”, “s3_presinedUrl”: “${aws:iot:s3-presined-url: https://s3.amazonaws.com/[ARN]}” } コンソールから操作 デバイス Subscribe Publish IoT Jobs HTTPS Copyright Hokkaido Gas Co.,Ltd. All rights reserved.
サービスローンチ時のアーキテクチャ ◆ サービスローンチ仕様 • フロントエンドからデバイスの設定情報を書き換えたい • AWS IoT を使って MQQT(S)
の相互通信(Pub/Sub)・即時通信 • API を⽤意しバックエンドで IoT Core へ指令 • ファームウェアの OTA(On The Air)アップデートも実装 アナログ I/O 制御 信号 制御盤 SORACOM AWS Cloud IoT Core SORACOM beam 遠隔指令 MQTT REST API 21 クラウド転送 サービス Copyright Hokkaido Gas Co.,Ltd. All rights reserved.
Appendix: フロントエンドの実装 ◆ ホスティングサーバー AWS Amplify Hosting(DEV) Amazon Cloudfront(ST, PROD)
• AWS Amplify のブランチごとの デプロイ機能を利⽤ 22 Developers feature/xxx bugfix/yyy feature/zzz Hosting feature/xxx bugfix/yyy feature/zzz AWS Amplify Copyright Hokkaido Gas Co.,Ltd. All rights reserved.
Appendix: フロントエンドの実装 ◆ ホスティングサーバー AWS Amplify Hosting(DEV) Amazon Cloudfront(ST, PROD)
• AWS Amplify のブランチごとの デプロイ機能を利⽤ • Amplify.js で SigV4 の簡易実装 23 Vue.js React.js Amplify.js react-query axios (当時) (現在) const sign = Signer.sign( { method: method, url: apiUrl, data: JSON.stringify(data) }, credentials, { region: 'ap-northeast-1', service: 'execute-api', }, ); + + + Copyright Hokkaido Gas Co.,Ltd. All rights reserved.
24 Agenda 会社 / プロジェクト(Mys3︓ミース)概要 課題解決︓サービスローンチに挑む 課題解決︓お客さま課題・ビジネス要件の現実解 課題解決︓サービスローンチ後の機能要求 まとめ
25 サービス年表 サービス着想 2018 共同開発フェーズ 2019 2020 2021 2022 2023
2024 自作フェーズ 6⽉ ローンチ PoC 運用 10⽉ 内製開発 スタート 9⽉ 共同開発 スタート 管理者画⾯作成 Grafana導⼊ SSO導⼊ 共同開発フェーズにおける 課題と解決策 年間スケジュール機能
セルフマネージド Grafana の導⼊ ◆ お客さまの課題 当時︓コロナ禍 冬場の省エネ+CO2の監視(換気) • PoC 環境で可視化画⾯
SaaS を利⽤ • IoT × Grafana =相性がいい ◆ ビジネス上の要件 付帯サービス、安価である (スケールメリットが出るか︖) 26 Amazon Managed Service for Grafana Amazon Elastic Container Service User Editor: $20 Viewer: $5 なし Ops ✅ ❌ Total ? $250 + Ops Copyright Hokkaido Gas Co.,Ltd. All rights reserved.
セルフマネージド Grafana のアーキテクチャ 下記の 3つが必要 • Grafana サーバー • メタデータ
DB • 時系列 DB(データソース) • 当初、データソース InfluxDB(Fargate + EFS)で検討 →運⽤負荷⼤で断念 • Timestream が GA 27 Amazon ECS Cluster AWS Fargate Amazon Aurora (Serverless v1/v2) Amazon EFS AWS Fargate メタデータDB 時系列DB Copyright Hokkaido Gas Co.,Ltd. All rights reserved.
セルフマネージド Grafana のアーキテクチャ 下記の 3つが必要 • Grafana サーバー • メタデータ
DB • 時系列 DB(データソース) • 当初、データソース InfluxDB(Fargate + EFS)で検討 →運⽤負荷⼤で断念 • Timestream が GA 28 Amazon ECS Cluster AWS Fargate Amazon Aurora (Serverless v1/v2) メタデータDB 時系列DB Amazon Timestream Copyright Hokkaido Gas Co.,Ltd. All rights reserved.
Grafana まわりのアーキテクチャ変遷 • Amazon Timestream → クエリが最低 10MB に繰り上げの ため瞬時データの表⽰には向かない
• Amazon DynamoDB を採⽤ • DynamoDB はサードパーティ製で 接続する必要あり → API Gateway + Lambda で サード パーティ製指定のレスポンスに調整 (6MB制限含め実装が⼤変) 29 Amazon ECS Cluster AWS Fargate Amazon DynamoDB 瞬時データDB 時系列DB Amazon Timestream サードパーティ プラグイン プラグイン Copyright Hokkaido Gas Co.,Ltd. All rights reserved.
認証の課題 • ビジネス要件︓お客さま画⾯の作成 ニーズ︓Single Sign On (SSO) • お客さま画⾯と可視化画⾯の2つの サービスに都度もログインが必要
30 Grafana (可視化画⾯) お客さま⽤画⾯ Grafana 認証 フロント認証 共通認証基盤︖ Copyright Hokkaido Gas Co.,Ltd. All rights reserved.
認証の課題 ビジネス上の制約︓安価 • SAML なら使えるため、某認証SaaS, AD なども検討したが⾼い • Amazon Cognito
ユーザープール Grafana: OAuth2.0認証エンドポイント お客さま⽤画⾯︓OIDC を使う • お客さま⽤画⾯の API 認可は Amazon Cognito ID プール → IAM Role • 1回の認証で認証情報を引き継ぐことが できる(SSO) 31 Grafana (可視化画⾯) お客さま⽤画⾯ Grafana 認証 フロント認証 Amazon Cognito ユーザープール OAuth2.0認証 エンドポイントの利⽤ OIDC ログイン ログイン Copyright Hokkaido Gas Co.,Ltd. All rights reserved.
32 Grafana アーキテクチャまとめ Amazon ECS Cluster AWS Fargate Amazon DynamoDB
Amazon Timestream Amazon Aurora (Serverless v1/v2) Application Load Balancer host header routing Private subnet (next ver.) Amazon API Gateway (Private API) AWS Lambda VPC Endpoint Amazon Cognito OAuth2.0 endpoint User
33 Agenda 会社 / プロジェクト(Mys3︓ミース)概要 課題解決︓サービスローンチに挑む 課題解決︓お客さま課題・ビジネス要件の現実解 課題解決︓サービスローンチ後の機能要求 まとめ
34 サービス年表 サービス着想 2018 共同開発フェーズ 2019 2020 2021 2022 2023
2024 自作フェーズ 6⽉ ローンチ PoC 運用 10⽉ 内製開発 スタート 9⽉ 共同開発 スタート 管理者画⾯作成 Grafana導⼊ 年間スケジュール機能 SSO導⼊ 運⽤フェーズにおける 課題と解決策
サービスローンチ後の機能追加 • サービスローンチ後も、お客さまからのフィードバックで機能を実装 • 曜⽇別・時間別のスケジュール運転機能 • 気象情報による天気に連動した運転機能 • 他の機器への拡張性・・・etc. デバイスへの実装は、影響が⼤きい
クラウドにて素早く・柔軟に実装 ⾼速に実装し検証しながら フィードバックをもらう お客さま 開発チーム 35 Copyright Hokkaido Gas Co.,Ltd. All rights reserved.
制御盤 年間スケジュール運転機能の実装 ビジネス要件 • ゲートウェイに1⽇単位の スケジュール機能は IoT Shadow に 実装されていた
• ゲートウェイのソフトウェア開発・ 機能検証などが必要なので⼤変 → Amazon DynamoDB に年間 スケジュールを書き込み、Lambda で 毎⽇スケジュールを書き換え 36 1⽇単位のスケジュール機能あり →週間・⽉間・年間で変えたい Amazon DynamoDB (スケジュールテーブル) IoT Shadow Lambda function Query iot:UpdateThingShadow Copyright Hokkaido Gas Co.,Ltd. All rights reserved.
年間スケジュール運転機能の実装 DynamoDB の年間スケジュールを Lambda Function から IoT Shadow へ 書き込み
→ 正常に書き込まれたかのチェックを AWS Step Functions で実施 ゲートウェイのソフトウェアの書き換え なしに年間スケジュール運転機能を 実装 37 Amazon DynamoDB (スケジュールテーブル) IoT Shadow Lambda function Third-party HTTP API Lambda function iot:UpdateThingShadow Query iot:GetThingShadow Success/Failure AWS Step Functions Choice 5回まで チェック Copyright Hokkaido Gas Co.,Ltd. All rights reserved.
38 Agenda 会社 / プロジェクト(Mys3︓ミース)概要 課題解決︓サービスローンチに挑む 課題解決︓お客さま課題・ビジネス要件の現実解 課題解決︓サービスローンチ後の機能要求 まとめ
まとめ • IoT プロジェクトの各フェーズでビジネス要件を鑑みて、 お客さまの課題解決のために AWS のサーバレスサービスの選択をしてきた • お客さまへの可視化画⾯提供に OSS
の Grafana を採⽤ →ビジネス要件から、マネージドではなくあえてセルフホストすることを選択 • データベースにおいても⽬的に応じて Amazon Aurora / Amazon DynamoDB / Amazon Timestream をそれぞれ採⽤した • ローンチ後の機能追加では、AWS Lambda + Amazon DynamoDB + AWS Step Functionsを利⽤することでデバイスへの影響を最⼩化、素早く機能実装 することができた 39 Copyright Hokkaido Gas Co.,Ltd. All rights reserved.
Thank you! 40