Route 53 + ACM + CloudFront ハンズオン

独自ドメインで静的サイトを HTTPS 公開する ― DNS・TLS 証明書・CDN を組み合わせる

Route 53 ACM CloudFront S3 独自ドメイン マネコン操作 所要時間 75〜90 分 v1.0

📋 概要

このハンズオンでは、S3 でホスティングした静的サイトを、独自ドメイン + TLS 証明書 + CDN で本番同等の構成で公開します。Route 53 で DNS を管理し、ACM で無料の TLS 証明書を発行、CloudFront でグローバル配信・キャッシュ・HTTPS 化を行います。

項目内容
対象サービスRoute 53、AWS Certificate Manager(ACM)、CloudFront、S3
主な学習内容ホストゾーン / DNS レコード / TLS 証明書 / CDN / キャッシュ / HTTPS リダイレクト
所要時間75〜90 分(証明書検証・配信反映の待機含む)
難易度★★★☆☆(中級者向け)
前提知識DNS の基本(A / CNAME レコード)・S3 の基礎
費用目安ホストゾーン 0.50 USD/月 + ドメイン登録料(年額)。CloudFront/ACM は無料枠あり
⚠️ 独自ドメインが必要です

このハンズオンには 所有しているドメイン が必要です。Route 53 で新規取得(.com で年額約 13 USD〜)するか、お名前.com 等で取得済みのドメインのネームサーバーを Route 53 に向けてください。

🏗️ アーキテクチャ

🧑‍💻 ユーザー(ブラウザ)
https://www.example.com にアクセス
↓ DNS 名前解決
🌐 Route 53(ホストゾーン)
A レコード(Alias)→ CloudFront を指す
🚀 CloudFront ディストリビューション
ACM 証明書で HTTPS / エッジでキャッシュ
↓ オリジンリクエスト(キャッシュミス時)
🪣 S3 バケット(オリジン)
OAC でプライベートアクセス / 静的コンテンツ

ポイント

✅ 前提条件

ℹ️ ドメインの 2 パターン
  • A. Route 53 で新規取得:ホストゾーンが自動作成され、NS 設定も自動。最も簡単。
  • B. 他社で取得済み:Route 53 でホストゾーンを作成し、表示される 4 つの NS レコードを取得元レジストラに設定する。

🌐 ステップ 1 ― Route 53 ホストゾーンの作成

ドメインの DNS レコードを管理するホストゾーンを準備します。

1-1. ホストゾーンを作成

マネジメントコンソールで 「Route 53」 を開き、「ホストゾーン」→「ホストゾーンの作成」 をクリックします。

ドメイン名example.com
タイプパブリックホストゾーン

「ホストゾーンの作成」をクリックします(Route 53 で取得したドメインなら既に存在します)。

1-2. ネームサーバー(NS)を確認・設定

作成されたホストゾーンの NS レコードに表示される 4 つのネームサーバーを確認します。

ns-123.awsdns-12.com
ns-456.awsdns-45.net
ns-789.awsdns-78.org
ns-012.awsdns-01.co.uk

他社で取得したドメインの場合は、レジストラの管理画面でネームサーバーをこの 4 つに変更します(反映に最大 48 時間)。Route 53 取得なら設定不要です。

✅ 確認ポイント

CloudShell や端末で dig NS example.com +short を実行し、AWS のネームサーバーが返ってくれば委任完了です。

🪣 ステップ 2 ― S3 バケットにサイトを配置

配信元(オリジン)となる S3 バケットを作成し、サンプル HTML を置きます。

2-1. S3 バケットを作成

「S3」→「バケットを作成」 をクリックします。

バケット名handson-cf-origin-xxxx
リージョンap-northeast-1(東京)
パブリックアクセスすべてブロック(デフォルトのまま)

「バケットを作成」をクリックします。S3 は公開しません。CloudFront 経由のみでアクセスさせます。

2-2. サンプル index.html をアップロード

以下の内容で index.html を作成し、バケットにアップロードします。

<!DOCTYPE html>
<html lang="ja">
<head><meta charset="UTF-8"><title>Handson Site</title></head>
<body style="font-family:sans-serif;text-align:center;padding:4rem">
  <h1>🚀 CloudFront + ACM 配信成功!</h1>
  <p>このページは独自ドメイン + HTTPS で配信されています。</p>
</body>
</html>
✅ 確認ポイント

バケット内に index.html が存在すれば OK です。この時点ではまだブラウザからアクセスできません(公開していないため)。

🔐 ステップ 3 ― ACM で TLS 証明書を発行

⚠️ リージョンは必ず us-east-1

CloudFront で使用する ACM 証明書は バージニア北部(us-east-1) で発行しないと CloudFront から選択できません。コンソール右上のリージョンを us-east-1 に切り替えてください。

3-1. 証明書をリクエスト

「Certificate Manager(ACM)」→「証明書をリクエスト」 をクリックします。「パブリック証明書をリクエスト」を選択して次へ。

完全修飾ドメイン名www.example.com
別名を追加example.com(apex も含める場合)
検証方法DNS 検証(推奨)

「リクエスト」をクリックします。

3-2. DNS 検証レコードを作成

