S3 の Static Website Hosting でドメイン間のリダイレクトを実現する

ドメイン間でリダイレクトをする必要があり,nginx で頑張るのもなぁ…と思って,もっとお手軽で運用も楽そうな方法を探していたら,以下の記事を発見して,S3 の機能で実現できそうだったので試してみた.記事では別のドメインにリダイレクトをする方法として紹介されているけど,別のサブドメインにリダイレクトをする方法としても使えた.

構成図

ザッと以下のようになる.

f:id:kakku22:20170829202837j:plain

リダイレクト前のドメイン名と S3 バケット名を一致させる

適当に S3 バケットを作ってしまうとダメで,リダイレクト前のドメイン名と S3 バケット名を一致させる必要がある.例として aaa.example.com から zzz.example.com にリダイレクトさせる場合は,S3 バケット名は aaa.example.com になる.S3 バケット名はユニークである必要があるため,既に取得されていたら無理だという点には注意する必要がある.記事にも注釈が入っていた.

Note: S3 bucket names must be globally unique. If the bucket name you need is already in use, this solution cannot be used.

なお,この制約は公式ドキュメントにも記載されていた.

リソースレコードセット名は、Amazon S3 バケット名と一致する必要があります。たとえば、Amazon S3 バケット名が [acme.example.com] である場合、このリソースレコードセット名も [acme.example.com] である必要があります。

docs.aws.amazon.com

リダイレクト設定をする

管理コンソール上の Static website hosting で「リクエストをリダイレクトする」にチェックを入れて,ドメインとプロトコルを設定すると,すぐにエンドポイントからリダイレクトが可能になる.静的ファイルをホスティングするのは今までも使ったことがあったけど,リダイレクトをできることは知らなくて,勉強になった.また「ログ記録」も設定しておくと,アクセス数を把握できるため,基本的には設定しておくべきだと思う.

f:id:kakku22:20170829202908p:plain

Route 53 で S3 にドメインを設定する

記事に書いてある通り,以下のポイントに注意して設定をする.

  • A レコードを選択する
  • Alias は Yes にする
  • ターゲットに表示される S3 website endpoints から作成済の S3 バケットを選択する
    • ちなみに S3 バケットを作ってから,10分間ほど待たないとターゲットに表示されなかったので,時間差があるかも…?
  • Routing Policy は Simple にする

f:id:kakku22:20170829202930p:plain

まとめ

  • Route 53 + S3 を使ってドメイン間のリダイレクトを実現できた
  • ドメイン名と S3 バケット名を一致させるところは注意する