Lightsail が CloudFront をサポートしたようなので試してみた。

2020-07-26

先日以下の記事にて Lightsail が CloudFront を提供したようなので試してみました。今までも Lightsail で実行している Web サイトに CloudFront を適用することは出来ましたが、Lightsail の機能の一部として CloudFront がサポートされたということで色々と便利になっていそうです。

Amazon Lightsail now offers CDN distributions to accelerate content delivery

https://aws.amazon.com/jp/about-aws/whats-new/2020/07/amazon-lightsail-now-offers-cdn-distributions-to-accelerate-content-delivery/

まずは結論

一言で言えば VPS らしい Lightsail の CloudFront でした。普通の CloudFront の違いが以下の点です。

Lightsail の CloudFront と普通の CloudFront の違い

  • 3つのプランがあり、一ヶ月当たりの転送量が決まった定額制。超過した分は別途料金が発生する。
  • キャッシュの設定が予めプリセットで用意されている。また独自の設定を追加することも出来る。
  • SSL 証明書の発行やメトリクスの確認など、CloudFront に関わる全て操作が Lightsail のコンソールから出来る。
  • Lightsail の DNS ゾーンで CloudFront のディストリビューションを Alias レコードで指定出来る。
  • 一部の普通の CloudFront で出来た設定が出来ない(詳細は後述)

転送量が定額制っていうのが非常に VPS っぽいです。定額制なので転送量が少ないと普通の CloudFront より割高ではありますが、使い切れれば料金は約半分です。また普通の CloudFront は転送量だけではなくリクエスト数でも料金が発生しますが、Lightsail の CloudFront は転送量だけです。

料金の比較(転送量)

一ヶ月の転送量を 50 GB とした場合、

  • Lightsail の CloudFront は $2.5 (初年度は無料!!)
  • 普通の CloudFront は $0.114/GB * 50 = $5.7 (東京リージョン)

参考:
https://aws.amazon.com/lightsail/pricing/?nc1=h_ls
https://aws.amazon.com/jp/cloudfront/pricing/

実際にやってみた

ディストリビューションの作成

まずは Lightsail のコンソールのネットワーキングにアクセスし、【ディストリビューションを作成する】を選択します。

オリジンを選択します。選択肢にはオリジンとして適用可能なものが出てきます。ここでは当サイトが実行されているインスタンスを選択しました。

インスタンスを選択すると下記が表示されました。選択されたインスタンスが wordpress であることを認識し、wordpress に適したキャッシュ設定を適用してくれるみたいです。適用しない理由はないので【はい、適用します】を選択します。

キャッシュ動作が【WordPress に最適】となりました。次にプランの選択ですが、初年度無料の 【50GB/月】を選択します。サイトに合わせて選びましょう。

【ディストリビューションを識別する】ですが、どうやらここは CloudFront のディストリビューションに設定される CNAMEs らしく、既に設定されているドメイン名は設定出来ませんでした。Lightsail 内でインスタンス等を含めた一意の名前でないといけないみたいです。しっかりと

Lightsail リソース名は一意であることが必要です。

