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

2022.03.02

こんにちは、AWS事業本部コンサルティング部の森田です。

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

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

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

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

ざっくり、CloudFrontとは

CloudFrontとは、一言で述べますと、「様々なAWSサービスと連携しやすいCDNサービス」となっています。

本記事では、主にCloudFrontの以下の機能を紹介します。

  • コンテンツキャッシュ
  • エッジロケーションとリージョン別エッジキャッシュ
  • セキュリティ

では、それぞれについて見ていきましょう。

コンテンツキャッシュ

コンテンツキャッシュとは、動画や画像といったインターネット上で大容量となりやすいコンテンツに対して、 オリジンサーバの全段にキャッシュサーバを置き、そのキャッシュサーバが代わりにその大容量のコンテンツを配信します。

これにより、オリジンサーバの負荷を低減することに繋がります。

引用元 2020/10/28 [AWS Black Belt Online Seminar] Amazon CloudFront deep dive

 

エッジロケーションとリージョン別エッジキャッシュ

CloudFrontでは、310以上のグローバルなエッジロケーションを所有しております。 これによって、クライアントから最も近いエッジロケーションから配信することになり、より早くクライアントにコンテンツを届けることができるようになります。

引用元 2019/07/30 [AWS Black Belt Online Seminar] Amazon CloudFrontの概要

さらに、リージョン別エッジキャッシュ (REC)と呼ばれる機能もデフォルトでついています。

リージョン別エッジキャッシュとは、オリジンサーバとエッジロケーションの間にあるキャッシュとなっており、エッジロケーションよりも多くのキャッシュ容量を持っています。 これにより、より長くキャッシュを保持できるようになり、リクエスト頻度の低いコンテンツであっても、オリジンサーバまで取得する必要がなくなります。

引用元 2020/10/28 [AWS Black Belt Online Seminar] Amazon CloudFront deep dive

セキュリティ

CloudFrontでは、他のAWSサービスと連携してWebアプリケーションのセキュリティを向上させることができます。

引用元 2019/07/30 [AWS Black Belt Online Seminar] Amazon CloudFrontの概要

CloudFrontについてもっと

では、ざっくりと概要を紹介したところで、もう少し詳しくCloudFrontについてみていきましょう。

CloudFrontの仕組み

クライアントからのリクエストに対して下図のようにエッジロケーションの切り替え、コンテンツ取得を行います。

以下その流れになります。

  1. DNSサーバへCloudFrontのドメイン名の問い合わせ
  2. CloudFrontにドメイン名を問い合わせ
  3. CloudFrontでは、クライアントの位置情報を利用し、 位置情報DBから最適なエッジサーバのIPアドレスを取得し、クライアントへ応答する
  4. 3で取得されたIPアドレスへコンテンツの問い合わせ
  5. エッジロケーションでキャッシュがない場合は、リージョン別エッジキャッシュロケーションに問い合わせる
    5'. リージョン別エッジキャッシュロケーションもキャッシュを持っていない場合、オリジンサーバからコンテンツを取得する
  6. 取得したコンテンツをクライアントへ応答する

ディストリビューション

まず、CloudFrontでは、コンテンツを配信する際の設定を行う必要があります。 この設定は、ディストリビューションと呼ばれます。

ディストリビューションでは、配信するコンテンツの種類(Origin)、コンテンツを配信する場所、コンテンツ配信の追跡と管理の方法の詳細などを指定することができます。 このディストリビューションを作成することで、ドメインが作成されます。

 

引用元 2019/07/30 [AWS Black Belt Online Seminar] Amazon CloudFrontの概要

Origin

ディストリビューションを作成する際に、CloudFront によってリクエストが送信される場所を指定します。 この場所をOriginと呼び、大きく以下の4つに対して指定が可能です。

  • ELB
  • Amazon S3
  • MediaStore コンテナ
  • MediaPackage チャネル
  • HTTPサーバ(EC2、オンプレWEBサーバ)

Behavior

Behaviorとは、具体的なキャッシュのルールです。Behaviorでは、大きく以下の指定が可能です。

  • ビューワー(クライアント側の)プロトコルポリシー
  • HTTPメソッドの制限
  • ビューワーのアクセスを制限(署名付きURLの制御)
  • リアルタイムログの設定
  • キャッシュコントロール(Cache Policy / Origin Request Policy )

引用元 2020/10/28 [AWS Black Belt Online Seminar] Amazon CloudFront deep dive

CloudFront内の暗号化通信について

CloudFrontの通信はViewerとエッジサーバ、エッジサーバとオリジンサーバの2つがあります。

特に、ポイントとなるのは、S3静的WEBサイトホスティングの際はHTTP通信しか対応できないということです。

 

コスト

2021/12/1よりCloudFrontでも無料利用枠が発表されました。

1ヶ月あたり以下が無料枠となっております。

  • 1 TB のデータ転送 (アウト)
  • 1,000 万件の HTTP または HTTPS リクエスト
  • 2,000,000 件の CloudFront Function 呼び出し

一般的な課金対象は以下となります。

  • インターネットへのリージョン内データ転送アウト (GB 単位)
  • オリジンへのリージョン内データ転送アウト (GB 単位)
  • HTTP メソッドのリクエスト料金 (1 万件あたり)

※上記の料金は、2022/03/02時点のものです。実際に使用される際は、一度こちらよりご確認ください。

やってみる

では、実際にCloudFrontにEC2とS3バケットの2つをオリジンとして登録を行ってみます。

EC2をカスタムオリジンとして登録

まずは、パブリックサブネットに適当なHTTPサーバを構築します。 コンソールから、パブリックDNSを確認し、メモします。

続いて、CloudFrontのディストリビューションの作成を行います。

先ほどメモしたドメイン名をオリジンドメインに入力します。プロトコルにはHTTPのみを指定します。

他はデフォルトの状態で作成を行います。

作成後、デプロイ完了まで待ち、ディストリビューションドメイン名を開きます。

実際に、HTTPサーバのページが確認できれば問題なくCloudFrontが有効化されています。

S3バケットをオリジンに登録

まずは、適当なS3バケットを作成し、フォルダの作成とファイルのアップロードを行います。

S3バケットへのアクセスは、OAIを利用するため、パブリックアクセスをすべて ブロックで問題ありません。

では、先ほど作成したディストリビューションに、オリジンを追加していきます。

作成したS3バケットを選択し、 OAIの利用、バケットポリシーの自動更新を選択し、作成します。

オリジンの作成が終わりましたら、次は、ビヘイビアを作成します。

S3バケットのオリジンを選択し、パスパターンをimages/*として、あとはデフォルトの状態で作成します。

作成後、デプロイ完了まで待ち、ディストリビューションドメイン名/images/sample.pngを開き、問題なくコンテンツが表示されるかを確認しましょう!

最後に

『AWS 再入門ブログリレー 2022』の 20 日目のエントリ『Amazon CloudFront』編でした。

次回(3/3)の  杉金さんの「AWS Elastic Beanstalk」もお楽しみください!

参考

[AWS Black Belt Online Seminar] Amazon CloudFrontの概要

[AWS Black Belt Online Seminar] Amazon CloudFront deep dive