« 東京リージョンがAWS史上最速の初年度成長を達成 | メイン | 週刊AWS - 2012年5月7日 »

【AWS発表】Amazon CloudFrontが動的コンテンツをサポート

イントロダクション
Amazon CloudFrontのエッジロケーションネットワーク(現在30箇所あり、続々追加予定)を使えば、静的コンテンツやストリーミングコンテンツをハイスピード、ローレイテンシーでお客様のユーザーにお届けすることが可能です。

今日は、CloudFrontを使って、より迅速に動的でパーソナライズされたコンテンツを配信する一連の機能を紹介いたします。

動的でパーソナライズされたコンテンツとは?
ご存知のとおり、ウェブ上のコンテンツはURLまたはhttp://media.amazonwebservices.com/blog/console_cw_est_charge_service_2.pngといったようなUniform Resource Locaterによって識別されます。このようなURLはいつもコンテンツのユニークな部分を特定します。

URLは、クエリー文字列を含めることができます。これは疑問符("?")とサーバーがリクエストをパーソナライズするための追加情報で構成されています。 例えば、www.example.comというサーバーを持っている場合、http://www.example.com/userinfo.php?kentamagawahttp://www.example.com/userinfo.php?horiuchiといったURLにアクセスすると、引数としてユーザー名を受けとったPHPスクリプトを起動することにより特定のユーザーについての情報を返すといった具合です。

今まで、CloudFrontはエッジロケーションに保存するデータを特定するために、キーの一部としてクエリ文字列を使うことができませんでした。

しかし本日から、ユーザーがどこからアクセスしたかに関係なく、動的データへのアクセスを高速化し、アプリケーションをより速く、高速にレスポンスを返すようにするためにCloudFrontを使うことができるようになりました。

この変更により、Amazon CloudFrontはグローバルアプリケーションのさらに優れたコンポーネントになります。私達は、それぞれ独自にアプリケーションのパフォーマンスを向上するだけでなく、Route 53, Amazon S3, Amazon EC2といったようなAWSのサービスと連携することでよりうまく動作するよう、最適化のリストを組み立ててきました。

もっと詳しく知りたいですか?
それでは順を追って紹介していきましょう。

パーシステントTCPコネクション - 新しいコネクションを確立する際、サーバー・クライアント間で3ウェイハンドシェイクが必要なため、TCPコネクションの確立には少し時間がかかります。 Amazon CloudFrontは動的コンテンツのために各々のオリジンに対してパーシステントコネクションを使用しています。これにより各リクエストのパフォーマンスを低下させるコネクションのセットアップ時間を取り除きます。サーバーへのこれらの"長期にわたる"コネクションを再利用すると、数百ミリ秒に及ぶセットアップ時間をなくすことができます。クライアントからCloudFrontのエッジロケーションへのコネクションも可能な限り開いたままにしています。

マルチオリジンのサポート - 単一のCloudFrontディストリビューションから複数のオリジン(コンテンツのソース)を参照することができるようになりました。これによって例えば、画像をAmazon S3から、動的コンテンツをEC2から、そして他のコンテンツはサードパーティーのサイトから取得し、全てをひとつのドメインから配信するといったことも可能になります。単一ドメインから全てのサイトを配信することができるので、より実装がシンプルになったり、アプリケーヨン内で相対URLを資料できるようになったり、クロスサイトスクリプティングの制約を気にする必要もなくなります。

クエリ文字列のサポート - CloudFrontはキャッシュキーの一部としてクエリ文字列を使うことができるようになりました。このオプション機能により、特定のユーザーや都市(例えば、天候や交通)のような固有のコンテンツをエッジにキャッシュすることが可能になります。必要に応じてウェブサイト全体または選択した部分のクエリ文字列のサポートを有効にすることができます。

可変 Time-To-Live (TTL) - 動的コンテンツはキャッシュできないか、できても数分程度といった大変短い間だけという場合がほとんどでしょう。以前は全てのコンテンツは静的だと考えられていたので、CloudFrontの最小TTLは60分でした。新しい最小TTLの値は0秒です。特定のオリジンに対してTTLを0にセットしても、CloudFrontはオリジンからコンテンツをキャッシュします。その後、If-Modified-Sinceヘッダー付きのGETリクエストを送ります。これにより、オリジンが変更されていない場合、キャッシュされたコンテンツを使い続けることがきるということをCloudFrontに通知するチャンスをオリジンに与えます。

大きなTCPウィンドウ - 実は2月にCloudFrontのTCPウィンドウの初期サイズを10に増やしましたが、その時はお知らせをしませんでした。 ウィンドウサイズを2から10にすることで、通常の待ち時間なしに、与えられた時間でワイヤーを介してより多くのデータを"in flight"にすることができます。

