Role B: バックエンド&Webexモジュール

実装詳細とアーキテクチャ要件

トップページへ戻る

Role Bが担当する「バックエンド&Webexモジュール」は、エッジから送られてくる大量のデータを安全かつ低コストで処理・保存し、外部サービス(Webex)との連携基盤を構築する役割を担います。「スロットリングによるデータ欠損」や「不適切なクエリによるクラウド破産(青天井課金)」を防ぐための堅牢な設計が求められます。

1. 開発に必要な環境・情報(準備物)

  • インフラ: AWSアカウント(IoT Core, DynamoDB, IAM, API Gateway, Lambda)
  • API情報: Webex Developer Portalアカウント
  • 連携情報 (Role Aから受領): MQTTで送信されるJSONデータのスキーマ

2. 実装手順と技術的課題の根本解決アプローチ

Step 1: IoT CoreルールとDynamoDB連携

目的: エッジから送信されるMQTTメッセージを永続化する。

  1. IoT Coreのメッセージルーティングルールを作成し、特定トピックのデータをDynamoDBにINSERTするアクションを設定。

【重要】技術的課題と根本解決:
プロビジョニングモード(1WCU固定)で運用するため、バーストトラフィック時に書き込みスロットリングが発生しデータが欠損するリスクがあります。必ずIoT Coreルールの「エラーアクション」を設定し、失敗したメッセージをSQS(Dead Letter Queue)に逃がすか、CloudWatch Logsに記録するフェイルセーフ機構を実装してください。

Step 2: DynamoDBのテーブル設計

目的: 時系列データを効率的に保存・検索する。

  1. パーティションキーを device_id、ソートキーを timestamp に設定してテーブルを作成。

【重要】技術的課題と根本解決:
古いデータが無限に溜まるとストレージコストが増加します。必ずDynamoDBの「TTL(Time to Live)」機能を有効にし、一定期間(例: 30日)経過したレコードが自動的に物理削除される設計にして、コストを最小限に抑えてください。

Step 3: 履歴データ取得用APIの構築

目的: Role C(フロントエンド)が過去のハザードデータを取得できるようにする。

  1. API Gatewayを作成し、Lambda関数をトリガー。Lambda内でDynamoDBを検索してJSONを返す。

【重要】技術的課題と根本解決:
DynamoDBの検索時に全件スキャン(Scan)を行うとRCUを大量消費しシステムが停止します。必ずパーティションキーを指定した「Query」操作を実装し、読み込み負荷を最小化してください。

Step 4: Webex Botのセットアップと権限管理

目的: Role A(EC2)が画像を送信するための通知先と認証情報を用意する。

  1. Webex Developer PortalでBotを作成し、テスト用スペースに招待してRoom IDを取得。

【重要】技術的課題と根本解決:
アクセストークンをソースコードにハードコードするとセキュリティインシデントになります。AWS Systems Manager Parameter StoreやSecrets Managerを利用し、環境変数として安全にRole A(EC2)へ渡す仕組みを構築してください。

3. 他ロールとの連携ポイント(アウトプット)

  • Role Aへ: AWS IoT Coreのエンドポイント、デバイス証明書、Webex BotのトークンとRoom IDを提供します。
  • Role Cへ: 履歴取得APIのエンドポイントURLを提供し、API Gateway側でCORS(Cross-Origin Resource Sharing)の許可設定を行います。