AWS
CloudFront

EC2に構築しているWebサイトにルートドメインで接続させる方法

背景

EC2インスタンスにてWebシステムが稼働していて、サブドメイン付きのURLを使用していたが、サブドメインなしのURLに変更したい
↓みたいな感じをやりたい(実在しないよ)
変更前:https://www.hiroky.com
変更後:https://hiroky.com

前提

  • EC2インスタンスでWebシステムが稼働している
  • EC2の前段にはELBが存在して、ELBは生かす
  • Route 53にてドメイン取得済み
  • 完全に変更ではなく、最初のアクセス先だけサブドメインなしで接続させる
    • CloudFront → ELB(www.hiroky.com)にリダイレクトする
    • TOPページはサブドメインなし、以降のページ遷移はwww.hiroky.comで行う
    • すでにELBなどの構築がされていて、既存のネットワーク構成等を変更せずお手軽にやりたかった

手順

S3バケット作成

  • 任意のバケット名でS3バケットを作成
  • 作成後、プロパティの「Static web site hosting」を選択し、リダイレクト先を設定
s3_1.png
s3_2.png

証明書発行

Certificate managerで証明書を発行

  • リージョンに「バージニア北部」を設定(CloudFrontで使用するためバージニア北部を設定)
  • 「証明書のリクエスト」ボタンを押下
certificater_manager_1.png
  • 「証明書のリクエスト」ボタンを押下
certificater_manager_2.png
  • CloudFrontで使用するドメイン名を追加
    (hiroky.comのようにサブドメイン指定なし)
certificater_manager_3.png
  • DNSの検証を選択
  • 「確認」ボタンを押下
certificater_manager_4.png
  • 「確定とリクエスト」ボタンを押下

|certificater_manager_5.png|

  • 「Route 53でのレコードの作成」ボタンを押下
certificater_manager_6.png
  • 「作成」ボタンを押下
certificater_manager_7.png
  • 「続行」ボタンを押下
certificater_manager_8.png

CloudFront Distribution追加

Distributionを追加

  • 「Create Distribution」ボタンを押下
cloudfront_1.png
  • Webの「Get Started」ボタンを押下
cloudfront_2.png
  • Origin Domain Name:S3の"Static website hosting"のエンドポイントを入力(プルダウンからバケットを選択すると有効にならない)
  • Origin ID:任意入力
  • Viewer Protocol Policy:「Redirect HTTP to HTTPS」を選択(HTTPで接続された時、HTTPSにリダイレクトする)
  • Price Class:「Use U.S., Canada, Europe, Asia and Africa」を選択
  • Alternate Domain Names(CNAMEs):割り当てるドメインを入力(サブドメインなし)
  • SSL Certificate:「Custom SSL Certificate」を選択(発行した証明書を選択)
  • 「Create Distribution」ボタンを押下
cloudfront_3.png
cloudfront_4.png
cloudfront_5.png

Route 53でCloud Frontと連携させる

設定対象のドメインを選択

  • 「Create Record Set」ボタンを押下
route53_1.png
  • Type:「A - IPv4 address」を選択
  • Alias:「Yes」を選択
  • Alias Target:"Cloud Front"で作ったDistributionを選択
  • 「Create」ボタンを押下
route53_2.png

最後に

本当はどのページに遷移してもサブドメインなしにするのが理想的である。が、
ユーザが接続するURLを短くしたい(1度接続してしまえばURLの長さは気にならない)という要求には答えられるので、必要とする場面はありそう。
今度はどの遷移方法でもサブドメインなしとなるよう構築したい。