Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
サーバレスで挑む IoT プロジェクトの現実解 / Real solutions for th...
Search
Genki Ogasawara
October 11, 2024
Technology
1k
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
350
クラウドのスケーリングの力で5時間 かかるバッチジョブを10分に短縮する / Reduce the batch job time by a 36th using the power of scaling in the public cloud
genkiogasawara
2
89
IT知識ゼロからのスタートで、 事業部における内製開発をどうやって 推進してきたか?/How did we promote in-house development by starting from scratch?
genkiogasawara
1
640
クラウドネイティブな省エネサービスの内製開発で、BizDevOpsを実現する / Achieving BizDevOps in in-house development of cloud-native energy-saving services
genkiogasawara
2
1.7k
エンジニアゼロの組織から内製開発の DX をどう実現したのか / How did we achieve DX in in-house development in an organization with zero engineers?
genkiogasawara
8
4.6k
入門 AWS Amplify Gen2 / Introduction to AWS Amplify Gen2
genkiogasawara
1
1.3k
ソフトウェア開発の生産性と信頼性向上に取り組んだ結果、どうなった?/What has changed as a result of efforts to improve software development productivity and reliability?
genkiogasawara
0
220
「魔の川」「死の谷」をクラウド ネイティブなチーム作りで越境する / Crossing the "Devil River" and "Death Valley" by building cloud-native teams
genkiogasawara
2
960
Amazon CodeCatalyst で実現!開発環境とCI/CDパイプライン
genkiogasawara
0
9.1k
Other Decks in Technology
See All in Technology
負債のメタファと2026年 / Debt Metaphor in Agentic Engineering Age 202609 Edition
twada
PRO
10
4.8k
AgentCore Runtime上にAgentic Coding基盤を構築・展開する際の設計ポイントと限界点 / Design considerations and limitations when building an agentic coding platform on AgentCore Runtime
har1101
5
600
Slack上でインフラをトラブルシュートする! Agentic Platform Engineeringの第一歩
teru0x1
5
1.8k
白金鉱業Meetup Vol.25 アウトカムが二値のデータに対するCausal Impact
brainpadpr
0
270
2026-09-08 そのJavaモダナイゼーション、AIに丸投げで大丈夫?IBM Bobで変わる品質と効率
yutanonaka
1
120
.NET WebAssemblyで実現するクライアントサイドAI推論:NuGetからViteまで、2つのエコシステムを繋ぐビルド戦略
yamachu
0
390
AI時代の「技術的負債」の変質ー概念の終焉と再解釈、エージェントと共に向かう先
nwiizo
1
3.1k
品質と信頼性を地続きにする
grimoh
2
870
AIに任せた品質は、誰が見立てるのか - AI時代のテストマネジメント
nakanao
3
2.7k
今話題のAI「Jev」って何? 宇宙最速で学ぶ会
minorun365
PRO
30
18k
Deployment の 先にある AI Agent 基盤 - kagent vNext、Agent Substrate、Hermes から読み解く Agent Runtime の現在地 / k8s-matsuri-2-ai-agent-platform-amsy810
masayaaoyama
4
690
Railsのように考える: See through the Master
snoozer05
PRO
5
1.2k
Featured
See All Featured
Fashionably flexible responsive web design (full day workshop)
malarkey
409
67k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
500
Paper Plane
katiecoart
PRO
4
53k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
57k
Large-scale JavaScript Application Architecture
addyosmani
515
110k
Optimising Largest Contentful Paint
csswizardry
37
4k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
510
The agentic SEO stack - context over prompts
schlessera
0
940
Crafting Experiences
bethany
1
350
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
240
The Spectacular Lies of Maps
axbom
PRO
1
1k
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2.2k
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