Nedia What's up!

ネディアのエンジニアによるIT技術やサービスの紹介・検証などをお届け!

CloudFrontで負荷分散

恒例のAWSシリーズです。今回取り上げるのはCloudFrontです。

CloudFrontって何?

CloudFrontはAWSで提供されるCDNのサービスです。

CDNはContents Delivery Networkの略で、画像や動画等のHTMLファイル等に比べてファイルサイズが大きなコンテンツを分散させ、スムーズに配信させるネットワークのことです。

ちなみにCDNはakamaiとかが有名ですね。

HTMLファイルやCSS等のテキスト系のコンテンツはは今まで通りのサーバで運用し画像を別サーバに移すことで、サーバ自体の負荷が下がるほか、画像分のApacheのプロセス数も減るので理論的には同時アクセス数も増えることになります。

CloudFrontの特徴

CloudFrontの特徴は公式ページによると以下のようになっています。

  1. 表示を高速化!
  2. 大量アクセスに対応!
  3. サーバー引っ越し不要!
  4. すぐはじめられて低価格

ちなみにサーバ環境自体はAWSを使用しているかどうかの制限はないので、自社サーバ等で表示速度に不満がある場合には検討してみても良いのではないでしょうか。

CloudFrontを使ってみる

対象バーチャルドメインの準備(AWS以外のサーバでもOK)

ではCloudFrontを実際に使ってみたいと思います。

まず、当社のWEBサーバ内にawstest.nedia.ne.jpというバーチャルドメインを作成しました。当社ホームページのTOPページのみ丸ごとコピーしたものです。

cf01

もちろんEC2でApacheを立ち上げて使ってもOKですし、以前ご紹介したようにS3で公開したページでもOKです。

CloudFrontの設定

CloudFrontにアクセスして設定を進めます。Create Distributionをクリック。

cf02

次の画面ではWebかRTMPかを選択しますが通常はWebを指定することになると思います。なおRTMPは動画等のストリーミング配信で使用されるものです。

cf03

CroudFrontのオリジンサーバ(データを格納する大元のサーバ)の設定です。

cf04

  • Origin Domain Name:ここで指定したサーバが大元のデータを格納するサーバとなります。
  • Origin Path:Origin Domain Nameで指定したサーバ内で更にパスを指定するときに使用します。今回は空欄。
  • Origin ID:Origin Domain Nameを入力すると自動的に入力されます。
  • Origin Protocol Policy:オリジンサーバのプロトコル指定。今回はHTTPのみなのでHTTP Onlyを選択。
  • HTTP Port:HTTPポート。通常は80。
  • HTTPS Port:HTTPSポート。通常は443。

以降はデフォルトのまま設定しました。

次のページに進むと10分ほどで設定が完了します。Domain Nameのところにあるのが今回CDNとして使用するドメイン名になります。

cf05

動作の確認

これでWebページが丸ごとCDNにコピーされました。

例えば
http://awstest.nedia.ne.jp/img/bnr_blog.png
で表示されている画像が
http://d4u76n627nig5.cloudfront.net/img/bnr_blog.png
で表示できればOKとなります。

cf06

無事表示できましたね。

どれくらいのサーバで負荷分散しているのか

試しにNSLOOKUPコマンドで指定されたドメイン名を正引きしてみたところ、NSLOOKUPを行う度に表示されるIPアドレスが変わるので、多くのサーバが使われているんだなぁということが分かります。

cf07

最後にHTMLソースで画像のパスをCloudFront指定のドメイン名に変更すれば完了です。

まとめ

サーバ管理者としての視点から考えると、やはりサーバの負荷が減るので健全なサーバ運用が期待できるのではないかと感じました。

特に画像系のコンテンツが大量にあるとI/Oで足を引っ張られてしまうこともあるので、高負荷なサイトでは導入検討をしても良いのではないかと思います。

また、実は検証段階でEC2等で運用しているドメインでないとCloudFrontは運用できないという先入観がありましたが、実際に弊社管理下のサーバでも運用ができることが分かったので、導入の敷居は低いのではないかと思いました。

CloudFrontはまだ終わりません。次回は今回設定したCloudFrontにWAFを設定したいと思います。