グランピング × キャンプ場マップ — Maptiler × AWS サーバレス地理データ基盤
全国の施設地理データを Next.js (Static Export) + S3 + CloudFront (OAC) で配信、DynamoDB に施設マスタを格納する 構成計画です。EventBridge から月 1 で起動する Lambda が外部 API を取り込み、URL 死活監視 Lambda が 404/500 検知時に SES でアラート。地図 UI は Maptiler API、Phase 2 で AWS WAF を追加予定。子育てマップと Terraform モジュール 共通化を想定しています。
注: 現在は構想決定 + 立ち上げ準備の段階で、本番ドメインはまだ取得していません。
AWS 構成図と実行計画は ChatGPT 共同レビューを経て確定済み(Yes, with Caution 判定)。
サマリ
| プロジェクト | グランピング × キャンプ場マップ(仮) |
|---|---|
| ステータス | 構想決定、立ち上げ準備中(ドメイン未取得) |
| ドメイン候補 | glamping-map.jp / glamp-camp.com / glamping-japan.com / camp-map.jp / glcamp.jp |
| 月額運用費 | 1,000 〜 10,000 円(無風時はもっと低め、施設データ更新頻度で変動) |
| 構成方針 | Next.js (Static Export) + S3 + CloudFront + DynamoDB + Lambda + Maptiler API |
| 共通化 | 子育てマップと Terraform モジュールを共有、同一 AWS アカウント、タグでプロジェクト分離 |
全体アーキテクチャ
構成図は drawio (AWS 公式アイコン v2026 系) で作成しています。下のビューアは .drawio ファイルを
直接レンダリングしています。zoom / pan / 編集ボタンが使えます。
A. 全体アーキテクチャ(計画)
- 配信レイヤー: Route53 (Hosted Zone) + ACM (us-east-1) + CloudFront (HTTP/3、価格クラス:日本+一部アジア) + S3 (静的サイト + 画像オリジン、Public Access Block + OAC)
- データレイヤー: DynamoDB (オンデマンド、PK:
施設タイプ#都道府県/ SK:施設ID/ GSI1: 緯度経度クラスタ、PITR 有効) - データ取込: EventBridge (月 1 cron) + Lambda (楽天トラベル API 取込 / URL 死活監視) + Secrets Manager (API キー保管)
- 地図 UI: Maptiler API(外部・無料枠から開始)+ Next.js コンポーネント (Leaflet or MapLibre GL JS)
- 問い合わせ: API Gateway + Lambda (problem-form 受付) + SES (管理者通知)
- 監視: CloudWatch Logs / Alarms + SNS (コスト・エラー通知)
- セキュリティ (Phase 2): AWS WAF Managed Rules(アクセス急増時に追加)
B. データ取込パイプライン
- EventBridge が月 1 回 cron で発火
- Lambda (ingest) が楽天トラベル API を叩いて施設マスタを取得 → DynamoDB に upsert
- Lambda (monitor) が各施設の URL 死活を HTTP HEAD で確認、404/500 検知時は SES でアラート
- GitHub Actions が新規施設追加時に DDB を読み出し →
next buildで SSG 再生成 → S3 同期
手動メンテはレッドフラグ。月 1 回の Lambda 実行で完結する設計を厳格に守る。
採用判断のポイント
| 項目 | 採用 | 理由 |
|---|---|---|
| 静的化 | Next.js Static Export | SSR / ISR は使わない。CloudFront キャッシュで応答完結、コスト最小化 |
| 地図 | Maptiler API(外部) | Mapbox より安い、無料枠あり、自前タイル運用は維持コスト過大 |
| データ | DynamoDB オンデマンド | 初期はオンデマンドで様子見、安定したらプロビジョン課金へ切替検討 |
| 共通化 | 子育てマップと Terraform モジュール共有 | 同一 AWS アカウントでタグ分離、運用負荷集約 |
| 監視 | 段階導入 | Phase 0〜1 は最小、Phase 2 で WAF + 監視拡張 |
これからやる予定
- ドメイン取得(候補比較で 1 つに絞り込み)
- Phase 0: 構想固め + ChatGPT 検証(実施済)
- Phase 1: MVP 構築(地図 UI + 主要 50 施設のデータ)
- Phase 2: 全国カバー + WAF / 監視拡張 + SEO 育成