Slide 1

Slide 1 text

北海道ガス株式会社 小笠原 元気 サーバレスで挑む IoT プロジェクトの現実解 2024.10.12 JAWS FESTA 2024 in Hiroshima

Slide 2

Slide 2 text

⾃⼰紹介 Genki (⼩笠原 元気) 北海道ガス株式会社(2017〜) ・Job, Role フロントエンド・バックエンドエンジニア 開発チームのリードエンジニア 趣味︓旅⾏・筋トレ 最近興味があること︓Engineering Manager @geivk 2 Copyright Hokkaido Gas Co.,Ltd. All rights reserved.

Slide 3

Slide 3 text

IoT と Serverless

Slide 4

Slide 4 text

4 Agenda 会社 / プロジェクト(Mys3︓ミース)概要 課題解決︓サービスローンチに挑む 課題解決︓お客さま課題・ビジネス要件の現実解 課題解決︓サービスローンチ後の機能要求 まとめ

Slide 5

Slide 5 text

5 Agenda 会社 / プロジェクト(Mys3︓ミース)概要 課題解決︓サービスローンチに挑む 課題解決︓お客さま課題・ビジネス要件の現実解 課題解決︓サービスローンチ後の機能要求 まとめ

Slide 6

Slide 6 text

北海道ガス株式会社 主要事業内容 本社所在地 従業員数 沿⾰ 1911年 設⽴ ガス事業 電気供給事業 ガス機器販売 851名 札幌市東区北7条東2丁⽬1-1 売上⾼ 1,738億円(連結) 2024年3⽉末時点 お客さま 件数 ガス︓604,329件 電⼒︓254,956件 会社概要 6 Copyright Hokkaido Gas Co.,Ltd. All rights reserved.

Slide 7

Slide 7 text

業務⽤省エネサービス「Mys3(ミース)」 • 多額の初期投資が必要 • 既設設備の停⽌期間や⼤掛かりな⼯事が必要 • 中⼩規模向けの選択肢(少機能・低価格)が少ない。 Make your smart solution service Mys(ミース): スウェーデン語で“楽しい・⼼地よい” の意 最新の技術を活⽤した多様なサービスで、お客さまの楽しい・ ⼼地よいを創造する意図を込めている。 業務⽤のお客さまで省エネ設備を導⼊する際の課題 こうしたお客さまの課題を、デジタル技術を⽤いて解決 北ガスグループ 独⾃開発 7 Copyright Hokkaido Gas Co.,Ltd. All rights reserved.

Slide 8

Slide 8 text

8 「Mys3(ミース)」i-Ch / REM 常時計測・監視、 ⾃動で省エネ制御 セントラル空調機器 当社クラウドシステム 冷温⽔(往) 冷温⽔(還) アタッチメント型 制御ユニットを設置 計測データの⾒える化 遠隔制御 吸収式冷温⽔機遠隔省エネサービス 当社クラウドシステム 計測データの⾒える化 CO2/温度/湿度 データ CO2・温湿度可視化サービス Copyright Hokkaido Gas Co.,Ltd. All rights reserved.

Slide 9

Slide 9 text

IoT でサーバレスを使う理由 ● 今回の IoT プロジェクトではデータは1分ごとの瞬時データ送信 ● サーバーの待機している時間を節約したい → イベントドリブン「○○したら・××する」が適している 設定値を書き換えたら、履歴をデータベースに残す エラーが起きたら、Slack に通知をする ● 地⽅ガス会社の少⼈数チームで運⽤負荷を下げたい → AWS IoT Core ⾃体がサーバレス さらに、AWS IoT Rule で、後続のさまざまなサービスに繋げやすい 9 Copyright Hokkaido Gas Co.,Ltd. All rights reserved.

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

11 Agenda 会社 / プロジェクト(Mys3︓ミース)概要 課題解決︓サービスローンチに挑む 課題解決︓お客さま課題・ビジネス要件の現実解 課題解決︓サービスローンチ後の機能要求 まとめ

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

PoC︓⾃作段階のアーキテクチャ ◆ PoC ● ほぼ SORACOM 完結したアーキテクチャ ● AWS 上にデータレイク+パイプラインを構築 ● デバイスの設定情報は直接 SSH で接続して書き換える (ここまでデータベース構築なし) PLC modbus アナログ I/O 制御 信号 ゲートウェイ SORACOM AWS Cloud データ 遠隔操作 可視化 クラウド アダプタ IoT Core データレイク SSH 制御盤 13 Copyright Hokkaido Gas Co.,Ltd. All rights reserved.

