System Architecture & Data Flow
flowchart TD
subgraph SRC ["データソース"]
A1["神奈川県 雨量情報 Web"]
A2["ESP32-C3U センサー (気温・湿度・気圧)"]
end
subgraph AWS ["AWS クラウド"]
B1["Lambda: Scraper (10分毎)"]
B2["IoT Core (MQTT)"]
B3["Lambda: IotReceiver"]
C1[("DynamoDB: WeatherTable")]
C2[("S3: Archive Bucket")]
D1["Lambda: Archiver (深夜1時)"]
E1["HTTP API Gateway"]
E2["Lambda: ApiFunction"]
F1["S3: Frontend Bucket"]
F2["CloudFront"]
end
subgraph UA ["ユーザー"]
U1(["Web ブラウザ"])
end
A1 -->|スクレイピング| B1
A2 -->|MQTT Publish| B2
B2 -->|IoT Rule| B3
B1 -->|雨量書き込み| C1
B3 -->|センサー書き込み| C1
C1 -.->|日次| D1
D1 -->|CSV/JSON| C2
E1 --> E2
E2 -->|直近データ| C1
E2 -->|過去ログ| C2
F1 -.->|OAC| F2
F2 -->|HTTPS配信| U1
U1 -->|API呼出| E1
ScraperFunction: 10分間隔で EventBridge (CloudWatch Events) によって実行され、県公式の観測ページから最新の降水データをスクレイピングして DynamoDB に保存します。
IoT Core & IotReceiverFunction: ESP32センサーからの測定値 (気温・湿度・気圧) を MQTTプロトコル でリアルタイムに受信し、AWS IoT Rule を経由して Lambda を呼び出し保存します。
DynamoDB (WeatherTable): 直近および過去24時間分の雨量と環境センサーデータを高速に読み書きするためのプライマリストレージとして機能します。
S3 (ArchiveBucket): ArchiverFunction により、前日分のデータが毎日深夜1時に DynamoDB から抽出され、長期保存用アーカイブとして日別の JSON または CSV 形式で保存されます。
ApiFunction & HTTP API Gateway: SPAからのリクエストに対し、DynamoDBの最新データや、S3に格納された過去ログのリスト読み出しを提供します。
CloudFront & S3 Frontend: HTML, CSS, JavaScript (Chart.js) と画像群を含む静的なアセットを、認証付きOAC設定で安全かつグローバル・エッジで高速に配信します。