証明書の詳細画面を開き、「Route 53 でレコードを作成」 ボタンをクリックします。検証用の CNAME レコードがホストゾーンに自動追加されます。

数分〜十数分で証明書ステータスが 「発行済み(Issued)」 になります。

✅ 確認ポイント

ACM の証明書ステータスが「発行済み」になり、ドメイン横に緑のチェックが付けば成功です。

🚀 ステップ 4 ― CloudFront ディストリビューションの作成

S3 をオリジンにした CDN を作成し、HTTPS と独自ドメインを設定します。

4-1. ディストリビューションを作成

「CloudFront」→「ディストリビューションを作成」 をクリックします。

オリジンドメインhandson-cf-origin-xxxx.s3.ap-northeast-1.amazonaws.com
オリジンアクセスOrigin access control settings(OAC)

「コントロール設定を作成」で OAC を新規作成して紐付けます。

4-2. キャッシュ / ビューワー設定
設定項目設定値
ビューワープロトコルポリシーRedirect HTTP to HTTPS
許可する HTTP メソッドGET, HEAD
キャッシュポリシーCachingOptimized
代替ドメイン名(CNAME)www.example.com
カスタム SSL 証明書ステップ 3 で発行した ACM 証明書
デフォルトルートオブジェクトindex.html

「ディストリビューションを作成」をクリックします。

4-3. S3 バケットポリシーを更新(OAC 許可)

ディストリビューション作成後、画面上部に表示される 「ポリシーをコピー」 から S3 バケットポリシーをコピーし、S3 バケットの「アクセス許可」→「バケットポリシー」に貼り付けます。これで CloudFront だけが S3 を読めるようになります。

{
  "Version": "2012-10-17",
  "Statement": [{
    "Effect": "Allow",
    "Principal": { "Service": "cloudfront.amazonaws.com" },
    "Action": "s3:GetObject",
    "Resource": "arn:aws:s3:::handson-cf-origin-xxxx/*",
    "Condition": {
      "StringEquals": {
        "AWS:SourceArn": "arn:aws:cloudfront::<AccountId>:distribution/<DistributionId>"
      }
    }
  }]
}
✅ 確認ポイント

ステータスが「有効(Enabled)」になり、https://<xxxx>.cloudfront.net にアクセスしてサンプルページが HTTPS で表示されれば成功です(反映に数分かかります)。

🔗 ステップ 5 ― 独自ドメインで公開する

Route 53 の Alias レコードで独自ドメインを CloudFront に向けます。

5-1. A レコード(Alias)を作成

Route 53 → ホストゾーン example.com「レコードを作成」 をクリックします。

レコード名www
レコードタイプA ― IPv4 アドレス
エイリアスオン
トラフィックのルーティング先CloudFront ディストリビューションへのエイリアス → 対象を選択

「レコードを作成」をクリックします。

5-2. 動作確認

ブラウザで https://www.example.com にアクセスします。

# HTTPS で配信され、CloudFront 経由になっているか確認 curl -sI https://www.example.com | grep -i -E "HTTP|x-cache|server" # HTTP がリダイレクトされるか確認 curl -sI http://www.example.com | grep -i location
5-3. キャッシュ動作を確認

1 回目のアクセス後、レスポンスヘッダーの X-Cache を確認します。Miss from cloudfront(初回)→ 再アクセスで Hit from cloudfront(キャッシュヒット)に変わります。S3 の index.html を更新しても、TTL の間はキャッシュが返る点も確認しましょう。即時反映したい場合は CloudFront の 「無効化(Invalidation)」/* を実行します。

✅ 確認ポイント
  • 独自ドメイン https://www.example.com で鍵マーク付き(HTTPS)でサイトが表示される
  • HTTP でアクセスすると HTTPS に自動リダイレクトされる
  • 2 回目以降のアクセスで X-Cache: Hit from cloudfront が返る

🧹 クリーンアップ

⚠️ 課金防止のためクリーンアップを実施

ホストゾーンは存在するだけで月額課金(0.50 USD)されます。ドメインを使い続けない場合は削除してください。CloudFront・ACM・S3 は使わなければ課金は最小です。

削除手順(逆順で実施)

  1. Route 53 の A レコードを削除
    ホストゾーン → www の A レコードを削除
  2. CloudFront を無効化 → 削除
    ディストリビューションを選択 →「無効化」→ ステータスが Disabled になってから「削除」
  3. ACM 証明書を削除
    us-east-1 の ACM → 証明書を選択 → 削除
  4. S3 バケットを空にして削除
    オブジェクトをすべて削除 → バケットを削除
  5. (任意)ホストゾーンを削除
    NS / SOA 以外のレコードを削除してからホストゾーンを削除

学習のまとめ

習得したスキル実践内容
DNS 管理ホストゾーン作成・NS 委任・Alias レコード設定
TLS 証明書ACM で DNS 検証による無料証明書発行(us-east-1)
CDN 配信CloudFront ディストリビューション + OAC で S3 を安全配信
HTTPS 化HTTP→HTTPS リダイレクト・独自ドメイン SSL
キャッシュ制御X-Cache 確認・無効化(Invalidation)