この「山手線 3Dジオラマ」は、いわゆる静的サイト(Static Site)です。サーバーサイドでPHPやRubyが動いているわけではなく、ブラウザがHTML/CSS/JSを読み込んで動作しています。
このようなアプリを公開する場合、レンタルサーバーやVPSを借りるよりも、AWSの「S3」と「CloudFront」を組み合わせるのが、コスト・速度・管理の面で最強の選択肢だと感じています。

構成の概要

シンプルですが、非常に強力な構成です。

  • Amazon S3: 全てのファイル(HTML, 画像, 3Dモデル)を置くストレージ。
  • Amazon CloudFront: S3の前段に置くCDN(コンテンツ配信ネットワーク)。世界中のエッジサーバーから爆速で配信します。

3Dモデル(.glbファイル)やテクスチャ画像など、ファイルサイズが大きくなりがちなコンテンツも、CloudFrontを通すことで遅延なくユーザーに届けることができます。

CloudFrontを使うメリット

単にS3の「静的ウェブサイトホスティング」機能を使うだけでも公開はできますが、CloudFrontを挟むことには大きなメリットがあります。

1. 無料でHTTPS化できる

S3単体だと独自ドメインでのHTTPS化が面倒ですが、CloudFrontなら「AWS Certificate Manager (ACM)」で発行した無料のSSL証明書を簡単に紐付けられます。今のWeb標準ではHTTPSは必須ですよね。

2. 転送コストの削減

S3から直接データを送信するよりも、CloudFront経由の方がデータ転送量が安くなる場合があります。また、キャッシュが効けばS3へのアクセス自体が減るため、リクエスト料金も節約できます。

実装時のハマりポイント

非常に便利な構成ですが、いくつか落とし穴もありました。

キャッシュの削除(Invalidation)

CloudFrontは強力にキャッシュするため、S3のファイルを更新しても、ユーザー側には古いファイルが表示され続けることがあります。
開発中はキャッシュ時間(TTL)を短くするか、デプロイ時に明示的にキャッシュ削除(Invalidation)を行う必要があります。

# AWS CLIでキャッシュを削除するコマンド例
aws cloudfront create-invalidation --distribution-id XXXXXX --paths "/*"

CORS(クロスオリジンリソース共有)

3Dモデルやフォントファイルを読み込む際、CORSエラーで弾かれることがありました。S3のCORS設定だけでなく、CloudFront側でも適切なヘッダー(Originなど)をフォワードする設定が必要です。

まとめ

サーバーのOS管理やパッチ適用から解放され、コードを書くことだけに集中できるのがこの構成の最大の魅力です。
アクセスが急増しても勝手にスケールしてくれるため、「バズったらサーバーが落ちるかも」という心配も無用。個人開発のWebアプリには最適なインフラだと思います。