はじめに
独自ドメインを取得し、AWS S3 + CloudFrontを使って静的サイトを作成していきます。
この記事には以下の内容が含まれます。
- REST APIエンドポイントを用いて、AWS S3 + CloudFrontを使って静的サイトを作成する方法
- 各設定項目についての詳細な説明
- 独自ドメイン(Google Domains)を導入する方法
- DNSSECの設定方法
- DNSレコードについての説明
独自ドメインを取得する
ドメインを取得するのは何でも構いませんが、この記事ではGoogle Domainsを使用します。各レジストラの指示に従って欲しいドメインを購入してください。
独自ドメインをAWSに追加する
- Route53のダッシュボードに移動し、「ホストゾーン」をクリックします。
- 「ホストゾーンの作成」をクリックします。
- 「ドメイン名」を入力し、「パブリックホストゾーン」を選択し、「ホストゾーンの作成」をクリックします。
- ホストゾーンの一覧ページに飛ぶので、「レコード」の「タイプ」が「NS」の行の「値/トラフィックのルーティング先」の列に表示されている値(ネームサーバー)はあとで使うので確認できる状態にしておきます。
- メモを取る必要はなくて、ブラウザ上でタブを消さないでいればそれで大丈夫です。
-
Google Domainsにアクセスし、「マイドメイン」を開いて、使用するドメインの「管理」をクリックします。
- 「DNS」にアクセスし、「カスタムネームサーバー」タブを選択して、「ネームサーバー」に前述したAWSのホストゾーン一覧のページに表示されているネームサーバーを全て入力して保存します。
- 一応ネームサーバー名の最後のドットも含めてGoogle Domainsの方にコピペしよう。こういう記事があるので。ただ保存後は最後のドットが消えた状態で表示されるので果たして意味があるのかはわからない。だけどつけて悪いことは起こらないのでつけとくのがいいかも。
- 一応ネームサーバー名の最後のドットも含めてGoogle Domainsの方にコピペしよう。こういう記事があるので。ただ保存後は最後のドットが消えた状態で表示されるので果たして意味があるのかはわからない。だけどつけて悪いことは起こらないのでつけとくのがいいかも。
- ネームサーバーを保存後、上に表示される「これらの設定に切り替える」をクリックする。そうすると2枚目の画像のようになる。
- AWSに戻り、リージョンを「バージニア北部(us-east-1)」に変更する。
- CloudFrontからはバージニア北部にある証明書(後述)しか利用できないため。
- AWS Certificate Manager(ACM)のダッシュボードにアクセスし、「証明書をリクエスト」をクリック
- 「パブリック証明書をリクエスト」を選択し、「次へ」をクリックします
- 「完全修飾ドメイン名」にドメイン名とワイルドカード証明書用のドメイン名を入力し、「検証方法」は「DNS検証」を選択して、「リクエスト」をクリックします。
-
ワイルドカード証明書についてが参考になります。これで全てのサブドメインに対して有効な証明書を発行できますが、注意点として複数階層のサブドメイン(
auth.www.example.com
など)に対しては有効ではありません。その場合は1階層上のサブドメイン(www.example.com
など)に対する証明書を別途発行する必要があります。
-
ワイルドカード証明書についてが参考になります。これで全てのサブドメインに対して有効な証明書を発行できますが、注意点として複数階層のサブドメイン(
- 証明書の一覧ページに遷移するので、作成した証明書IDをクリックします。
- 証明書の詳細ページに行ったら、「Route53でレコードを作成」をクリックします。
- ページ遷移後、対象の2つのドメインが選択されているのを確認したら、「レコードを作成」をクリックします。
- 再度証明書の詳細ページに遷移するので、1分ほど待ってページをリロードするとステータスが「発行済み」になります。
- AWSのリージョンを「東京(ap-northeast-1)」に戻しておきましょう。
DNSSECを有効にする
DNSSECはキャッシュポイズニング攻撃やDNSスプーフィングなどを防ぐためのDNSのセキュリティ設定です。今まではGoogle DomainsがDNSSECの設定を自動でしてくれていましたが、AWSのネームサーバーを使うように変更したので、DNSSECの設定を再度行わなければなりません。以下のようにして設定します。
- Route53のダッシュボードにアクセスし、「ホストゾーン」を開き、ドメイン名をクリックします。
- 「DNSSEC署名」タブを開き、「DNSSEC署名を有効化する」をクリックします。
- 以下のように設定して、「KSKを作成して署名を有効化する」をクリックします。
- 遷移先のページで「DSレコードを作成するための情報を表示」をクリックします。
- 表示されたページ上の「別のドメインレジストラ」を開き、「キーのタグ」「ダイジェストアルゴリズム」「ダイジェストアルゴリズムのタイプ」「ダイジェスト」「署名アルゴリズム」「署名アルゴリズムのタイプ」の値があることを確認します。
- 先ほどと同じようにGoogle Domainsの「DNS」ページを開き、「DNSSEC」の「レコードを管理する」をクリックします。
- 以下の値を入力し、「保存」をクリックします。
- 「キータグ」には先ほどAWS上で確認した「キーのタグ」を入力します。
- 「アルゴリズム」には、「署名アルゴリズムのタイプ」の番号のものを選択し、念のため選択したアルゴリズム名と「署名アルゴリズム」の値が一致するか確認します。
- 「ダイジェスト タイプ」には、「ダイジェストアルゴリズムのタイプ」の番号のものを選択し、念のため選択したダイジェストタイプ名と「ダイジェストアルゴリズム」の値が一致するか確認します。
- 「ダイジェスト」には、先ほど確認した「ダイジェスト」の値を入力します。
Google Workspaceのメールを使えるようにする
もしGoogle Workspaceを使用している場合、カスタムネームサーバーを使用するように変更すると、そのままではメールが届かなくなってしまいます。メールが届くようにするには、MXレコードをAWS Route53のホストゾーンに追加する必要があります。以下にその手順を示します。
- Google Domainsの「DNS」ページにアクセスし、「デフォルトのネームサーバー」のタブを開き、「ネームサーバー」のMXレコードの「データ」の部分をコピーします。
- AWSのRoute53のダッシュボードにアクセスし、「ホストゾーン」に行き、「ドメイン名」をクリックします。
- 「レコード」タブを開き、「レコードを作成」をクリックします。
- 「レコードタイプ」で「MX」を選択し、「値」にGoogle Domainsにてコピーした「データ」の値を貼り付けし、「TTL」は3600秒(1時間)を選択、「ルーティングポリシー」は「シンプルルーティング」を選択し、「レコードを作成」をクリックします。
-
Google Workspace で Gmail を使用できるようにするの「設定ツールを開く」という青いボタンを押し、「Gmailが有効になりました」という表示がされたらOK。「テストメールを送信」を押してテストしてみる
S3 + CloudFrontを使用して静的サイトを作成
構成の種類
CloudFrontとS3で静的サイトを作成する場合、ウェブサイトエンドポイントを使う方法とREST APIエンドポイントを使う方法の2通りの構成方法があるようです。それぞれについては以下の記事が参考になります。
この記事で以下のように述べられているように、今回はREST APIエンドポイントを使った構成方法で作成します。
個人的には「まずはREST APIを使うパターンで設計し、インデックスドキュメントなどの機能が必要で構成をシンプルにまとめたい場合にのみ静的ウェブサイトホスティングを使う」のが良いのかな、と、いまのことろ考えています。
1. S3のバケットを作成する
-
作成画面にて、以下のように設定を行います。
一般的な設定
バケット名
任意の名前を入力します。
AWSリージョン
主にアクセスされるであろう場所と地理的に一番近いリージョンを設定することが望ましいです。
既存のバケットから設定をコピー
既にバケットを作成していて、そのバケットの設定をコピーしてきたい時に使います。やりたければ「バケットを選択する」をクリックして設定をコピーしたいバケットを指定します。ここでは使いません。
オブジェクト所有者
原則「ACL無効」を選択すべきようです。S3のアクセス制御は原則としてポリシーを使って行うべきで、ACL(アクセスコントロールリスト)を使って行うべきではないようです(以下の記事を参照)。
何が嬉しい?S3 Object ACL無効化 - 聞いた後、速攻で忘れていい知識をお届けします -
このバケットのブロックパブリックアクセス設定
「パブリックアクセスをすべてブロック」を選択します。含まれている項目を見るとわかるように「パブリックアクセスをすべてブロック」を選択するとACLを使ったアクセスも全て拒否してくれます。こうすることでACLに誤った設定をしてしまい気づかないうちにバケットやその中身のオブジェクトが全世界から自由にアクセス可能になっていたなんて事態を防ぐことができます。前述したように基本的にACLを使ってアクセス制御することはないので事故をなくすためにも「パブリックアクセスをすべてブロック」を選択しときましょう。
加えて今回のREST APIエンドポイントを使った構成の場合、S3へのアクセスはCloudFrontからのみに限定される(前述した『CloudFrontとS3で作成する静的サイト構成の私的まとめ』に構成図が載ってます)のでそもそもパブリックアクセスは必要ありません。
バケットのバージョニング
まずバケットのバージョニングとは何かということから説明しましょう。例えば
dog.jpg
という犬の画像がバケットに入っているとします。これを誰かがdog.jpg
という画像名はそのままで、猫の画像に変更してしまいました。このとき、バージョニングを有効にしていると、たとえdog.jpg
が猫の画像に変更されたとしても前のバージョンのdog.jpg
(つまり犬の画像)は古いバージョンとして残ります。バージョニングを無効にしている場合はdog.jpg
が猫の画像に変更されてしまったら元の犬の画像は無くなってしまいます。削除の場合も同様です。たとえ
dog.jpg
を削除したとしても削除フラグという印をdog.jpg
につけて削除扱いにするだけで実際にはdog.jpg
は削除されません(これを論理削除と言います)。そのため、バージョニングを有効にしておくと、間違ってバケット内のオブジェクトに変更や削除を行ったとしても前のバージョンが保持されているので復元が簡単になるということです。ただ、注意点としては変更しても前のバージョンが保持されたり、削除しても削除扱いにするだけで実際には削除しないため、意図せずファイル容量が増えてその分コストがかかってしまうといったことが考えられます。個人で使用する分にはそれほど問題にはならないでしょうから、ここでは「有効にする」を選択します(その方が勉強になるので)。より詳しく知りたい人は以下の記事が参考になります。
絵で見て 3分でおさらいする Amazon S3 のバージョニングとライフサイクル
タグ
このバケットにタグをつけることで後でAWS全体でコスト等を可視化したり、検索することが容易になります。今の段階では必要ないと思うので、後になって使用するAWSのサービスが増えてどこでコストがかかってるのか知る必要が出てきた時につければいいでしょう。なのでここでは何もタグはつけません。
デフォルトの暗号化
これは、バケットにオブジェクトを保存する際に暗号化をするかどうかの設定です。暗号化することのメリットとしては、第三者がS3のオブジェクトに直接アクセスしたとしても暗号化されているので情報が流出しづらくなります。デメリットとしては、暗号化は重い処理なので、その分、パフォーマンスが落ちます。
暗号化する場合は、暗号化に使用するキーが2種類あるので選択する必要があります。それぞれの違いと使い分けについては以下の記事が参考になります。
今回はバケット内のオブジェクトは静的サイト上で公開するわけなので、特に暗号化するメリットはありません。よってここでは「無効にする」を選択します。
詳細設定
「オブジェクトロック」を有効にするとたとえrootユーザーであってもバケット内のオブジェクトを変更したり、削除することができなくなります(有効にすると自動的に「バケットのバージョニング」も有効になります)。これは法律等によって必要な時にのみ使うもので、通常であれば使う必要は全くありません。なので「無効にする」を選択しましょう。詳しくは以下の記事が参考になります。
-
バケットの詳細画面に行きます。ここでバケットの設定を確認したり、変更することができます。
-
ローカルにて以下の内容の
index.html
を作成します<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <h1>Hello, World!</h1> </body> </html>
2. CloudFrontを作成する
2-1. 「セキュリティ」の設定を行う
- CloudFrontのダッシュボードに行き、「オリジンアクセス」をクリックします
- 「コントロール設定」タブの「コントロール設定を作成」をクリックします
-
Amazon CloudFront オリジンアクセスコントロール(OAC)のご紹介の通り、オリジンアクセスアイディンティティ(OAI)は非推奨になっています。
-
Amazon CloudFront オリジンアクセスコントロール(OAC)のご紹介の通り、オリジンアクセスアイディンティティ(OAI)は非推奨になっています。
- 「名前」に任意の名前を入力し、「設定」は「署名リクエスト」を選択し(「認証ヘッダーを上書きしない」は選択しません)、「作成」をクリックします
- Amazon S3 オリジンへのアクセスの制限に書いてあるように、OACはユーザーがオリジンであるS3のコンテンツに直接アクセスしたり、意図しないCloudFrontディストリビューションを介してコンテンツにアクセスすることを防ぎ、ユーザーが指定されたCloudFrontディストリビューションを介してのみバケット内のコンテンツにアクセスできるように制御するものです。
2-2. ディストリビューションの作成
-
「ディストリビューション」に行き、「ディストリビューションを作成」をクリックする。
- これ以下の設定については前述したAmazon CloudFront オリジンアクセスコントロール(OAC)のご紹介に書かれている内容をもとにしています。
- これ以下の設定については前述したAmazon CloudFront オリジンアクセスコントロール(OAC)のご紹介に書かれている内容をもとにしています。
-
以下のように「オリジン」の設定をします。
- 「オリジンドメイン」は作成したS3のドメインを選択
- 「オリジンパス」は入力しない
- オリジンのパスが参考になります
- もちろんパスを追加したければ任意のパスを入力してください
- 「名前」は自動で入力された内容のままにするか任意の名前を入力
- 「S3 バケットアクセス」は「Origin access control settings」を選択
- 「Origin access control」は先ほど作成したコントロール設定を選択
- 「オリジンシールドを有効にする」は「いいえ」を選択
- 「オリジンシールドを有効にする」はキャッシュのヒット率を高めてくれたりして、可用性を高めるのに役立ちますが、料金がかかるので、そこまでアクセス数の見込めない個人サイトであれば「いいえ」を選択するのがいいかなと思います。
-
「デフォルトのキャッシュビヘイビア」の設定をする
- 「パスパターン」はそのままにします。
- 「パスパターン」は、キャッシュを行うリクエストのURIパスのパターン
- 「オブジェクトを自動的に圧縮」は「Yes」を選択する
- 圧縮ファイルの供給によると、「Yes」を選択すると、ユーザーにコンテンツを配信する際に、CloudFrontはコンテンツを圧縮してユーザーに送ってくれるので、サイトの表示時間が速くなる可能性がある。
- また、CloudFront のデータ転送コストは供給されたデータの総量に基づくため、圧縮オブジェクトを処理する方が、非圧縮オブジェクトを供給するよりもコストが安くなる可能性がある
- 「ビューワープロトコルポリシー」は「Redirect HTTP to HTTPS」を選択する
- ビューワーと CloudFront 間の通信で HTTPS を必須にするが参考になります。
- 「HTTP and HTTPS」を選択した場合、ユーザーはHTTPとFTTPSのどちらを使ってもCloudFrontからコンテンツを取得できますが、わざわざREST APIエンドポイントを使ったメリットがなくなるのでやめときましょう。
- 逆に「HTTPS only」を選択した場合、ユーザーがHTTPでCloudFrontにリクエストを送ると403が返ってきますので、HTTPSで通信しないとユーザーはコンテンツを閲覧できません。
- 「Redirect HTTP to HTTPS」を選択した場合、ユーザーがHTTPでCloudFrontにリクエストを送るとHTTPSにリダイレクトするので、ユーザーは強制的にHTTPS通信することになります。この方法だとHTTPでリクエストされた場合、HTTPSにリダイレクトされるので二重の料金がかかってしまいますが、たとえHTTPで通信してしまってもエラーになることはないので、「HTTPS only」に比べてUXを下げずに済みます。なので「HTTPS only」と「Redirect HTTP to HTTPS」のどちらを選ぶかは好みですが、今回は「Redirect HTTP to HTTPS」を選びました。
- 「許可される HTTP メソッド」は「GET, HEAD」を選択します
- 今回作成するのは静的サイトなので「GET, HEAD, OPTIONS, PUT, POST, PATCH, DELETE」は選択する必要がないのはわかると思います。
- 「GET, HEAD, OPTIONS」についてですが、OPTIONSメソッドはCORSのプリフライトリクエストの際に使用するメソッドです。なので、今回のような静的サイトでは必要ありません。OPTIONSメソッドが気になったのでCORSとプリフライトリクエストについて少し調べましたが参考になります。
- 「ビューワーのアクセスを制限する」は、プライベートコンテンツとして限定公開したいわけでなければ「No」を選択します。
- 「キャッシュキーとオリジンリクエスト」は「Cache policy and origin request policy」を選択し、「キャッシュポリシー」には「CachingOptimized」を選択します。「オリジンリクエストポリシー」はお任せします。
- キャッシュについては自分の理解が追いついてないので、後日アップデートできたらと思います。
- 「追加設定」の「スムーズストリーミング」は「No」を選択します。
- ディストリビューションを作成または更新する場合に指定する値によると、Microsoft Smooth Streaming 形式のメディアファイルを配信するが、IIS サーバーがない場合はYesを、Microsoft Smooth Streaming 形式のメディアファイルを配信するためのオリジンとして使用する Microsoft IIS サーバーがある場合、または Smooth Streaming メディアファイルを配信しない場合は、Noを選択すると言っているので、今回は「No」を選択します。スムーズストリーミングについてより詳しく知りたい人はスムーズ ストリーミング 入門が参考になります。
- 「フィールドレベル暗号化」はそのままにします。
- 選択できない状態になっているはずです。この項目は「ビューワープロトコルポリシー」にて「HTTPS only」を選択し、「許可されたHTTPメソッド」で「GET, HEAD, OPTIONS, PUT, POST, PATCH, DELETE」を選択しないと選択できるようになりません。フィールドレベル暗号化とはユーザーがPOSTリクエストでデータをアップロードする際にCloudFrontが公開鍵を用いて暗号化し、秘密鍵を持つアプリケーションコンポーネントのみが復号できるようにすることでデータをずっと保護した状態にします。なので常にHTTPS通信を使用し、POSTとPUTリクエストを利用できる状態にしないと「フィールドレベル暗号化」を有効化できないのです。
- 「リアルタイムログを有効にする」は「No」を選択します。
- これを有効にするとCloudFrontがデータを受信してから数秒以内にディストリビューションが受信したリクエストに関する情報が取得できるようになります。リアルタイムログは、Amazon Kinesis Data Streams で選択したデータストリームに配信されます。今回は必要ないので「No」を選択します。
- 「パスパターン」はそのままにします。
-
「関数の関連付け」
- ユーザーに近いエッジで実行できる関数(エッジ関数)を設定できます。エッジ関数はCloudFront FunctionsとLambda@Edgeの2つのタイプから選択できます。
- ここでは何も設定しません。エッジで爆速コード実行!CloudFront Functionsがリリースされました!とか参考になりそうです。
-
「設定」
- 「料金クラス」は「すべてのエッジロケーションを使用する」を選択します。
- その分高くなるので、心配なら「北米、欧州、アジア、中東、アフリカを使用」を選択してもいいと思います。私はそこまでアクセスされないならあまり関係ないかなと(憶測)思って、せっかくCloudFront使うならと「すべてのエッジロケーションを使用する」にしました。
- 「AWS WAF ウェブ ACL」は何も選択しません。
- WAFを使っている場合は選択すればいいと思います。
- 「代替ドメイン名 (CNAME)」に使用したドメイン名を入力します。
- 「カスタムSSL証明書」は前に作成したものを選択します。もし表示されない場合は証明書をバージニア北部以外のリージョンで作ってしまったのかもしれません。「レガシークライアントサポート」はオフのままで、「セキュリティポリシー」は推奨されているものを選択します。
- 「サポートされているHTTPバージョン」は「HTTP/3」も含め全部有効にしましょう。せっかくワンクリックで有効にできて料金も変わらずにHTTP/3を利用できるのに使わない手はないです。
- ただ既存のサービスがある場合は影響が出る場合があるのでもう少し調べたほうがいいです。これとか
- 「デフォルトルートオブジェクト」は例えばユーザーが
https://example.com/
とリクエストしてきた時にどのコンテンツを返すかということです。設定しないとhttps://example.com/
とリクエストしてきた時にディストリビューション内のコンテンツが公開されちゃいます。無難に前に作成したindex.html
とかを入力すればいいんじゃないでしょうか。注意点として/
は含められません。オブジェクト名だけで大丈夫です。詳しくはドキュメントに書いてあります。 - 「標準ログ記録」は「オン」でも「オフ」でもどっちでもいいです。「オン」にするとCloudFrontがオブジェクトに対するリクエストの情報をログに記録して、そのログファイルをS3バケットに保存してくれます。ログ出力自体に料金はかからないですが、ログファイルはS3に保存されるのでその分は課金されます。僕はログ見るの好きなので「オン」にします。「オン」にするとログを保存するバケットを選択する必要がありますが、ログ保存用のバケットに関しては別途作ったほうがいいです。ログを見られるのはセキュリティ上あまりよろしくないので。ログ用のバケットを作成する際は基本的にはこの記事で作成した設定通りでいいのですが、「オブジェクト所有者」のところだけ「ACL有効」を選択してください。そうしないとCloudFrontがログを保存できなくなるようです。ログが保存できない場合は 「ディストリビューションを作成」をクリック時にエラーが出て作成されません。逆に言えば問題なく作成された場合はログ保存は問題なくできることがわかります。詳しくはドキュメントを見てください。
- 「ログのプレフィックス」は任意のプレフィックスを入力します。ちなみに見やすくなるので末尾に
/
をつけたほうがいいとドキュメントでは書かれています。 - 「cookieのログ作成」は「オフ」にします。ドキュメントでは、S3はCookieを処理しないので、ディストリビューションにEC2や他のカスタムオリジンが含まれていない限り、基本的に「オフ」にすることがいいと書かれています。
- 「IPv6 を有効にする」は「オン」にします。ドキュメントを読む限り、今までの設定でIPv6が有効になるかどうかはちょっと怪しいですが、有効にしたところで害はないのでとりま有効にしときます。
- 「料金クラス」は「すべてのエッジロケーションを使用する」を選択します。
-
「ディストリビューションを作成」をクリック
-
遷移先のページで下記のようなポップアップが表示されるので、「ポリシーをコピー」をクリック後、「S3バケットの権限に移動してポリシーを更新する」をクリックします。
-
「バケットポリシー」にて「編集」を押し、先ほどコピーしたポリシーを貼り付けて保存します。
3. 独自ドメインとCloudFrontディストリビューションを紐づける
- Route53のダッシュボードに行き、「ホストゾーン」にアクセスし、前に作成したホストゾーンのドメイン名をクリックします。
- 「レコードを作成」をクリックします。
- 以下のように設定して、「レコード作成」をクリックします。
- 2枚目の画像のような画面が表示される人は「クイック作成へ切り替える」を選択します。どちらの画面で設定しても変わらないですが、クイック作成の方が設定項目がまとまって表示されているので設定しやすいです。
- 「レコード名」は自分の使用したいサブドメインを入力してください。サブドメインを使いたくない場合は空白にします。
- 「レコードタイプ」は「A」を選択します。
- 「エイリアス」はオンにします。
- 「トラフィックのルーティング先」は「CloudFrontディストリビューションへのエイリアス」を選択します。
- 「ディストリビューションを選択」は先ほど作成したCloudFrontのディストリビューションを選択します。
- 「ルーティングポリシー」は「シンプルルーティング」を選択します。
- ルーティングの種類について知りたい人はAmazon Route 53のルーティングがすごすぎる件が参考になります。
- ルーティングの種類について知りたい人はAmazon Route 53のルーティングがすごすぎる件が参考になります。
- 一応、IPv6も使えるようになっているので、IPv6用のレコードも作成しましょう。先ほどと同じ要領で、「レコードタイプ」だけ「AAAA」にして新規レコードを作成します。
おわりに
最後に設定したドメインにブラウザを使ってアクセスしてみましょう。以下のように表示されたらOKです。
【おまけ】 DNSレコードについて
名前解決とは
DNS(Domain Name System)は、普段目にするドメインネーム(www.example.com
など)をIPアドレスに変換する(これを名前解決という)を行うシステムのことです。名前解決はネームサーバー(DNSサーバー)によって行われます。ネームサーバーにドメインネームとIPアドレスが紐づいた情報が登録されています。
完全修飾ドメイン(FQDN)とは
実はいつも見ているURL(www.example.com
など)は完全修飾ドメイン(FQDN)と呼ばれるもので、ドメイン名(example.com
など)とホスト名(www
など)から構成されます。FQDNにはそれぞれIPアドレスが割り当てられています。違うサブドメイン同士で同じIPアドレスを付けることも可能です。例えばwww.example.com
とexample.com
に同じIPアドレスが割り当てられている場合は、どちらのURLをリクエストしても同じリソースが表示されます。
FQDNとは省略されていないドメインという意味なので、例えばホスト名のないドメイン(example.com
など)であってもIPアドレスが割り当てられている場合はFQDNです。逆にホスト名のないドメイン(example.com
など)にIPアドレスが割り当てられておらず、ホスト名のあるドメイン(www.example.com
など)にのみIPアドレスが割り当てられている場合は、ホスト名のないドメイン(example.com
など)はそれ自体は存在しないドメインなので、省略されたドメインと見做され、FQDNとは呼びません。ただ狭義には、ルートドメインまで記されてないと(www.example.com.
など)FQDNではないという意見もあります。
DNSレコードタイプについて
Route53の「ホストゾーン」にアクセスし、ホストゾーンのドメイン名をクリックすると、「レコード」タブにレコード情報が表示されていると思います。この記事の通りに進めていた場合、5つのレコードが存在しているはずです。レコードには様々なタイプがあります。「タイプ」列を見ると、それぞれ「A」、「AAAA」、「NS」、「SOA」、「CNAME」と表示されていると思います。
Aレコードは、IPv4において、ホスト名とグローバルIPアドレスの紐づけを定義するレコードです。このレコードをもとにクライアント側はFQDNに紐づくIPアドレスを取得し、名前解決します。CloudFrontは固定IPアドレスを持たないので、値にはグローバルIPアドレスではなく、CloudFrontが指定されています。その時に応じて、グローバルIPアドレスをAWS側でよしなに指定してくれるということです。
AAAAレコードは、AレコードのIPv6版です。IPv6において、ホスト名とグローバルIPアドレスの紐づけを定義します。
NSレコードは、このドメインのゾーン情報を管理するネームサーバーが載っているレコードです。例えばクライアント側がwww.example.com
にアクセスしたい場合、com
のネームサーバーに問い合わせを行うと、com
のネームサーバーはexample.com
のネームサーバーのIPアドレスを返します。example.com
のネームサーバーはwww.example.com
のAレコードをもとにwww.example.com
のIPアドレスを返してくれます。
SOAレコードは、ネームサーバーの管理者のメールアドレスなどの情報を持ちます。IETFによって定義されているレコードで必須です。
CNAMEレコードは、IPアドレスに別名をつけるレコードです。この記事とかわかりやすいです。