ちょっと話題の記事

AWSのアウトバウンド通信はとりあえずCloudFrontを挟んだ方が安くなる(場合がある)

「実は動的コンテンツとか静的コンテンツとか深く考えずにCloudFrontを挟んだ方が安くなるのでは」と思い、計算してみたところ良さげだったのでご紹介します。
2021.03.15

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

ども、もこ@札幌オフィスです。

AWSの通信利用料を調べる機会があり、アウトバウンド通信のコスト削減をするために試行錯誤していたのですが、「実は動的コンテンツとか静的コンテンツとか深く考えずにCloudFrontを挟んだ方が安くなるのでは」と思い、計算してみたところ良さげだったので、簡単な内容とはなりますがご紹介します。

※本記事でのアウトバウンドとはCloudFrontを経由出来る通信の事であり、EC2からどこかへファイルをアップロードするなどの通信は対象外となりますのでご注意ください。

TL;DR

  • EC2、ELB、S3のインターネットへのアウトバウンド通信は $0.114〜$0.084 per 1GB ※1
  • EC2、ELB、S3からCloudFrontへのアウトバウンド通信は無料
  • CloudFrontのアウトバウンド通信は $0.114〜$0.06 per 1GB ※1
  • クラスメソッドメンバーズのEC2・CDN割引プランの場合、全リージョン固定で$0.051 per 1GB

※1 東京リージョンの価格

※ 価格は記事執筆時点(2021/03/15)

つまり

EC2・CDN割引プランをご利用の場合、CloudFrontを挟んだ方がアウトバウンド通信が1GBあたり$0.063〜$0.033安くなります。

例えば、EC2から10TBのトラフィックがある場合、通常のEC2の通信料だと約1,167$ですが、 CloudFront($0.051 per 1GB)を使うと約$522となります!

なお、通常料金の場合は相当量のトラフィックが無いか、コミットメントが無いとあまりお安くはなりません。(後述します。)

動的コンテンツの扱いどうする?

CloudFrontでキャッシュを行わないようにすれば都度オリジンにリクエストが流れる形となりますが、CloudFrontの料金として費用が発生する形となります。

Managed-CachingDisabled を利用する事でキャッシュを無効化できます。下記はCloudFront Behaviorの設定例です。

キャッシュできる物はする

動的なコンテンツは無理にキャッシュする必要は無いと思いますが、S3に置いているファイルや .js .css などのアセットファイル、画像コンテンツなどは(大半の場合)キャッシュして問題の無いものだと思います。

CloudFrontの料金自体は変わりませんが、オリジンの負荷が軽減する事により、パフォーマンスが上がったり、インスタンスタイプの変更が出来たりするかもしれません。

安くならないパターン

通常料金の場合ですと、EC2(ELB)、S3とCloudFrontとの差があるので、高くなる場合があります。

下記の料金表(2021/03/15作成)を見て頂けると、CloudFrontを利用する場合と、EC2(ELB)、S3の差額が(ほぼ)無いが、EC2(ELB)、S3だけは「150TB以上 $0.084」となっています。

データ量 CloudFront EC2(ELB) S3
〜約10TB/月 $0.114 $0.114 $0.114
次の40TB/月 $0.089 $0.089 $0.089
次の100TB/月 $0.086 $0.086 $0.086
150TB/月以上 - $0.084 $0.084
次の350TB/月 $0.084 - -
次の524TB/月 $0.080 - -
次の4PB/月 $0.070 - -
5PB/月以上 $0.060 - -

ポイントは「EC2(ELB)、S3の料金だけ50TB以上 $0.084になる」点です。

EC2(ELB)、S3の「150TB以上」とCloudFrontの「次の350TB」との間での価格差がありますので、注意が必要です。

https://aws.amazon.com/jp/blogs/news/aws-data-transfer-price-reductions-up-to-34-japan-and-28-australia/

また、最近は通常料金から最大30%割引きされる CloudFront Security Savings Bundle といった仕組みも出てきていますので、合わせて確認すると良いかもしれません。

誰かのお役に立てれば幸いです。