Slide 14

Slide 14 text

PoC から量産フェーズ・サービスローンチに向けた課題 ◆ 管理者側の課題 ● SSH でデバイス上にフロントエンド を⽴ち上げ、設定値変更をしていた ● 設定値をスプレッドシートで管理 ● 設定値変更の履歴が残せていなかった ● デバイスのファームウェア、 ソフトウェアのアップデートの問題 14 Copyright Hokkaido Gas Co.,Ltd. All rights reserved.

Slide 15

Slide 15 text

管理者の課題解決︓管理⽤画⾯の作成 ◆ 管理者側の課題(従来の課題) SSH による設定値の⼿動変更 デバイスの設定値管理不⾜ ヒューマンエラー対策 15 ゲートウェイ SSH SORACOM Napter { “duration”: 60, “mode”: ”auto”, “temp”: 55, ...... } Copyright Hokkaido Gas Co.,Ltd. All rights reserved.

Slide 16

Slide 16 text

管理者の課題解決︓管理⽤画⾯の作成 ◆ 管理者側の課題(従来の課題) 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.

Slide 17

Slide 17 text

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.

Slide 18

Slide 18 text

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.

Slide 19

Slide 19 text

設定値変更・履歴を残すためのアーキテクチャ 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

Slide 20

Slide 20 text

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.

Slide 21

Slide 21 text

サービスローンチ時のアーキテクチャ ◆ サービスローンチ仕様 ● フロントエンドからデバイスの設定情報を書き換えたい ● 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.

Slide 22

Slide 22 text

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.

Slide 23

Slide 23 text

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.

Slide 24

Slide 24 text

24 Agenda 会社 / プロジェクト(Mys3︓ミース)概要 課題解決︓サービスローンチに挑む 課題解決︓お客さま課題・ビジネス要件の現実解 課題解決︓サービスローンチ後の機能要求 まとめ

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

セルフマネージド 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.

Slide 27

Slide 27 text

セルフマネージド 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.

Slide 28

Slide 28 text

セルフマネージド 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.

Slide 29

Slide 29 text

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.

Slide 30

Slide 30 text

認証の課題 ● ビジネス要件︓お客さま画⾯の作成 ニーズ︓Single Sign On (SSO) ● お客さま画⾯と可視化画⾯の2つの サービスに都度もログインが必要 30 Grafana (可視化画⾯) お客さま⽤画⾯ Grafana 認証 フロント認証 共通認証基盤︖ Copyright Hokkaido Gas Co.,Ltd. All rights reserved.

Slide 31

Slide 31 text

認証の課題 ビジネス上の制約︓安価 ● 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.

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

33 Agenda 会社 / プロジェクト(Mys3︓ミース)概要 課題解決︓サービスローンチに挑む 課題解決︓お客さま課題・ビジネス要件の現実解 課題解決︓サービスローンチ後の機能要求 まとめ

Slide 34

Slide 34 text

34 サービス年表 サービス着想 2018 共同開発フェーズ 2019 2020 2021 2022 2023 2024 自作フェーズ 6⽉ ローンチ PoC 運用 10⽉ 内製開発 スタート 9⽉ 共同開発 スタート 管理者画⾯作成 Grafana導⼊ 年間スケジュール機能 SSO導⼊ 運⽤フェーズにおける 課題と解決策

Slide 35

Slide 35 text

サービスローンチ後の機能追加 ● サービスローンチ後も、お客さまからのフィードバックで機能を実装 ● 曜⽇別・時間別のスケジュール運転機能 ● 気象情報による天気に連動した運転機能 ● 他の機器への拡張性・・・etc. デバイスへの実装は、影響が⼤きい クラウドにて素早く・柔軟に実装 ⾼速に実装し検証しながら フィードバックをもらう お客さま 開発チーム 35 Copyright Hokkaido Gas Co.,Ltd. All rights reserved.

Slide 36

Slide 36 text

制御盤 年間スケジュール運転機能の実装 ビジネス要件 ● ゲートウェイに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.

Slide 37

Slide 37 text

年間スケジュール運転機能の実装 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.

Slide 38

Slide 38 text

38 Agenda 会社 / プロジェクト(Mys3︓ミース)概要 課題解決︓サービスローンチに挑む 課題解決︓お客さま課題・ビジネス要件の現実解 課題解決︓サービスローンチ後の機能要求 まとめ

Slide 39

Slide 39 text

まとめ ● 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.

Slide 40

Slide 40 text

Thank you! 40