Upgrade to Pro — share decks privately, control downloads, hide ads and more …

サーバレスで挑む IoT プロジェクトの現実解 / Real solutions for th...

サーバレスで挑む IoT プロジェクトの現実解 / Real solutions for the IoT project using serverless service

Genki Ogasawara

October 11, 2024
Tweet

More Decks by Genki Ogasawara

Other Decks in Technology

Transcript

  1. 北海道ガス株式会社 主要事業内容 本社所在地 従業員数 沿⾰ 1911年 設⽴ ガス事業 電気供給事業 ガス機器販売

    851名 札幌市東区北7条東2丁⽬1-1 売上⾼ 1,738億円(連結) 2024年3⽉末時点 お客さま 件数 ガス︓604,329件 電⼒︓254,956件 会社概要 6 Copyright Hokkaido Gas Co.,Ltd. All rights reserved.
  2. 業務⽤省エネサービス「Mys3(ミース)」 • 多額の初期投資が必要 • 既設設備の停⽌期間や⼤掛かりな⼯事が必要 • 中⼩規模向けの選択肢(少機能・低価格)が少ない。 Make your smart

    solution service Mys(ミース): スウェーデン語で“楽しい・⼼地よい” の意 最新の技術を活⽤した多様なサービスで、お客さまの楽しい・ ⼼地よいを創造する意図を込めている。 業務⽤のお客さまで省エネ設備を導⼊する際の課題 こうしたお客さまの課題を、デジタル技術を⽤いて解決 北ガスグループ 独⾃開発 7 Copyright Hokkaido Gas Co.,Ltd. All rights reserved.
  3. 8 「Mys3(ミース)」i-Ch / REM 常時計測・監視、 ⾃動で省エネ制御 セントラル空調機器 当社クラウドシステム 冷温⽔(往) 冷温⽔(還)

    アタッチメント型 制御ユニットを設置 計測データの⾒える化 遠隔制御 吸収式冷温⽔機遠隔省エネサービス 当社クラウドシステム 計測データの⾒える化 CO2/温度/湿度 データ CO2・温湿度可視化サービス Copyright Hokkaido Gas Co.,Ltd. All rights reserved.
  4. IoT でサーバレスを使う理由 • 今回の IoT プロジェクトではデータは1分ごとの瞬時データ送信 • サーバーの待機している時間を節約したい → イベントドリブン「◦◦したら・××する」が適している

    設定値を書き換えたら、履歴をデータベースに残す エラーが起きたら、Slack に通知をする • 地⽅ガス会社の少⼈数チームで運⽤負荷を下げたい → AWS IoT Core ⾃体がサーバレス さらに、AWS IoT Rule で、後続のさまざまなサービスに繋げやすい 9 Copyright Hokkaido Gas Co.,Ltd. All rights reserved.
  5. 10 サービス年表 サービス着想 2018 共同開発フェーズ 2019 2020 2021 2022 2023

    2024 自作フェーズ 6⽉ ローンチ PoC 運用 10⽉ 内製開発 スタート 9⽉ 共同開発 スタート 管理者画⾯作成 Grafana導⼊ 年間スケジュール機能 SSO導⼊
  6. 12 サービス年表 サービス着想 2018 共同開発フェーズ 2019 2020 2021 2022 2023

    2024 自作フェーズ 6⽉ ローンチ PoC 運用 10⽉ 内製開発 スタート 9⽉ 共同開発 スタート 管理者画⾯作成 Grafana導⼊ SSO導⼊ ⾃作フェーズにおける 課題と解決策 年間スケジュール機能
  7. PoC︓⾃作段階のアーキテクチャ ◆ PoC • ほぼ SORACOM 完結したアーキテクチャ • AWS 上にデータレイク+パイプラインを構築

    • デバイスの設定情報は直接 SSH で接続して書き換える (ここまでデータベース構築なし) PLC modbus アナログ I/O 制御 信号 ゲートウェイ SORACOM AWS Cloud データ 遠隔操作 可視化 クラウド アダプタ IoT Core データレイク SSH 制御盤 13 Copyright Hokkaido Gas Co.,Ltd. All rights reserved.
  8. PoC から量産フェーズ・サービスローンチに向けた課題 ◆ 管理者側の課題 • SSH でデバイス上にフロントエンド を⽴ち上げ、設定値変更をしていた • 設定値をスプレッドシートで管理

    • 設定値変更の履歴が残せていなかった • デバイスのファームウェア、 ソフトウェアのアップデートの問題 14 Copyright Hokkaido Gas Co.,Ltd. All rights reserved.
  9. 管理者の課題解決︓管理⽤画⾯の作成 ◆ 管理者側の課題(従来の課題) 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.
  10. 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.
  11. 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.
  12. 設定値変更・履歴を残すためのアーキテクチャ 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
  13. 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.
  14. サービスローンチ時のアーキテクチャ ◆ サービスローンチ仕様 • フロントエンドからデバイスの設定情報を書き換えたい • 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.
  15. 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.
  16. 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.
  17. 25 サービス年表 サービス着想 2018 共同開発フェーズ 2019 2020 2021 2022 2023

    2024 自作フェーズ 6⽉ ローンチ PoC 運用 10⽉ 内製開発 スタート 9⽉ 共同開発 スタート 管理者画⾯作成 Grafana導⼊ SSO導⼊ 共同開発フェーズにおける 課題と解決策 年間スケジュール機能
  18. セルフマネージド 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.
  19. セルフマネージド 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.
  20. セルフマネージド 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.
  21. 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.
  22. 認証の課題 • ビジネス要件︓お客さま画⾯の作成 ニーズ︓Single Sign On (SSO) • お客さま画⾯と可視化画⾯の2つの サービスに都度もログインが必要

    30 Grafana (可視化画⾯) お客さま⽤画⾯ Grafana 認証 フロント認証 共通認証基盤︖ Copyright Hokkaido Gas Co.,Ltd. All rights reserved.
  23. 認証の課題 ビジネス上の制約︓安価 • 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.
  24. 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
  25. 34 サービス年表 サービス着想 2018 共同開発フェーズ 2019 2020 2021 2022 2023

    2024 自作フェーズ 6⽉ ローンチ PoC 運用 10⽉ 内製開発 スタート 9⽉ 共同開発 スタート 管理者画⾯作成 Grafana導⼊ 年間スケジュール機能 SSO導⼊ 運⽤フェーズにおける 課題と解決策
  26. 制御盤 年間スケジュール運転機能の実装 ビジネス要件 • ゲートウェイに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.
  27. 年間スケジュール運転機能の実装 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.
  28. まとめ • 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.