サマリ
| プロジェクト | glamping-map.com |
| ステータス | 公開稼働中 |
| 掲載施設数 | 約 4,800 件(グランピング 約 2,200 / キャンプ場 約 2,000 / 公的データ補完含む) |
| カバレッジ | 47 都道府県、特集記事 28 本(ガイド系 7 / ランキング系 21) |
| 静的ページ数 | 約 4,170(施設詳細 + 都道府県 + 記事 + 索引) |
| 月額運用費 | $2 〜 $5(約 ¥300 〜 ¥800)+ ドメイン更新料 ¥1,800/年 |
| 構成方針 | Next.js 15 (App Router, Static Export) + S3 + CloudFront (OAC) + DynamoDB + Lambda + Terraform フル IaC |
A. AWS 構成
| カテゴリ | AWS サービス | 役割 |
| 配信 | CloudFront + S3 | 静的サイト配信(OAC で S3 直接アクセス遮断) |
| ドメイン / TLS | Route 53 + ACM | glamping-map.com + TLS 証明書 |
| 問合せフォーム | API Gateway (HTTP API) + Lambda + SES | 受信 → メール通知 |
| データ取込 | EventBridge + Lambda + DynamoDB | 月次バッチで Rakuten / OSM から取得・upsert |
| ヘルスチェック | EventBridge + Lambda + CloudWatch | 月次でサイト疎通確認 |
| シークレット | Secrets Manager | API キー・通知メールアドレス保管 |
| 認可 | IAM (GitHub OIDC) | CI から短命クレデンシャルでデプロイ |
| 観測 | CloudWatch Logs / Alarms | 全 Lambda + API Gateway のログ集約 |
B. データフロー
公開サイト (read path)
- ユーザー → Route 53 (DNS) → CloudFront (CDN)
- CloudFront → S3 (HTML/CSS/JS/画像 = Next.js Static Export 出力物)
問合せフォーム (write path)
- ブラウザ → CloudFront 配下の
/api/contact → API Gateway (HTTP API)
- API Gateway → Lambda (
contact) → Secrets Manager (送信先取得)
- Lambda → SES → 通知メール
データ取込 + デプロイ
- EventBridge (月次 cron) → Lambda (
ingest)
- Lambda → Rakuten Travel API + OpenStreetMap Overpass API
- Lambda → DynamoDB に upsert(約 4,800 items)
- GitHub Actions (push to
main) → DynamoDB を scan → Next.js build
aws s3 sync out/ s3://... → CloudFront キャッシュ無効化
C. 技術スタック
| レイヤ | 技術 |
| フロントエンド | Next.js 15 (App Router, Static Export), TypeScript, Tailwind CSS |
| 地図 UI | Leaflet + OpenStreetMap タイル |
| バックエンド | Node.js 20 + AWS SDK v3 (Lambda, DynamoDB, SES, Secrets Manager) |
| インフラ | Terraform(modules: site / lambda-stack / iam-deploy / monitor) |
| CI / CD | GitHub Actions(OIDC で AWS にデプロイ、長期 secret なし) |
| 品質 | Biome (lint + format), tsc (型検査) |
| 観測 | GA4 + Google Search Console + CloudWatch |
D. データソース
| ソース | ライセンス / 利用条件 | 用途 |
| Rakuten Travel OpenAPI v2 | 楽天 Web Service 利用規約(API キー要登録) | 施設名・住所・写真・料金・レビュー |
| OpenStreetMap (Overpass API) | © OpenStreetMap contributors, ODbL | 公的キャンプ場・座標補完 |
| Wikidata | CC0 | 施設説明補完 |
帰属表記はサイト内 /about/ に明記。
E. 月額運用費(実績)
| AWS サービス | 内訳 | 月額目安 |
| Route 53 | Hosted zone × 1 | $0.50 |
| S3 | 約 150 MB 標準ストレージ + リクエスト | $0.10 〜 $0.30 |
| CloudFront | 配信(Asia エッジ、低トラフィック) | $0.50 〜 $2.00 |
| Lambda | 3 関数 × 月数十回実行 | $0.00(無料枠内) |
| API Gateway | HTTP API 月数件 | $0.00(無料枠内) |
| DynamoDB | On-Demand, 約 4,800 items, 月次書込中心 | $0.10 〜 $0.50 |
| EventBridge | スケジュールルール × 2 | $0.00(無料枠内) |
| Secrets Manager | secret × 2 | $0.80 |
| CloudWatch Logs | retention 14 日, 軽負荷 | $0.10 〜 $0.50 |
| ACM | 証明書(CloudFront 用) | $0.00(無料) |
| 合計 | | $2 〜 $5 / 月(約 ¥300 〜 ¥800) |
F. セキュリティ・コンプライアンス
- HTTPS only — ACM 発行の TLS 証明書 + CloudFront で強制
- S3 直接公開なし — CloudFront Origin Access Control (OAC) で S3 を private に
- 長期 AWS キー不使用 — GitHub Actions は OIDC で短命クレデンシャル取得
- シークレット集約管理 — API キー・通知先メールは Secrets Manager
- 最小権限 IAM — Lambda は関数ごとに必要最小のロール
- 個人情報の最小保持 — 問合せフォームは SES 送信のみ、永続化なし