AWS再入門ブログリレー Amazon CloudFront編

2020.08.31

こんにちはHIRANOです。

当エントリは弊社コンサルティング部による『AWS 再入門ブログリレー 2020』の 20日目のエントリです。

このブログリレーの企画は、普段 AWS サービスについて最新のネタ・深い/細かいテーマを主に書き連ねてきたメンバーの手によって、 今一度初心に返って、基本的な部分を見つめ直してみよう、解説してみようというコンセプトが含まれています。

AWS をこれから学ぼう!という方にとっては文字通りの入門記事として、またすでにAWSを活用されている方にとっても AWSサービスの再発見や2020 年のサービスアップデートのキャッチアップの場となればと考えておりますので、ぜひ最後までお付合い頂ければ幸いです。

では、さっそくいってみましょう。20日目のテーマはCloudFrontです。

CloudFrontの基本

さて、先日こちらの記事が話題になりました。

水樹奈々さん結婚おめでとうございます!発表のブログが落ちない理由(わけ)

ここで活躍したのでCloudFrontです。

CloudFrontはAWSクラウド上のCDNサービスです。

「CDN? 世界中に配信しないから不要だよ。」と思われる方も多いかと思いますが、 CloudFrontは中小企業のWEBサイトからグローバル企業のWEBサービスまで幅広く活用できるサービスです。 是非この機会に導入を検討してみてください。

以下、具体的な機能をみていきましょう。

コンテンツキャッシュ

一般的なWEBシステムでは、ユーザがアクセスする毎に、WEBサーバーはHTML,CSS,画像などをインターネットに送り出します。 そのため、アクセスが増加すると、WEBサーバーの負荷も増加してしまいます。 そこで、CloudFrontを利用すると、アクセスが増加してもコンテンツキャッシュをレスポンスとして返すため、オリジンサーバー(WEBサーバー)の負荷を抑えることができます。

引用元 20190730 [AWS Black Belt Online Seminar] Amazon CloudFrontの概要

エッジロケーション

また、CloudFrontは世界各地にあるエッジロケーションから配信します。ユーザに一番近いエッジを自動的に選択して、そこからコンテンツを配信するため、コンテンツのダウンロード時間も早くなり、ユーザ体験が向上します。

引用元 20190730 [AWS Black Belt Online Seminar] Amazon CloudFrontの概要

オリジン

CloudFrontからみて、コンテンツを提供するWEBサーバーを「オリジン」と呼びます。EC2,ALB,S3などAWSのサービスをオリジンとして指定できます。またAWS以外のWEBサーバもオリジンとして指定することができます。「負荷対策のためAWSに移行したいが、時間がない」というようなケースでも、まずCloudFrontから導入してみることも可能です。

引用元 20190730 [AWS Black Belt Online Seminar] Amazon CloudFrontの概要

セキュリティ

CloudFrontでは次のようなサービスと連携して、WEBサイトのセキュリティ対策を向上させます。

ACM

AWSが提供する無料SSL証明書が利用できます。簡単/低コストでhttps化が実現できます。

AWS Shield

DDoS攻撃を緩和するAWS Shieldがデフォルトで利用できます。こちらも無料です。

AWS WAF

オプションとしてAWS WAFが利用できます。SQLインジェクションのようなアプリケーションレイヤーの攻撃から、オリジンサーバを保護できます。

やってみた

オリジン

オリジンは、あらかじめ準備していたEC2(Apache,PHPインストール済み)を利用します。 次のようなテストコードで動作確認します。

<?php
  sleep(1); // 負荷の代わり
?>
<html>
 <head>
   <title>Test</title>
 </head>
 <body>
   <h1>テスト</h1>
   <p>
<?php
   echo date('Y年m月d日');
?>
   </p>
 </body>
</html>

通常のWEBアプリケーションはDBアクセスなどの処理時間を要します。今回はその処理時間の代わりに1秒のsleepを入れてます。

CloudFrontの構築

CloudFrontコンソールにアクセスして、[Create Distribution] を選択します。

[Web] セクションの [Get Started] を選択します。

[Origin Domain Name]にオリジンのDNS名を入力します。(例: ec2のパブリック DNS) 入力すると[Origin ID]が自動的に設定されます。

他はデフォルトのままで、最下部の[Create Distribution] を選択します。

構築までにしばらく待ちます。Statusが[In Progress]から[Deployed]になれば、準備完了です。 (公式ドキュメントでは20~40分かかるとの記述がありますが、3月に高速化されています。参考:CloudFrontの作成や更新時間が約5倍高速になりました

[ID]を選択すると、詳細が表示されます。[Domain Name]をコピペしてブラウザでアクセスすると、CloudFront経由でアクセスできます。

動作確認

今回は、Chromeのデベロッパーツールを利用してダウンロード時間を計測します。

初回アクセス

PHPが実行され、1.16sかかりました。

2回目アクセス

CloudFrontのキャッシュが利用され、26msと大幅に改善されました。

CloudFrontを利用する際のTIPS

キャッシュコントロール

WEBサイトのコンテンツの中には、キャッシュした方が良いもの、しない方がよいもの様々あります。例えばサイトのロゴはほぼ変わることがないので、長い時間キャッシュさせても問題ありません。しかしCMSの管理画面などは、キャッシュ時間をゼロにした方が使いやすくなります。

このようにキャッシュ時間をコントロールすることで、CloudFrontをより活用することができます。

キャッシュ時間は、オリジンサーバーが送り出すヘッダ情報と、CloudFront側のTTL設定でコントロールします。実際に調整する際は下記を参考にしてください。

引用元 20190730 [AWS Black Belt Online Seminar] Amazon CloudFrontの概要

キャッシュファイルの無効化(Invalidation)

WEBサイトのコンテンツをアップデートした際など、CloudFrontのキャッシュを削除したいケースが出てきます。その時利用するのが、Invalidation機能です。これを使うと、個別のファイルや指定したフォルダ以下のファイル、全ファイルなど自由に指定してキャッシュを削除できます。

引用元 20190730 [AWS Black Belt Online Seminar] Amazon CloudFrontの概要

課金

CloudFrontの料金は完全従量課金です。アクセスの少ない小規模なサイトでも安心して導入できます。 詳細はこちらを参照してください。 Amazon CloudFrontの料金

CloudFrontの料金の特徴として、「料金クラス」というものがあります。利用するエッジロケーションを制限することでコストを抑えることができます。 例えば、対象が日本だけで十分であれば、クラス200。北米、ヨーロッパだけであればクラス100。のように選択できます。

引用元 20190730 [AWS Black Belt Online Seminar] Amazon CloudFrontの概要

まとめ

CloudFrontの主な特徴を簡単にまとめてみました。CloudFrontは用途を問わず全てのWEBサイトで活用できるサービスです。 WEB開発に携わっている皆さん、是非一度お試しください。