はじめに
こんにちは。Tsukasaです!
前回のAPI Gateway + Lambdaに引き続き今回はCloudFrontを身の回りの物に例えて考えてみました。自分の中で少しでも何の機能なのか曖昧な場合はこのように身の回りの物に例えてわかりやすく考えていけたらなと思います。
それでは早速見ていきましょう!
CloudFrontとは
そもそもCloudFrontとは何でしょうか?
CloudFrontとはAWSが提供する高速なコンテンツ配信ネットワーク(CDN)サービスです。世界中に配置されたエッジロケーションを利用し、静的・動的なWebコンテンツ、動画などを低遅延で配信します。これを利用することで、Webサイトの表示高速化、オリジンサーバーの負荷軽減、安全なHTTPS通信、DDoS攻撃防御が可能になります。
この説明だけでわかれば誰も苦労はしませんよね?
自分はこの説明だけでは何となくしかわかりません。人によってはこの説明だけでも十分理解できると思いますが、それはAWSに対する解像度の高さや業務経験など、培ってきたものが人によって違うからだと思います。
ライブビューイングに例えてみた
それでは本題に入っていきます。
CloudFrontを使うときよく一緒に使うのがS3バケットだと思います。
S3バケットは画像や動画、ファイルといったものを保存するのに使うバケットです。
今回はこのS3バケットを東京ドームとして考えます。
東京ドームでライブをやっています。このライブを東京ドームで見られるのは大体55,000人くらいです。
物凄いチケット争奪戦を制したラッキーな人たちです。
しかしファンは沢山います。チケットを買うことができなかった人達が一斉に東京ドームに押し寄せて無理にドームの中に入ろうとするとどういうことになるでしょうか?
大変なことになりますよね?現場は混乱し、大きな事故に繋がるかもしれません。
そんな時に使うのがCloudFrontです。
チケットを買うことができなかったファンは沢山いる。でも何とかしてリアルタイムでライブを見たい!!
そういう時実際にあることとしてはライブビューイングがありますよね
例えば
・札幌
・仙台
・名古屋
・大阪
・広島
・福岡
この6都市の映画館で東京ドームで行われているライブを生中継すれば、ライブのチケットを買えなかったファンもライブを見ることができます。
それによって東京ドームにチケットを買えなかった人達が無理に集まるといったことも起きません。
これがCloudFrontの役割です!
東京ドーム = S3バケット(オリジン)
6都市の映画館 = CloudFront
※CloudFrontはチケットを買えなかった人のためにライブビューイングをするようなサービスではありませんが、ここでは、わかりやすくS3への一極集中を避けるための説明として、ライブビューイングという表現使っております。
別の例でも考えてみた
こういった例えは自分たちの周りにもある様々な例で考えられるので、他の例えでも見ていきたいと思います。
今回もライブですが、ライブのチケットで考えたいと思います。
※今時のチケットはスマホの電子チケットが多いですが、敢えて紙のチケットで考えたいと思います。
ライブのチケットを買えたラッキーな人達は今度はチケットを発券する必要があります。
しかし、チケットを発券できる場所が東京ドームにしかなかったらどうなるでしょうか?
55,000人の人達が当日チケット発券場に並ぶことになり一人一人がチケットを発券することになります。
そうなると当然物凄い混雑することになり、様々な問題が発生することでしょう。
せっかくチケット争奪戦に勝ったのにライブの開始時間に間に合わない人なんかもいるかもしれません。
しかし実際チケットを発券できる場所は東京ドームだけではないと思います。
皆さんもコンビニでチケットを発券したことがありますよね?
今回はこのコンビニがCloudFrontの役割を担います!
東京ドームでもチケットを発券することができ、自宅近くのコンビニでもチケットを発券することができれば、東京ドームに一極集中することはなく、チケット発券のための混雑も起きません。そしてスムーズに入場することができます。
東京ドームのチケット発券場 = S3バケット(オリジン)
コンビニ = CloudFront
※こちらの例はS3への一極集中による遅延を防ぐという例になるため、CloudFrontがデータを生成(チケットを発券)しているわけではありません。実際にはS3に元データがあり、それをCloudFront側でデータをキャッシュする形になります。
実際のAWSの例で考えてみた
先程の例でCloudFrontが何なのか少しでも分かっていただけたら嬉しいです。
ここでは実際のAWSの例で見ていきたいと思います。
例えばS3バケットにドラマや映画といった動画が格納されていて、それを配信するサービスがあったとします。
※現にNetFlixはAWSのS3を使っているそうです。
視聴者は世界中にいるとします。
もしCloudFrontがないと、このS3バケットに世界中からユーザーが集中してアクセスすることになるので、大変なことになります。
そして世界中からアクセスすることで、遅延も発生して、ユーザーとしても不満が溜まることでしょう。
ここでCloudFrontを使って一極集中と遅延を防ぎます。
ライブビューイングの例では国内6都市の映画館としましたが、CloudFrontは世界中のエッジロケーションを利用することができます。
エッジロケーションは世界中に600あると言われていて、これにより東京リージョンのS3にある動画を世界中で高速配信することができて、通信の遅延を大幅に短縮することができます。
ユーザーは東京リージョンのS3バケットに直接アクセスすることなく、最寄りのエッジロケーションにアクセスするので、通信の遅延を短縮することができて、不満も溜まらないでしょう。
実際にCloudFrontとS3を組み合わせた構成図はこのような感じになるかと思います。
基本的にはユーザーがCloudFrontにアクセスして、CloudFrontがS3にアクセスをするという形になり、ユーザーが直接S3にアクセスするといったことはないかと思います。
終わりに
いかがでしたでしょうか?
よくわからないからこそ解像度を下げて、身の回りの馴染みのある例に例えることでわかることがあると思います。
勿論CloudFrontの機能はもっと奥が深く色々あるとは思いますが、まずは何となくでもこういう機能があるんだなってわかることで、とっつき易くなると思います。より細かい内容や、詳細は実際に業務で触れたりハンズオンを通して学べるかと思います。
まだまだわからないことだらけなので、今後も身近にあるもので例えて、各機能やサービスに対する解像度を上げていきたいと思います!
