CDP:URL Rewritingパターン

提供:AWS-CloudDesignPattern
移動: 案内, 検索
寄贈したアーキテクト

静的コンテンツの退避

目次

解決したい課題

 Webサービスを仮想サーバーで提供する場合、アクセス数が多くなると仮想サーバーの数を増やしたり仮想サーバーのスペックを上げたりして負荷に対応する。しかし、アクセスの大半は静的なコンテンツへのリクエストであることが多く、静的コンテンツのアクセスをどう分散するかは重要な課題となる。

クラウドでの解決/パターンの説明

 静的コンテンツのアクセス分散方法として、インターネットストレージを利用する方法がある。こうすれば、仮想サーバーを増強することなく負荷対策を行うことが可能になる。

 この方法を用いるには、静的コンテンツのURLをインターネットストレージのURLに変更する必要があるが、静的コンテンツを直接修正する方法のほかに、Webサーバーのフィルター機能を利用して配信時にURLを変更する事ができる。また、インターネットストレージから配信する代わりに、コンテンツ配信サーバからコンテンツを配信する事もできる。

実装

 AWSでは静的コンテンツ配信にS3を利用できる。また、S3上に配置したコンテンツをオリジナルとし、コンテンツ配信サービスのCloudFrontを利用すれば全世界に遅延なくコンテンツを配信できる。

(手順)

  • EC2上の静的コンテンツ(JavaScript/CSS/画像など)の一部をS3にアップロード(同期)する。
  • 必要に応じて、静的コンテンツがアップロード(同期)されるS3をオリジナルとしたCloudFrontを作成する(CloudFrontを利用する場合はオリジナルサーバーをS3ではなく直接EC2にすることも可能)。
  • HTMLタグ上の静的コンテンツのURLをS3もしくはCloudFrontのものに書き換える。
  • Apacheのフィルターモジュール(mod_ext_filter[関連ブログ 1]/mod_sed[関連ブログ 2])やプロキシーとして用意したNginxなどで動的に書き換えることも可能。
  • CloudFrontを用いればHTMLタグを書き換えること無く、指定のパスパターンのみS3から静的コンテンツ取得するように設定できる。

構造

6wNg0ISJczU5Pz1m-570C8.png

利点

  • 静的コンテンツのアクセスをS3/CloudFrontに分散することにより、負荷に強くなり、またEC2のコストも削減できる。
  • CloudFrontを利用する場合は、全世界配信に対する距離を起因とするレイテンシー対策にもなる。
  • mod_ext_filter/mod_sedやNginxなどを利用している場合はフィルターを入れることで、元のHTMLファイルに手を入れずにパターンを適用できる。またフィルターをオフにすることで、CloudFrontを使わない形に戻すことも容易にできる。

注意点

  • CloudFrontを利用する場合は、コンテンツがキャッシュされてしまうため、削除や更新に時間がかかる場合がある。

その他

関連ブログ

  1. suz-lab - blog の「"mod_ext_filter"で画像などのURLをCloudFrontのものに」( http://blog.suz-lab.com/2010/03/modextfilterurlcloudfront.html )
  2. suz-lab - blog の「"mod_sed"でHTML上の画像などのURLをS3やCloudFrontに置換」( http://blog.suz-lab.com/2012/05/modsedhtmlurls3cloudfront.html )
個人用ツール
名前空間
変種
操作
CDPメニュー
ツールボックス