- はじめに
- Amazon CloudFrontの料金はどこで発生しているか
- Amazon CloudFrontを使用したシステム構成例
- Amazon CloudFrontの利用料増加の際に最初に確認すべき2つのポイント
- おわりに
はじめに
こんにちは。2年目の大林です。
本ブログでは、Amazon CloudFrontの利用料が急増した場合のチェックポイントを共有したいと思います。
Amazon CloudFrontは、ユーザーへのレスポンスの高速化を実現出来たり、AWS WAFの利用やAmazon Certificate ManagerでSSL/TLS証明書を利用することによってセキュリティを強化できたりと様々なメリットを享受することができます。一方で、料金体系を把握しておかなければコスト効率の良い運用はできません。
今回紹介するAmazon CloudFrontを使用する上でコスト面で気を付けたいポイントが参考なればと思います。
Amazon CloudFrontの料金はどこで発生しているか
①インターネットへのデータ転送
Amazon CloudFront からインターネットに転送するデータ量に対して利用料が発生します。 テキスト中心のWebサイトであれば大きな課金は発生しませんが、人物紹介をするWebサイトなど1つのページに多くの画像を使用する場合は1リクエストあたりの料金を計算して確認したほうがよいと思います。 サイトが急に人気になってアクセス数が増加するとその分利用料が増加します…。
②ユーザーからのリクエスト
Amazon CloudFrontは、ユーザーからの HTTP or HTTPS リクエストの数に対して料金が発生します。 そのため、利用料が増加した際はユーザーからの総リクエスト数が増加していないか確認する必要があります。 また、どこのエッジロケーションからのリクエスト数が増えているのかも確認しておくといいと思います。 理由としては、Amazon CloudFrontの料金はエッジロケーションごとに違うからです。 利用料の高いエッジロケーションからのアクセスが増加している場合、低コストなエッジロケーションを使用することでコストを抑えることができます。
③オリジンへのデータ転送
ユーザーがデータをオリジンまたはエッジ関数に転送する際には、利用料が発生します。ただし、データ転送にOPTIONS、POST、PUTなどのリクエストがあった場合のみになります。また、WebSocketデータをクライアントからサーバーに転送した場合も料金に含まれる料金体系になっています。
※Amazon CloudFrontがオリジンからオブジェクトを取得することに対しては料金はかかりません。
Amazon CloudFrontを使用したシステム構成例
以下の図は、Amazon CloudFrontを使用したシステムの簡易的な構成図です。
EC2インスタンスを立ててアプリケーションを実行していて、静的コンテンツをS3バケットにアップロードしAmazon CloudFrontで配信しているといった構成になっています。
また、ここではサブネットやマルチAZなどは省略しています。
Amazon CloudFrontの利用料増加の際に最初に確認すべき2つのポイント
①リクエスト数が増加しているか
Webサイトが人気になってリクエスト数が増えたことが原因で利用料が増加してる場合があります。
上記で記述した通り、Amazon CloudFrontはHTTPリクエストおよびHTTPSリクエストに対して料金が発生します。したがって、リクエスト数が増加するとそれに応じてリクエスト料金が増えます。
また、リクエストが発生するとAmazon CloudFrontはリクエストに対応するデータを転送するため、リクエスト数が増加するとデータ転送における利用料もその分増加します。
AWSマネジメントコンソールの「テレメトリー > モニタリング > ディストリビューション」で、リクエスト数、データ転送量、エラーレートを確認することができます。利用料が増加した際は、まずこのメトリクスを見るのがいいです。
②画像が容量の大きなものに変更されていないか
Webサイトの再構築などでAmazon CloudFrontで配信する画像などのオブジェクトの容量が大きなものに置き換えてしまっている場合があり、それによって予期せぬ利用料の増加につながってしまいます。
リクエスト数は変わらないが、利用料が増加傾向にある場合はこれが原因である可能性があるので確認してみるといいかもしれません。
リクエストが多いS3バケットのオブジェクトはAWSのマネジメントコンソール上にある「レポートと分析 >人気のオブジェクト」から調べることができます。
Amazon CloudFrontを使用したアプリケーションにユーザーが自由に画像を登録/変更できる場合は特に注意が必要です。アプリケーションの開発者がこの特徴を理解していたとしても、想定以上に容量が大きい画像に変更するユーザーが増えれば、知らない間に利用料が急増することになります。このような事態にならないために、ユーザーが自由に変更できる画像の容量に制限を設けたり、定期的にS3バケット内のオブジェクトを確認する作業が必要です。
CLIで以下のコマンドを実行して、S3バケットにアップロードされているオブジェクトの容量を調査するのもいいと思います。
aws s3api list-objects \ --bucket バケット名 \ --prefix 調査対象のパス \ --query "Contents[?LastModified>='yyyy-mm-ddT00:00:00Z' && LastModified<='yyyy-mm-ddT23:59:59Z'].[Key,LastModified,Size]" \ --output table
おわりに
このブログでは、Amazon CloudFrontの利用料金がどこで発生するかをまとめ、特にリクエスト数の増加とコンテンツの容量の変更がコストにどのように影響するかを説明しました。 Amazon CloudFrontは、CDNのサービスの1つで高速でセキュアなコンテンツ配信を可能にしますが、コスト効率の良い運用をしていくためには注意深く監視しなくてはならない点もあります。