Amazon Web Services ブログ
Arc XP が AWS の Amazon CloudFront と Lambda@Edge を使用してデータ転送コストを年間 50 万ドル削減した方法
米国の日刊紙である Washington Post は、 Arc XP のデジタルエクスペリエンスプラットフォームを使用してニュースを配信しています。Arc XP は元々は The Post という製品から始まり、そして世界中の 1,500 以上の Web サイトで魅力的なコンテンツを作成、ホスト、収益化するためにパブリッシャー、放送局、ブランドが使用する Software-as-a-Service (SaaS) ビジネスに成長しました。
Photo Center は、お客様が画像を保存、サイズ変更、公開、配信できるようにする Arc XP 製品です。AWS 上に構築された Photo Center は、各顧客がコンテンツを保存するための専用の Amazon S3 (S3) バケットをプロビジョニングします。ビジネスが拡大するにつれて、Arc XP のバケット数とデータ転送のコストは比例して増加し、 Amazon CloudFront (CloudFront) でコンテンツを配信するためのよりコスト効率の高いアーキテクチャを求めました。ただし、Photo Center が何百ものバケットを管理しなければならないという要件には、各オリジンに対応する CloudFront ディストリビューションの数が必要でした。その結果、構成と管理の課題が生じました。この課題を解決するために、Arc XP へ AWS のエッジサービスである Lambda@Edge が組み込まれました。
このブログでは、S3 に関連する AWS データ転送の主要なコストに関する考慮事項と、CloudFront がそれらのコストの削減にどのように役立つかをご紹介します。構成のオーバーヘッドを最小限に抑えながらデータ転送コストを最適化するために Arc XP が CloudFront と Lambda@Edge をどのように組み込んだか紹介します。そして、Photo Center の修正前後のアーキテクチャについて説明します。最後に、このソリューションがコストを削減しただけでなく、Photo Center の画像配信パフォーマンスを向上させた方法についてご説明します。
Arc XP Photo Center の初期アーキテクチャ
S3 で構築された Arc XP の Photo Center アプリケーションは、世界中の顧客の画像を管理します。コンプライアンス、マルチリージョン、およびマルチテナンシーを考慮した場合、単一の S3 バケットと顧客ごとにプレフィックス付与をすることは、最適な設計ではありませんでした。したがって、Photo Center は、コンテンツ専用の S3 バケットを各顧客にプロビジョニングするように設計されています。この初期アーキテクチャでは、Arc XP の顧客は、Web アプリケーション内で表示するために S3 URL を介して画像を取得していました。
ビジネスが拡大するにつれて、Arc XP は数百もの専用の S3 バケットの管理を引き受け、そのビジネスの成功に伴って、インターネットへのデータ転送も相応に伸びました。時間が経つにつれて、Arc XP の S3 データ転送(アウト)は、Photo Center アプリケーションにとってかなりのコスト要因になりました。
図 1 は、 Photo Center の初期アーキテクチャを示しています。各顧客のウェブサイトは、それぞれの S3 バケットからデータをダウンロードするために、S3 固有の URL によって提供されました。これらの画像は S3 からインターネット経由で直接ダウンロードされるため、結果としてデータ転送コストの増加が発生しました。
図 1: S3 に直接アクセスするようデプロイした初期アーキテクチャ
パフォーマンスの観点では、以下の通り S3 ベースの HTTP リクエストのサンプル画像は合計 0.106 秒で取得されました。このパフォーマンスは Arc XP の許容範囲内でしたが、Photo Center の改修されたアーキテクチャによって達成した取得時間と比較をするため、以下に記載します。
% curl -w "@curl-format.txt" -o /dev/null -s "https://arc***.s3.amazonaws.com/public/SSTVFAY***.jpg" time_namelookup: 0.028715s time_connect: 0.036250s time_appconnect: 0.063145s time_pretransfer: 0.063265s time_redirect: 0.000000s time_starttransfer: 0.096473s ---------- time_total: 0.106519s
AWS データ転送に関する考慮事項
AWS クラウドに関連するデータ転送にはさまざまな形式があり、それぞれに特定の目的と影響があります。たとえば、転送は、単一のアベイラビリティーゾーン (AZ) 内、単一リージョン内の AZ 間、複数のリージョン間、またはリージョンからインターネットへの転送などがあります。AWS ワークロードを設計する際には、AWS データ転送料金のモデルを詳しく理解することが重要です。価格情報については、こちらを参照してください。
- Photo Center のデータ転送コストに関するアーキテクチャ上の考慮事項には、次のようなものがあります。
- インターネットから S3 バケットへのデータ転送 (データのアップロード) は無料です。
- 毎月最初の 100 GB のインターネットへのデータ転送は課金されません。すべての AWS サービスとリージョン (中国と GovCloud を除く) で集計された合計データ量が対象です。
- 同じ AWS リージョン内の S3 バケット間で転送されたデータには課金されません。
S3 バケットから同じ AWS リージョン内の AWS サービス (同じ AWS リージョン内の別のアカウントを含む) に転送されたデータに対しては課金されません。 - インターネットへのデータ転送(データダウンロード)は有料ですが、リージョンやサービスによって料金が異なります。
- CloudFront からインターネットへのデータ転送コストは、地理的リージョンによって異なり、コンテンツが提供されるエッジロケーションに基づきます。
- CloudFront からインターネットに転送されるデータは、S3、Amazon Elastic Compute Cloud (EC2)、Amazon Relational Database Service (RDS) などのサービスから直接データを転送するよりも低い料金で提供されます。
- AWS のすべてのサービスから CloudFront へ、無料のデータ転送を提供しています。つまり、S3 オリジンから CloudFront へのデータ転送は無料です。
- リクエスト (PUT、COPY、POST、LIST、GET、SELECT)、ライフサイクル移行、およびデータ取り出しの料金は、引き続き S3 の料金が適用されます。
Arc XP Photo Center の修正されたアーキテクチャ
Arc XP は、Photo Center のデータ転送コストを削減するソリューションを検討していたとき、データ、アプリケーション、ビデオ、API、およびその他のコンテンツの配信を最適化する低レイテンシーで高速転送のコンテンツ配信ネットワーク (CDN) である CloudFront に最初に目を向けました。CloudFront は AWS のエッジロケーションのグローバルネットワーク内にコンテンツをキャッシュするため、Photo Center などのアプリケーションがパフォーマンスとエンドユーザーエクスペリエンスを向上させるのに役立ちます。CloudFront ディストリビューションからのデータ転送(アウト)は、S3 からの直接のインターネット転送よりも低い料金で提供されるため、Arc XP にとって CloudFront はデータ転送コストを削減するための魅力的な選択肢でした。さらに、S3 から CloudFront へのデータ転送は無料ですが、そのキャッシングにより、基となる S3 バケットへのリクエスト量のコストが最小限に抑えられます。
CloudFront を顧客の画像のコスト削減のためのエッジキャッシュとして活用するのは簡単な選択でしたが、何百もの個別のバケットをオリジンとして使用することには課題がありました。Arc XP は当初、バケットごとに CloudFront ディストリビューションを作成しなければならないという事に直面していましたが、これは複雑であり、想定していた規模では受け入れられないものでした。代わりに、世界中の顧客の S3 バケットを効率的にフロントに配置できる限られた数のディストリビューションのみをデプロイする設計が必要でした。
Lambda@Edge は、複数の顧客間で CloudFront ディストリビューションを共有するメカニズムを Arc XP に提供することで、この問題を解決しました。これは、任意の数のバケットへの動的でコード駆動型のターゲットを絞ったアクセスを容易にする方法です。グローバルなサーバーレスコンピューティングサービスとしての Lambda@Edge は、世界中の 400 以上の AWS エッジロケーションでユーザー定義関数を実行できます。CloudFront と組み合わせることで、開発者は高度にカスタマイズされた低レイテンシーのアプリケーションと API を構築できます。Lambda@Edge 機能を使用すると、開発者はリクエストとレスポンスを検査および操作して、パフォーマンスとセキュリティを改善し、動的コンテンツ生成を追加できます。また、Arc XP の場合は、すべての S3 バケットを自動で独立して管理することができます。
Lambda@Edge の onClientRequest イベントハンドラーを使用して、Arc XP は、CloudFront が各リクエストを動的に検査し、呼び出し元のクライアントを適切な S3 バケットにルーティングする軽量コードを実装しました。Lambda@Edge が動的オリジンプロキシとして機能するようになったことで、Arc XP はクライアントを限られた数の CloudFront ディストリビューションに集約して、数百の S3 バケットにわたって単一のキャッシングレイヤーを生成できました。
図 2 は、修正された Photo Center アーキテクチャを示しています。新しいソリューションでは、CloudFront が S3 バケットとエンドクライアントの間に配置されることに注意してください。
図 2: CloudFront と Lambda@Edge のデプロイにより修正されたアーキテクチャ
図 2 のアーキテクチャの通り、Photo Center の新しいデータフローは次のようになります。
- 画像に対するクライアントリクエストは、CloudFront に届きます。
- CloudFront への各リクエストは、Lambda@Edge 関数を呼び出します。
- この関数は、リクエストの顧客固有の URL コンテキストを使用して、適切な S3 オリジンパスを決定します。
- CloudFront は、動的に割り当てられたパスを使用して画像を取得し、取得後にキャッシュします。
S3 オリジンから CloudFront へのデータ転送の料金が発生しないため、コストを節約できます。CloudFront からインターネットへの低コストの転送料金が適用されます。さらに、CloudFront は画像もキャッシュするため、同じ画像を S3 バケットから取得する回数が減ります。これにより、S3 GET オペレーションの総コストが削減されます。
パフォーマンスに注目すると、CloudFront はキャッシング機能によってエンドユーザーエクスペリエンスを向上させます。Photo Center の場合、CloudFront は、エンドユーザーに近いエッジロケーションからキャッシュされた顧客の画像を配信することで、配信速度を向上させます。さらに Lambda@Edge により、Photo Center は複数のオリジンを少数の CloudFront ディストリビューションの背後に統合できるため、キャッシュヒット率が向上します。その結果、Photo Center の全体的なパフォーマンスが大幅に向上しました。実例として、前の例と同じ画像がわずか 0.064 秒で取得されるようになりました。これは、初期アーキテクチャによる S3 からの直接取得の時間である 0.106 秒よりも 40% 改善されたことになります。
% curl -w "@curl-format.txt" -o /dev/null -s "https://cloudfront-us-***.arcpublishing.com/***/SSTVFAY***.jpg" time_namelookup: 0.009418s time_connect: 0.016141s time_appconnect: 0.038679s time_pretransfer: 0.038954s time_redirect: 0.000000s time_starttransfer: 0.048977s ---------- time_total: 0.064193s
ソリューションのメリットの概要
Arc XP は、修正されたアーキテクチャからいくつかの重要なメリットを得ました。
- Photo Center の S3 データ転送(アウト)の料金がなくなりました。代わりに CloudFront のデータ転送料金が適用されるようになり、年間のデータ転送コストが 500,000 ドル削減されました。
- エッジで画像をキャッシュする CloudFront により、顧客用の S3 バケットからの直接取得する際のレイテンシーが 40% 削減されました。
- 何百もの S3 バケットオリジンと CloudFront ディストリビューションの管理が簡素化されました。このソリューションは、単一の CloudFront ディストリビューションが前面にある複数のバケットに対応し、Photo Center の画像リクエストに対して単一のキャッシュレイヤーを提供します。
- このソリューションではアクセスログが単一ソースで作成できるため、クライアントからのアクセスの計測も簡素化されました。
まとめ
このブログでは、Arc XP が複数の AWS エッジサービスを Photo Center のアーキテクチャに組み込んで、大幅なコスト削減を達成するだけでなく、エンドユーザーエクスペリエンスを向上させる方法について説明しました。Arc XP は現在、Amazon CloudFront を使用して、高度に最適化された CDN アーキテクチャ内に数百の S3 バケットの画像をキャッシュして配信しています。さらに Lambda@Edge を組み込み、リクエストを操作する機能を活用することで、Arc XP の Photo Center アプリケーションは、クライアントからのトラフィックを適切な S3 バケットに自動的にマッピングします。今回、コード駆動型のアプローチを通じてこのオリジンの独立性を実現することで、費用対効果の高いソリューションを大規模に構成および管理することも容易になりました。
アーキテクチャをレビューし、データ転送コストを最適化するには、AWS のアカウントチームにお気軽にご連絡ください。
本ブログの翻訳はソリューションアーキテクトの本多が担当しました。
原文はこちらです。