実装詳細とアーキテクチャ要件
Role Bが担当する「バックエンド&Webexモジュール」は、エッジから送られてくる大量のデータを安全かつ低コストで処理・保存し、外部サービス(Webex)との連携基盤を構築する役割を担います。「スロットリングによるデータ欠損」や「不適切なクエリによるクラウド破産(青天井課金)」を防ぐための堅牢な設計が求められます。
目的: エッジから送信されるMQTTメッセージを永続化する。
【重要】技術的課題と根本解決:
プロビジョニングモード(1WCU固定)で運用するため、バーストトラフィック時に書き込みスロットリングが発生しデータが欠損するリスクがあります。必ずIoT Coreルールの「エラーアクション」を設定し、失敗したメッセージをSQS(Dead Letter Queue)に逃がすか、CloudWatch Logsに記録するフェイルセーフ機構を実装してください。
目的: 時系列データを効率的に保存・検索する。
device_id、ソートキーを timestamp に設定してテーブルを作成。
【重要】技術的課題と根本解決:
古いデータが無限に溜まるとストレージコストが増加します。必ずDynamoDBの「TTL(Time to Live)」機能を有効にし、一定期間(例: 30日)経過したレコードが自動的に物理削除される設計にして、コストを最小限に抑えてください。
目的: Role C(フロントエンド)が過去のハザードデータを取得できるようにする。
【重要】技術的課題と根本解決:
DynamoDBの検索時に全件スキャン(Scan)を行うとRCUを大量消費しシステムが停止します。必ずパーティションキーを指定した「Query」操作を実装し、読み込み負荷を最小化してください。
目的: Role A(EC2)が画像を送信するための通知先と認証情報を用意する。
【重要】技術的課題と根本解決:
アクセストークンをソースコードにハードコードするとセキュリティインシデントになります。AWS Systems Manager Parameter StoreやSecrets Managerを利用し、環境変数として安全にRole A(EC2)へ渡す仕組みを構築してください。