0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【AWS】エッジロケーションの概要から使い方まで (CloudFront編)

0
Posted at

はじめに

image.png
AWSグローバルインフラストラクチャ紹介ページにて、「リージョン」「AZ(アベイラビリティゾーン)」と一緒に名前が出てくる「エッジロケーション」だが、実際に「エッジロケーション」について調べようとしたところ、AWSから「エッジロケーションとは~である」と説明するようなページを見つけられなかった。

本記事では、エッジロケーションの概要から利点、エッジロケーションを用いたサービスの一つである「Amazon CloudFront」の実装方法までをまとめていく。

紹介しないこと
・リージョンとAZ(アベイラビリティゾーン)について
・配信したいコンテンツの量によるCloudFrontのパフォーマンス変化について

もしもリージョンとAZに関して知りたい方は下の記事をお勧めします。少し情報は古いですが、AZとリージョンの説明が分かりやすく記載されています。
https://biz.nuro.jp/column/aws-mama-063/
(AWSの「マルチAZ」とは?DR対策で担える役割を考える|ソニー|コラム|NURO Biz(ニューロ・ビズ))

エッジロケーションとエッジネットワーク

image.png

AWSグローバルインフラストラクチャの紹介にはデータセンターを配置している場所を指す「リージョン」や、その地理に配置されたデータセンター群を指すAZ(アベイラビリティゾーン)の他に、「エッジロケーション」という設備(データセンター)が世界中に存在する。

このエッジロケーションではコンテンツ配信のキャッシュを保管し、それを活用することでユーザーへの最適なコンテンツ配信を実現することができる。

エッジロケーションを利用したAWSサービスである「Amazon CloudFront」や「AWS Global Accelerator」の説明では、「エッジロケーション」を知っている前提で話が進み、「グローバルエッジネットワーク」という言葉が主に使われるため、「あれ?エッジロケーションは?」と少々置いてけぼりを食らう気持ちになった。

エッジロケーションを用いて提供されるネットワークが「グローバルエッジネットワーク」であり、AWS Global AcceleratorやAmazon CloudFrontが提供するサービスを実現可能にしているのが、エッジロケーションと解釈しても問題ないと思われる。

image.png

image.png

【補足】そもそもAWSにおけるコンテンツ配信って何

【一例】S3 静的ウェブサイトホスティング

コンテンツの配信として代表的なものは、S3を用いた静的Webサイトホスティングが挙げられる。
手順としては大きく5通り存在し、HTTPサーバーを構築せずとも静的なWebサーバーを使えるようになるというものである。

①S3ファイルへファイルを突っ込む(今回はAI協力のもと作成されたHTMLファイルを用います)

image.png

②S3のプロパティタブより、「静的Webサイトホスティング」の有効化

image.png

③バケットポリシーの設定

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicReadGetObject",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::amzon-s3-testrh239u9wdhoq/*"
        }
    ]
}

④パブリックアクセスブロックの無効化

image.png

⑤設定完了(プロパティタブのurlを押下すると、ページが表示される)

image.png

image.png

エッジロケーションを用いることの利点

では、エッジロケーションがあるのと無いので、どのような変化が見られるのだろうか。

今回はAWSにおけるコンテンツ配信として、Amazon S3による静的ウェブサイトホスティングを例として挙げ、東京リージョン[ap-northeast-1]にS3バケットを配置している想定で話していく。静的ウェブサイトホスティングを有効にすると、世界中のインターネットからアクセスが可能になる。

image.png

エッジロケーションが無い状態だと、ユーザーはコンテンツを取得するために、直接オリジンとなるS3バケットへアクセスする必要がある。コンテンツの配信拠点は東京にあるため、もしもアメリカやオーストラリアといった遠方のユーザーからアクセスしようとなると、それなりのレイテンシーが発生する。

さらにはコンテンツ配信のため、S3へ直接リクエストを送信しているため、それなりのコストがコンテンツの提供側へ発生してしまう。

(S3の料金表)
image.png

エッジロケーションを用いずに広いエリアでコンテンツ配信を実施する場合、コンテンツ配信を受ける側はレイテンシーによって、コンテンツ配信をおこなっている側はコストによって損を被ってしまう。
win-winの逆、lose-loseである。

それではエッジロケーションを用いた[Amazon CloudFront]を設定すると、どのような変化が起こるだろうか。
エッジロケーションを用いるサービスは複数存在するが、今回はS3の静的ウェブサイトホスティングと相性がいい、「Amazon CloudFront」を例として挙げていく。

①CloudFront設定後、キャッシュをエッジロケーションへ保管する
CloudFrontを設定後、いきなりエッジロケーションからコンテンツが配信されるわけではなく、キャッシュを保管するために一度オリジンを通してコンテンツを取得する。

image.png

