Amazon Route 53 DNS を Heroku アプリ用に設定する
最終更新日 2024年04月24日(水)
Table of Contents
Domain Name System (DNS) は、人間に解読可能なドメイン名 (たとえば www.heroku.com
) を機械が処理可能な IP アドレス (たとえば 198.51.100.1
) へマップするインターネットのルーティング層です。
Amazon AWS の DNS サービスは Route 53 と呼ばれ、可用性と拡張性の高いサービスです。既存の AWS インフラストラクチャコンポーネントを備えたユーザーは、Route 53 を DNS プロバイダーとして使用すると便利です。
このガイドでは、Heroku アプリの DNS 設定を Route 53 でセットアップする手順について説明します。
前提条件
アプリの DNS を設定する前に、Heroku CLI を使用してドメイン名をアプリケーションにアタッチしたことを確認してください。これは、サードパーティ製 DNS の変更など、特定のドメインのトラフィックを Heroku で正しいアプリケーションへ適正にルーティングするために必要です。
まだこのようにアタッチされていない場合は、正しいドメインをアプリにアタッチしてください。
$ heroku domains:add example.com
$ heroku domains:add www.example.com
必ずアプリケーションが使用するすべてのドメインを、サブドメインも含めて指定してください。
概要
あらゆる DNS プロバイダーと同様、Heroku アプリの DNS を設定する際は以下の手順が必要になります。
www.example.com
から独自のカスタムドメインの DNS ターゲットにマッピングするための CNAME レコードを作成します。- ルートドメイン
example.com
からwww.example.com
へのリダイレクトを確立して、ルートドメインと A レコードに関するリスクを回避します。 - Route 53 サーバーをドメインのネームサーバーとして設定します。
Route 53 では標準的な業界用語と異なる用語を使用しています。そのため、このガイドでは他のガイドと大きな違いがあります。
ホストゾーン
ホストゾーンとは、1 つのドメインの設定を構成する DNS レコードのコレクションについての Route 53 の用語です。Route 53 で設定するドメインごとにホストゾーンを作成する必要があります。
AWS 管理コンソールにサインインして、Route 53 サービスを選択します。Create hosted zone
(ホストゾーンを作成) ボタンをクリックして、設定するドメイン名を入力します。
ホストゾーンにはルートドメイン名を使用します (例: example.com
)。
CNAME レコード
www
CNAME レコードなどの新しいレコードが Route 53 にレコードとして追加されます。
レコードを作成するには:
- 新規作成したホストゾーンをドメインとして選択して、
Create record
(レコードの作成) ボタンをクリックします。 - Create Record (レコードの作成) ウィンドウが開きます。Record name (レコード名) フィールドで、名前
www
を入力します (www.example.com など)。Type (タイプ) フィールドで、CNAME
タイプを選択します。Value (値) フィールドで、カスタムドメインの DNS ターゲットを入力します。
$ heroku domains
=== sushi Heroku Domain
sushi-1234567890ab.herokuapp.com
=== sushi Custom Domains
Domain Name DNS Record Type DNS Target SNI Endpoint
──────────────── ─────────────── ─────────────────────────────────────── ─────────────
www.example.com CNAME example-target-12345zyxwv.herokudns.com example-12345
フォーム最下部の Create records
(レコードの作成) ボタンをクリックして www
CNAME レコードマッピングを保存します。
ネイキッド/ルートドメイン
S3 では SSL 証明書を設定できないので、Route 53 を使用して HTTPS でルートドメインを簡単にリダイレクトすることができません。ルートドメインのリダイレクトが必要な場合は、CNAME/エイリアスレコードルートドメインを提供する DNS プロバイダーを使用することを検討してください。詳細については、カスタムドメイン Dev Center の記事、あるいはこのブログ投稿を参照してください。SSL ネイキッドドメインリダイレクトを設定する方法が説明されています。
Route 53 がサポートしているエイリアスレコードは、Amazon S3 静的 Web サイトを使用して、ネイキッドドメインを対応する www
に、301 リダイレクトを使用して動的に解決します。たとえば、example.com
を www.example.com
に解決します。
エイリアスレコードを Route 53 で作成しているとき次のバケットが表示されるようにするには、バケットの名前をホストゾーンとまったく同じにしなければなりません。たとえば、ホストゾーンが example.com
の場合、バケットの名前を example.com
にします。
エイリアスレコードを作成する手順は次のとおりです。
- AWS 管理コンソールへ移動して、S3 管理コンソールを開きます。
- 新規作成したバケットを選択します。ただし開かないでください。
Properties
(プロパティ) タブをクリックして、「Static Website Hosting」 (静的 Web サイトホスティング) セクションを開きます。 Redirect all requests to another host name
(すべてのリクエストを他のホスト名へリダイレクト) をクリックすると、www.example.com
があらかじめ入力されています。入力されていない場合は、www.example.com
を入力してください。- リダイレクト設定を保存してから、
example.com
の Route 53 ホストゾーンを開きます。 - レコードセットを作成します。名前は空白のままにします。
A
タイプを選択します。エイリアスをYes
(はい) に設定して、エイリアスターゲットドロップダウンの 「S3 Website Endpoints」 (S3 Web サイトエンドポイント) セクションからexample.com
を選択します。 - レコードセットを作成します。
ドメイン example.com
が www.example.com
へスケーラブルな方法でリダイレクトされるようになります。Route 53 と Amazon S3 を使用して、Heroku アプリに解決されるネイキッドドメインをセットアップしました。
Route 53 をアクティベートする
この時点で、正しい DNS 設定が確立されました。しかしこの設定を使用しているリクエストがありません。Route 53 DNS がアプリケーションでアクティブになるためには、ドメインレジストラ (GoDaddy、DNSimple、NameCheap、1&1 など) にホストゾーンの Route 53 ネームサーバーを使用するよう指定する必要があります。
ホストゾーンのリストに戻って、新しいホストゾーンを選択します。サイドバーで Delegation Set (委任セット) セクションがあらかじめ入力されています。これらは、Route 53 がアプリのドメインを解決できるようにドメインレジストラに指定する必要があるネームサーバーです。
ネームサーバーの更新についてレジストラの説明を参照してください。
このDelegation Set (委任セット) をレジストラに入力して、Route 53 をアプリケーションでアクティブにします。ネームサーバーが完全にアクティブになるまで最長で 48 時間かかります。