moyashidaisuke's diary

フリーランスのエンジニアのダイスケです。プログラム関連とかギター関連とか旅行関連とか色々。

wwwなしのURLをwww有りのURLにAWSで転送させる(HTTPS対応版)

概要

このブログのURLは「https://www.moyashidaisuke.com」ですが、「https://moyashidaisuke.com/」でもアクセスできるようにAWSで頑張りました。

対応前構成

さくらのDNS -> はてなブログにcnameで転送(www.moyashidaisuke.comのみ)

f:id:moyashidaisuke:20190913203106p:plain

何がダメ?

↑はてな公式のやり方なのですが、www無しをcnameではてなブログに設定することはDNSのルールとしてできません。

www.howtonote.jp

また、はてなブログ側の設定でもできません。自分でどうにかしてね、とのこと。

www.hatena.ne.jp

検討

案1:お名前.comのURL転送サービスを使う

www.dj-mope.com

  • お名前.comは広告が多くて個人的に好きじゃない、、
  • 有料(月100円)

なので微妙。

案2:適当にサーバたてて.htaccessとかでやる

www.gith.xyz

  • 転送するためだけのサーバは保守的にあまり立てたくない、、
  • 有料なのがほとんど

案3:AWSで頑張る

aws.amazon.com

AWSを嗜むエンジニアなので、AWSでやってみます!(ただの好み)

対応1 HTTP無し版

aws.amazon.com

dev.classmethod.jp

細かいやり方は↑の方が詳しいので、簡単に。

S3bucket作成

今回は「moyashidaisuke.com」でアクセスした時に、「www.moyashidaisuke.com」にリダイレクトさせたいので、「moyashidaisuke.com」で作成します。

後は適当でOK

S3bucketにリダイレクトを設定

f:id:moyashidaisuke:20190915141104p:plain

Route53にホストゾーンを作成

ルートドメインの「moyashidaisuke.com」で作成します。

f:id:moyashidaisuke:20190915141400p:plain

Route53からS3へのルーティング設定

f:id:moyashidaisuke:20190915141535p:plain

Route53にはてなブログへのルーティング設定

今は「さくらのDNS -> はてなブログにcnameで転送」していますが、

次の手順で「さくらのDNS -> AWS Route53 -> はてなブログにcnameで転送」とするので、あらかじめRoute53にはてなブログへのルーティング設定を追加しておきます。

f:id:moyashidaisuke:20190915141723p:plain

さくらのDNSからAWS Route53へのルーティング設定

NSレコードで設定します。 Route53にNSレコードが作成されているはずなので、確認してコピっておきます。(人によって違うので各自の環境のを使って下さい)

f:id:moyashidaisuke:20190915142014p:plain

さくらのDNSに設定します。NSの設定はなぜかWHOIS情報の変更画面にあります。 (さくらのDNSの画面は10年前から時が止まっているのでノスタルジーを感じます。)

f:id:moyashidaisuke:20190915142203p:plain

しばし待つ

変更に時間がかかるので待ちます。私は12時間くらい待ちました。

動作確認

  • はてなブログ(www.moyashidaisuke.com)が正常に表示されること
  • ルートドメイン(moyashidaisuke.com)を開いたら(www.moyashidaisuke.com)に転送されること
    • ブラウザが勝手に補完する場合があるので、コマンドつかった方が確実
curl --dump-header - moyashidaisuke.com

が、ここでhttpsだとtimeoutになってしまう事が発覚、、、

対応2 HTTPS版

というわけでhttps対応版。

kuronyankotan.com

ACMでssl証明書を発行して、S3の手前にCloudFrontを置かないといけない模様。(S3のwebhosting機能にはssl証明書を紐付けられない😇)

ACMでssl証明書を発行

CloudFrontは「バージニア北部」のACMでないと設定できないので注意です。

f:id:moyashidaisuke:20190915143441p:plain

CloudFront作成

気をつけないといけないのは、「Origin Domain Name」にS3のbucket名が候補で出てくるのですがそれを選んではいけないです。S3のhosting用のエンドポイントURL(XXXXXX.s3-website-XXXXみたいなの)を設定しないと、S3で設定したリダイレクトが効きません。

f:id:moyashidaisuke:20190915143822p:plain f:id:moyashidaisuke:20190915143832p:plain

aliasにはルートドメイン(moyashidaisuke.com)を設定します。

f:id:moyashidaisuke:20190915143919p:plain

あとはデフォルトでOK

Route53からCloudFrontへのルーティング

AレコードのエイリアスをS3からCloudFrontに変更します。(ちょっと時間経たないと出てこない場合があります)

f:id:moyashidaisuke:20190915144049p:plain

動作確認

httpの時と一緒!

$ curl --dump-header - https://moyashidaisuke.com

HTTP/2 301
content-length: 0
location: https://www.moyashidaisuke.com/
date: Sun, 15 Sep 2019 05:24:41 GMT
server: AmazonS3
x-cache: Hit from cloudfront
via: 1.1 3713468e68e20152a89ab133cc836321.cloudfront.net (CloudFront)
x-amz-cf-pop: NRT12-C3
x-amz-cf-id: 1_-DGqh3gG6VKKEoUmGcziWtdZppFQc8z_waGPaFE5j15oK0DGo5tQ==
age: 1000

料金(2019/9/15時点)

S3

aws.amazon.com

ストレージ料金はかからないので無視。 リクエスト回数により重量課金。

f:id:moyashidaisuke:20190915144419p:plain

だが、1000件あたり0.00037USD で、www無しのリクエストがくる事はほとんど無いはずなので無視できる範囲だと思う。

CloudFront

aws.amazon.com

データ転送量、リクエスト数で従量課金だが、www無しのリクエストがくる事はほとんど無いはずなので無視できる範囲だと思う。多分。

ACM

aws.amazon.com

プライベート CAは使わないので無料。

Route53

aws.amazon.com

ホストゾーンごとに 0.50 USD/月 – 最初の 25 個のホストゾーン

なので、$0.5=55円くらい が必ずかかります。

100 万件のクエリごとに 0.400 USD – 最初の 10 億件のクエリ/月

はてなブログへのアクセス(www.moyashidaisuke.com)も適用されるので、100万PVだったら$0.400= 44円くらいかかります。 1000万PVだと10倍。

まあこのブログはそんな事にはならないと思うので無視できる範囲でしょう、、、

料金まとめ

$0.5は必ずかかる。PVが爆発したら従量課金でもっとかかる。

まとめ

勉強がてらやってみましたが、普通はお名前.comのURL転送サービス使うのが一番楽でコスパも良いと思います😇

S3にACM紐付けられないの不便。(実質publicサービスとして使えないじゃん、、、