②エッジロケーションがコンテンツ配信を担当する
CloudFront(エッジロケーション)がキャッシュを保管後、ユーザーからのリクエストに保管しているコンテンツキャッシュが当てはまれば、CloudFront(エッジロケーション)がコンテンツ配信を実施してくれる。(もしもキャッシュに当てはまらなかった場合は、①の手順で再度オリジンからキャッシュを保管する手順を実施する。)

image.png

先述した通り、エッジロケーションというものは世界各地に配置され、ユーザーに近いエッジロケーションがコンテンツ配信を担当するため、低レイテンシーなコンテンツ提供を可能にする。

image.png

CloudFrontの料金

CloudFrontには4つのパターンでコストが発生する。

image.png

①エッジロケーションへのデータ転送
キャッシュを確保する際に、S3へリクエストするため発生する。キャッシュがヒットする限り、この料金は発生しないが、キャッシュがヒットしなかった場合は再度S3へリクエストを送信し、コンテンツのキャッシュを確保する。

image.png

②インターネットへの転送
エッジロケーションがキャッシュをインターネットへ公開し、ユーザーへ送るためのコスト。

image.png

③HTTPメソッドのリクエスト料金
エッジロケーションがリクエストを配信する際、ユーザーからリクエストを受け取る際に発生するコスト。
image.png

④オリジン「への」データ転送
もしもユーザーがオリジンに対してPOST/PUT/DELETEといったリクエストを送ることができる場合、そのリクエストにかかるコスト。

image.png

結局CloudFrontを使った方がお得なのか?

「コンテンツ配信を最適化して実施するとは言うが、使用するサービスを足したなら料金にも影響は出てくるだろう。結局、どれほどのコンテンツ配信量ならばCloudFrontの費用対効果が高くなるのか」という問いが浮かんだ。

「国内利用でアクセス数が低ければS3単体の方が安いのかな」と考えたが、CloudFrontには常時無料利用枠というものが存在する。
image.png

対してS3にもデータ転送に関するコスト無料枠が存在するため、どちらが安いかを具体的に考えたい。(CloudFrontへの転送量が無料ということに目をそらしながら)
image.png

今回はCloudFrontのHTTP(S)の利用枠があまりにもデカすぎるため、今回はコストに大きく影響しそうな「データ転送量」を中心に考える。

image.png

データ転送量のみで考慮すると、転送量が4TBまではCloudFrontの方がコストは低く、4TBを超えたあたりからS3単体でのコストが低くなってきている(キャッシュのヒット率によってはもう少し低い容量でS3単体のコストが低くなってくる)。

ただ、CloudFrontには下記のようなメリットが存在する。

  • HTTP(S)配信を可能にできる
  • オリジン(S3)バケットへのアクセスを制限し、プライベート化できる
  • キャッシュによってレイテンシーを減らすことができる
  • (他にもいろいろ...)

単に「コンテンツを配信するためのコスト」のみを考慮すればS3単体でいいかもしれないが、CloudFrontを用いてコンテンツの配信を最適化することで、ユーザーの満足度を高めて継続的なアクセスのきっかけとなったり、セキュリティの確保にもつながったりすることなどの効果も考慮すると、CloudFrontを導入することも検討していいのではないだろうか。

CloudFrontを設定してみる

ここまで、CloudFrontの概要や魅力を伝えてきたが、最後にAWS上での基本的な設定方法を記載する。
(前述のS3ウェブサイトホスティングを設定した状態から始めているため、初めて設定する方は、一度上のinfoを参考にしてここに戻ってきてください。)

①CloudFrontディストリビューションを設定する(今回はデフォルトで設定)

上記infoよりS3の静的Webサイトホスティングを実装してくださった場合、S3でWebサイトホスティング用のURL使った方がいいけど使う?といった提案がされますが無視していいです。のちにWebサイトホスティングを無効化します。(「Webサイトのエンドポイントを使用」を押さない)

image.png

image.png

②作成したディストリビューションの[一般→設定]より、[Default root object]を、S3オブジェクトの名前にて設定し、5~10分待機する(デプロイ待ち)
(今回は[index.html]をバケットに突っ込んでいるため、[index.html]を記入)

image.png

③バケットポリシーを変更

IDをマスクしているため、そのまま張り付けて設定すると失敗します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowCloudFrontServicePrincipal",
            "Effect": "Allow",
            "Principal": {
                "Service": "cloudfront.amazonaws.com"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::amzon-s3-testrh239u9wdhoq/*", // S3バケットのarn
            "Condition": {
                "StringEquals": {
                    "AWS:SourceArn": "arn:aws:cloudfront::**************:distribution/ELTHNOY4JZKE9"
                    // ***** = 自身のAccount ID
                }
            }
        }
    ]
}

③+α. パブリックアクセスを全てブロックする

image.png

③+β. 静的ウェブサイトホスティングを無効化する

image.png

④設定完了(ディストリビューションのドメイン名をブラウザに張り付けて実行)
image.png

(HTTPSへのリダイレクト対応もされている)
image.png

おわりに(参考文献)

もう少し詳しく知りたい方はこちらをお勧めします(5年前の記事になってしまいますが)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?