APIとマネジメントコンソールのサポート - 上記のこれらの機能の全てはCloudFront APIsAWSマネジメントコンソールのCloudFrontのタブからアクセス可能です。URLパターンを使うことで、サイトのそれぞれの部分に対して、キャッシング、配信ルールの細かい制御が可能になります。

もちろん、CloudFrontの既存の静的なコンテンツ配信機能のすべてが期待どおりに動作し続けます。GET、HEADリクエスト デフォルトルートオブジェクトインバリデーションプライベートコンテンツアクセスログIAM実装、オリジンにより圧縮されたコンテンツの配信です。

AWSのサービス連携
静的、動的コンテンツを速く、信頼性高く、可能な限り効率的に配信するために、様々なAWSのサービスがどのように連携するのか見てみましょう。(より理解を深めるためにまず右の図をクリックしてください。)

  • アプリケーション/クライアントからCloudFront - CloudFrontのリクエストのルーティング技術は、それぞれのクライアントがCloudFrontが継続的に世界中のインターネットユーザーから取得しているレイテンシの計測によって決定された最も近いエッジロケーションに接続されることを保証します。Route 53はカスタムドメイン名からCloudFrontディストリビューションを引くためのCNAMEを作成するためにDNSサービスとして補助的に使うことができます。パーシステントコネクションがデータ転送を促進します。
  • CloudFrontエッジロケーション内 - エッジロケーションでの複数のレベルのキャッシングが最もよく見られるコンテンツへのアクセスを加速し、キャッシュ可能なコンテンツに対するオリジンサーバーへのアクセス頻度を減らします。
  • エッジロケーションからオジリン - 動的コンテンツの性質上、オリジンサーバーへアクセスは頻繁に発生します。CloudFrontのエッジロケーションは同じオブジェクトに対する複数の同時に発生したリクエストをシングルリクエストにまとめてしまいます。オリジンに対するパーシステントコネクションもまた(大きなウィンドウサイズと共に)維持されます。他のAWSのパーツへのコネクションはAmazonによって可用性とパフォーマンスが監視された高品質なネットワーク上に作られます。この監視はエラー率を低く、ウィンドウサイズを大きく保つ有益な副作用をもたらします。
 

キャッシュの振舞い
クエリ文字列のサポート、TTL値、オリジンに対してフルコントロールできるようにするために、CloudFrontディストリビューションにキャッシュの振舞いのセットを関連付けることができます。各々の振舞いは次のような要素を含んでいます。

  • Path Pattern - 振舞いの影響下にあるコンテンツを識別するパターンです。 (例 "*.jpg")
  • Origin Identifier - CloudFrontがパスパターンにマッチしたユーザーのリクエストをどこにフォワードすべきかを特定する識別子です。
  • Query String - パスパターンにマッチしたURLのためのクエリ文字列処理を有効にするフラグです。
  • Trusted Signers - 他のAWSアカウントが、URLパスパターンのためのsigned URLを作成できるようにするための情報です。
  • Protocol Policy - allow-allhttps-onlyを指定可能です。
  • MinTTL - 振舞いの影響下にあるコンテンツの最小TTLです。

Toolサポート
CloudBerry LabのAndyから最新のfree version of the CloudBerry Explorer for Amazon S3で動的コンテンツのサポートを追加したと連絡がありました。
以下がAndyからのメッセージです。

CloudBerry Explorerが、リリースされた時点で新しいCloudFrontの機能をサポートする準備ができていることを知らせたいと思います。我々は、ひとつのディストリビューションに対して複数のオリジンを管理する機能、URLパスパターンに基づいて各々のオリジンのキャッシュの振舞いを設定する機能、クエリ文字列を含めてCloudFrontを設定する機能を追加しました。

彼はどのように動作するのか、いくつかのスクリーンショットを送ってくれました。まず最初にオリジンとディストリビューションに関連づけられたCNAMEを選択します。

次にパスパターンを選択します。

オリジンとパスパターンを選択したら、最後にパスパターンの設定をします。

And Here You Go
CloudFrontは費用対効果(最低コミットなし、長期契約なし)が高いだけでなく、高速でパワフル、使用が簡単なコンテンツ配信システムです。

いかがでしたでしょうか? みなさんならこれらのパワフルな機能を使ってどんなアプリケーションを構築しますか?

堀内康弘 (@horiuchi)

 

コメント

トラックバック

この記事のトラックバックURL:
http://www.typepad.com/services/trackback/6a00d8341c534853ef0167667a32ba970b

【AWS発表】Amazon CloudFrontが動的コンテンツをサポートを参照しているブログ:

Featured Event

2016年3 月

    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31