って書いてありますね(´・ω・`)

最後に【ディストリビューションを作成する】を選択するとディストリビューションの作成されます。作成が完了するまで30分程度掛かりました。気長に待ちましょう。

カスタムドメインの設定

ディストリビューションの作成されたら次にカスタムドメインを設定します。カスタムドメインを設定しないと dpsgqbvmxn87a.cloudfront.net のような無作為に生成されたドメインでユーザーにアクセスさせる必要があります。これでは様にならないので、www.doc-sin.life のような所有しているドメインでアクセスさせたいところで、それに必要なのがカスタムドメインの設定です。

作成したディストリビューションのページの【カスタムドメイン】を選択し、まずは【証明書を作成】を選択します。

【プライマリドメイン】にユーザーにアクセスさせたいドメインを入力します。ここでは【www.doc-sin.life】と入力しています。【代替ドメインおよびサブドメイン】はオプションで入力する必要はありませんが、他にもユーザーにアクセスさせたいドメインがあればここに入力しましょう。入力したら【作成】を選択しましょう。

画面に出ている通りに DNS レコードを作成します。どうやら定期的に DNS の反映を確認してくれているので作成後しばらくしたら検証は完了するはずです。10分経っても検証が終わってなかったらレコードを見直してみましょう。

検証が完了したら下記のようになります。

証明書の検証が完了したら【カスタムドメインが無効になっています】がアクティブになっているので右のスイッチを選択しましょう。しばらくするとカスタムドメインが有効になります。

カスタムドメインが有効になると以下のようになります。

最後の仕上げでカスタムドメインの値を CloudFront のディストリビューションのデフォルトドメインの DNS レコードを作成します。ただし DNS のゾーンを Lightsail のそれか、それ以外かでレコードタイプが変わってきます。

Lightsail 以外で DNS ゾーンを管理していた場合はレコードタイプは CNAME になりますが、Lightsail で DNS ゾーンを管理していた場合はレコードタイプは A (正確には AWS 独自のレコードタイプ Alias)になります。レコードタイプ CNAME と A 、何が違うのかと言うと一言でいうと DNS への問い合わせの回数が違います。つまり A レコードのほうがパフォーマンスが良くなります。特に理由がない限りは A (Alias)レコードにしておくほうが良いです。

Lightsail で DNS レコードを管理していた場合、レコードの解決先として作成済みの CloudFront のディストリビューションが選択出来るようになっています。

ここまで出来たら Web ブラウザでカスタムドメインでアクセスしページが表示されるか確認してみましょう。問題がなければ正常にページが表示されるはずです。

動作確認

しかしページが表示されただけでは本当に CloudFront が有効になっているのか、怪しいかもしれないので下記のようにして確かめてみましょう。

まず下記のようなコマンドを実行し4つの IP アドレスが返ってくることを確認します。これは CloudFront のディストリビューションの IP アドレスです。念の為ディストリビューションのデフォルトドメインに対しても実行してみましょう。同じ IP アドレスが返ってくれば大丈夫です。

$ dig www.doc-sin.life +short
99.86.193.128
99.86.193.54
99.86.193.15
99.86.193.117
$ dig dpsgqbvmxn87a.cloudfront.net +short
99.84.55.119
99.84.55.77
99.84.55.105
99.84.55.4

続いて以下のようにサイトのトップページに対して実行しています。x-cache: Miss from cloudfront が返ってくれば CloudFront が正常に機能しています。

$ curl -I https://www.doc-sin.life/?p=1524
HTTP/2 200 
content-type: text/html; charset=UTF-8
date: Fri, 24 Jul 2020 11:39:34 GMT
server: Apache
x-pingback: https://www.doc-sin.life/xmlrpc.php
link: <https://www.doc-sin.life/index.php?rest_route=/>; rel="https://api.w.org/", <https://wp.me/paWyRl-oA>; rel=shortlink
x-frame-options: SAMEORIGIN
cache-control: max-age=0, no-cache
x-cache: Miss from cloudfront
via: 1.1 53befccebe9d6058aad8082298af366e.cloudfront.net (CloudFront)
x-amz-cf-pop: NRT20-C1
x-amz-cf-id: AGEkmzM0fBsYJP-V2hBwd3fubXa9tAPfut7ynhsZsYUbpG6j_vOKeQ==

普通の CloudFront との差異

いくつか Lightsail の CloudFront では使えない機能が確認出来ました。それはカスタムヘッダー付与のです。これは何なのかと言うと以前紹介した、CloudFront + Lightsail + WordPress で超簡単にセキュアでハイパフォーマンスなサイト構成を作る。で記事内で使っている機能です。CloudFront を経由せずインスタンスの IP アドレスに直接アクセスしてくる怪しい輩をブロックするために使っています。それが Ligthsail の CloudFront では使えませんでした。

他にもカスタムエラーページオリジンのフェイルオーバーといった便利な機能が使えなそうです。少なくともコンソール上にそれらしき設定が見つかりませんでした。

と言ってもキャッシュ設定も独自に設定出来る余地があるなど VPS のオプションとしての CDN の機能は十分に果たしていると思います。