Route 53でZone ApexドメインをS3を使ってリダイレクトする

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

最近、Zone Apex *1ドメインに対するリクエストをリダイレクトしたいという要望があったため調査しました。その調査結果について記述します。

S3のStatic Website Hosting機能にはRedirect all requests to another host nameという選択肢があります。この機能とRoute 53のAliasレコードを組み合わせることでZone Apexとなるドメインに対するリクエストを簡単にリダイレクトすることが出来ます。今回は例としてhttp://hoge.example.com/へのアクセスをhttp://example.net/hoge/にリダイレクトする設定方法について記述します。

リダイレクトに利用するS3バケットを作成する

まずS3のマネジメントコンソールでリダイレクトに利用するS3バケットを作成します。S3のStatic Website Hosting機能を利用する際に任意のドメイン名を指定する場合はバケット名とドメイン名を揃える必要があるため、今回であればhoge.example.comというバケットを作成することになります。
S3バケットの作成

次にバケットの[Properties]をクリックして[Static Website Hosting]を開き[Redirect all requests to another host name]を選択します。そして[Redirect all requests to:]にexample.net/hogeと入力します。なお、example.net/hoge/と最後に/を入れないように注意して下さい。入れるとリダイレクト後のURLがhttp://example.net/hoge//となってしまいます。
S3バケットのリダイレクト設定

Route 53でHosted Zoneを作成する

Route 53のマネジメントコンソールでhoge.example.comのHosted Zoneを作成します。
Hosted Zoneの作成

次に作成したHosted Zoneに対して[Create Record Set]ボタンをクリックしてZone Apexとなるhoge.example.comドメインに対するAliasレコードを作成します。最初に[Alias:]のラジオボタンを[Yes]にし、[Alias Target:]からhoge.example.comを選択します。なお、Zone Apexドメインに対するAliasレコードの場合[Name:]のテキストボックスは空のままにします。
Aliasレコードの作成

まとめ

後はhoge.example.comドメインのDelegation Setを上位のDNSに申請すれば、http://hoge.example.com/へのアクセスをhttp://example.net/hogeにリダイレクトできるようになります。

サブドメイン名をパスに変換したURLへのリダイレクトがこんなに簡単にできるとは知らず、初めて設定した際にびっくりしました。ちなみに、今回のRedirect all requests to another host name機能を利用したリダイレクトの場合はリダイレクト元URLのパスやパラメータについてはそのままリダイレクト先に引き継がれます。例えばhttp://hoge.example.com/fuga?piyoへのアクセスはhttp://example.net/hoge/fuga?piyoにリダイレクトされます。ただ、このパスやパラメータを削除したいケースもあると思います。そのような場合はこちらを参照して下さい。

脚注

  1. Zone Apexとはそのゾーンにおいて最上位のホスト名がつかないドメイン(www.example.com ではなく example.com)を意味します。