コストの最適化
概要
CloudFront は、ウェブアプリケーションのパフォーマンス、セキュリティ、可用性に対する利点に加えて、ウェブアプリケーションのコストを削減するためにも使用できます。まず、CloudFront の価格モデルによってオリジンコストを削減できる可能性があります。次に、CloudFront を設定し、コストを削減するようにアプリケーションを設計できます。AWS サービスを使用してコストを最適化するためのより一般的なガイダンスについては、AWS Well-Architected フレームワークのコスト最適化の柱を検討してください。コストをモニタリングして把握するには、 AWS コストエクスプローラーと AWS 予算を使用してください。
クラウドフロントの価格
CloudFront の価格モデルには複数のディメンションがあり、その中でも最も主な 2 つのディメンションは次のとおりです。
- インターネットへのリージョナルデータ転送出力 (DTO)。これは、CloudFront がインターネット上のユーザーに提供する GB の量を表します。この料金はユーザーの地域によって異なり、2進数のギガバイト(つまり、1 GB = 1024 MB)で計測され、HTTPペイロード(TLSハンドシェイクデータ転送を除く)のみが含まれていることに注意してください。
- リクエスト料金。CloudFront が処理する HTTP (S) リクエストの数に相当します。また、ユーザーの地域によっても異なります。
デフォルトでは、CloudFront はすべてのネットワークを使用してコンテンツを配信し、最高のパフォーマンスを実現します。配信コストとのトレードオフを検討する場合は、CloudFront で価格クラスオプションを設定することを検討してください。
CloudFront には常時無料利用枠があり、毎月 1 TB の DTO と 1,000 万の HTTP (S) リクエストが含まれます。AWS WAF を CloudFront と組み合わせて使用している場合は、CloudFront のセキュリティ割引バンドルを前払いして、CloudFront の料金を最大 30% 節約することを検討してください。容量が大きい (10 TB 以上) 場合は、個人価格契約に署名して、より高い費用負担の見返りとして、さらなる削減をご依頼ください。トラフィック全体の配信される HTTP オブジェクトの平均サイズが大きいほど、得られる割引が大きくなることに注意してください。そのため、複数のワークロード (API 配信と静的ファイル配信) には CloudFront を使用して、プライベートプライシング契約で得られる全体的な割引を増やすことをお勧めします。
AWS ベースのオリジンで使用する場合、CloudFront の DTO がオリジンの DTO を置き換えることに注意することが重要です。そのため、オリジンのデータ転送アウト(DTO)の支払いは不要です。
最後に、コンテンツの無効化などの追加コストが発生する可能性のある、CloudFront のオプション機能の使用状況を確認して最適化してください。
CloudFront における無効化のコストを最適化する
CloudFront の料金表によると、追加料金なしで、毎月 1,000 個のパスを無効化に使用できます。それ以上は、無効化をリクエストしたパス1件につき0.005ドルかかります。注意: 無効リクエストにリストされるパスは、CloudFront キャッシュから無効化するオブジェクトの URL(あるいは、パスにワイルドカード文字が含まれる場合は複数の URL)を表します。
CloudFront を使用して無効化のコストを最適化するには、以下のヒントを検討してください。
- デフォルトではHTTPキャッシュ制御メカニズム(Cache-Controlヘッダー、URLバージョン管理、条件付きリクエストなど)に依存し、ブレークグラスのシナリオではCDNベースの無効化を優先します。詳細については、[こちら] をご覧ください。
- 1 回の無効化リクエストで複数のファイルを無効にする場合は、必要に応じて無効化にワイルドカードを使用してください。たとえば、ワールドカップイベントに関連する記事を 1 つずつ無効にするのではなく、/stories/sports/worldcup* を使用してすべての記事を無効にします。
CloudFront を使用してウェブアプリケーションのコストを削減する
CloudFront は、オリジンの負荷を軽減することで、ウェブアプリケーションのコストをネイティブに削減します。まず、CloudFront は独自のキャッシュからキャッシュ可能なリクエストを処理するため、オリジンのスケーリングコストが削減されます。キャッシュヒット率を上げる (例:Origin Shield を有効にする) ことで、CloudFront の設定を最適化してオリジンの負荷をさらに軽減できます。次に、CloudFront は動的リクエスト (API 呼び出しなど) のためにオリジンへの TCP/TLS 接続を再利用します。これにより、オリジンが処理する必要のある新しい接続の数と、オリジンから出力される TLS 証明書の量が減ります。これにより、ALBのようなオリジンのコストが削減されます。これは、1秒あたりに新しく確立される接続数と処理されるバイト数が減るため、 LCUの消費量が減少するためです。
さまざまな方法でコストをさらに削減するように CloudFront を設定できます。たとえば、GZIP または Brotli を使用してテキストファイルを圧縮すると、DTO が削減されます。別の例として、アプリケーションにエッジ関数が必要な場合は、Lambda @Edge よりも安価なため、該当する場合は CloudFront Functions を使用することをお勧めします。エッジ機能を最適化してコストを削減するためのベストプラクティスについてお読みください。
最後に、通常の操作の一部として無効化を使用するよりも、標準の Cache-Control ヘッダーを使用してキャッシュの鮮度を制御することをお勧めします。キャッシュ制御メカニズムはより信頼性が高く、ブラウザーのキャッシュを制御でき、コストもかかりません (CloudFront の無効化と比較して、1 か月あたり 1000 件の無効化という割り当てを超えています)。ガラス割れのシナリオには無効化を使用してください。
AWS WAF 最適化
AWS WAF コストの主な要素は、通常、リクエスト料金です。このコストはさまざまな方法で削減できます。
- AWS WAF は、脅威モデリングに応じた保護が必要な CloudFront ディストリビューションでのみ有効にします。たとえば、S3 でホストされている静的コンテンツに WAF 保護が必要ない場合は、それらを別の CloudFront ディストリビューションの別のドメイン (static.example.com など) に移動し、HTML ファイルを提供しているメインディストリビューション (www.example.com など) でのみAWS WAFを有効にします。
- Shield アドバンスドに登録すると、AWS WAF リクエスト料金が Shield アドバンスド価格に含まれています。Shield Advancedは、毎月のサブスクリプションと、アプリケーションのデータ転送アウトにプレミアム料金を請求します。アプリケーションがリクエストを多用する場合 (API を使用する場合など、1 秒あたりのリクエスト数が多く、平均ペイロードが低い場合)、Shield Advanced を有効にすることで WAF 全体のコストを削減できる可能性があります。
- 最後に、CATPCHA、 AWS Bot Control、AWS Marketplace のベンダーによるマネージドルールなど、一部の AWS WAF ルールには追加料金がかかります。このようなルールを特定の条件(例:疑わしいIPをCAPTCHAのみにしたり、HTMLリクエストにボットコントロールのみを適用する)に絞り込んだり、WebACLの最後に使用したりすることで、追加費用なしで以前の無料ルールで悪意のあるリクエストをブロックできるようにすることで、これらのコストを最適化できます。WAF ルールコスト最適化の詳細な説明については、このブログをお読みください。
CloudFront は、AWS WAF WebACL に関連付けられている場合、AWS WAF によってブロックされたリクエストに対して課金されないことに注意してください。
アプリケーションレベルの最適化
アプリケーションレベルには、CloudFront 配信のコストを削減するために実装できる手法があります。次のテクニックを検討してください。
- ブラウザキャッシュを活用して、CloudFront によって配信されるリクエストの量を減らす
- オブジェクトに ETag を実装して、条件付きリクエストを有効にします。 304 件の Not Modified レスポンスによるオブジェクト更新は、フルフェッチよりも配信コストが低くなります。
- 画像最適化を実装して、WebP や Avif などの最新形式を使用して画像を圧縮します。また、ブラウザでレンダリングされない画像をダウンロードしないように、Web サイトの画像を遅延読み込みしてください。
- ビデオ配信用のアダプティブビットレートストリーミングを実装します。QVBR ビデオエンコーディングを検討してください。デバイスの種類に応じて最適化されたレンディションラダーを提供することを検討してください。このブログではこの概念について説明していますが、CloudFront Functions を起動する前に Lambda@Edge を使用して記述されていました。
- API コールには、可能であれば同一オリジンポリシーを使用してください。これにより、プリフライト CORS OPTION リクエストのコストが削減されます。詳細については、このブログをお読みください。
- すべてのロギングオプションを検討し、最も費用対効果の高いオプションを選択してください。CloudFront の標準アクセスログは追加料金なしで提供されますが、すべてのトラフィックに適用されます。それどころか、CloudFront のリアルタイムログは、CloudFront のキャッシュ動作や必須フィールドごとに細かく設定され、追加料金がかかります。WAF には複数のロギングオプションがありますが、最もコスト効率が高いのは Kinesis Firehose をベースにしたものです。ログに記録されたリクエストは、ルールアクションや発行されたラベルなどのディメンションに基づいてフィルタリングできることに注意してください。