CloudFrontにかかる料金を図にしてみた。
はじめに
皆様こんにちは、あかいけです。
突然ですが、
CloudFront のどの箇所の通信にどんな料金がかかるか、把握しておりますでしょうか?
インターネット ↔︎ CloudFront 間の通信では確実に料金がかかりそうな気がしますが、
CloudFront からオリジンへの通信やデータ転送量にはどれぐらいお金がかかるのでしょうか…?
また CloudFront Functions と Lambda@Edge の料金には違いがあるのでしょうか…?
といった感じで私はめちゃくちゃふんわりとした理解だったので、
公式ドキュメント + 実際の請求書をもとに、CloudFrontの料金を図にしてみました。
皆様もこれを機に CloudFront 料金マスターになってください。
請求書の項目について
まず請求書上の CloudFront に関連した項目は、以下のドキュメントに記載されています。
今回はこの請求書の項目をベースに解説します。
なお本記事内の料金は、東京リージョンのものを記載しています。
そのため JP 、また APN1 の部分は、任意のリージョンコードに読み替えてください。
CloudFront 料金一覧
請求書 項目 | 概要 | 料金 |
---|---|---|
JP-DataTransfer-Out-Bytes | CloudFront から インターネットへのアウトバウンド転送料金 | データ転送 (Out) GB あたり $0.114 (無料枠超えてから、最初の9TB) |
JP-DataTransfer-Out-OBytes | CloudFront から Origin や エッジ関数 へのアウトバウンド転送料金 (DELETE / OPTIONS / PATCH / POST / PUT / WebSocket時のGET) |
データ転送 (Out) GB あたり $0.060 |
JP-Requests-Tier1 | インターネット から CloudFront への HTTP リクエスト料金 (GET / HEAD) |
リクエスト 1 万件あたり $0.009 |
JP-Requests-Tier2-HTTPS | インターネット から CloudFront への HTTPS リクエスト料金 (GET / HEAD) |
リクエスト 1 万件あたり $0.012 |
JP-Requests-HTTP-Proxy | CloudFront から Origin や エッジ関数 への HTTP リクエスト料金 (DELETE / OPTIONS / PATCH / POST / PUT / WebSocket時のGET) |
リクエスト 1 万件あたり $0.009 |
JP-Requests-HTTPS-Proxy | CloudFront から Origin や エッジ関数 への HTTPS リクエスト料金 (DELETE / OPTIONS / PATCH / POST / PUT / WebSocket時のGET) |
リクエスト 1 万件あたり $0.012 |
JP-Requests-HTTPS-Proxy-FLE | CloudFront から Origin や エッジ関数 へのフィールドレベルの暗号化リクエスト (DELETE / OPTIONS / PATCH / POST) |
リクエスト 1 万件あたり $0.02 |
APN1-Bytes-OriginShield | Origin から OriginShield へのデータ転送料金 | 請求書の項目として存在するが、実際は無料 |
APN1-OBytes-OriginShield | OriginShield から Origin へのデータ転送料金 | 請求書の項目として存在するが、実際は無料 |
APN1-Requests-OriginShield | 増分レイヤーとして Origin Shield に送信されたリクエスト料金 | リクエスト 1 万件あたり $0.009 |
Invalidations | CloudFront のキャッシュ削除料金 | 最初の 1,000 パスは無料、それ以降は無効化するごとに $0.005 |
SSL-Cert-Custom | 専用 IP カスタム SSL の利用料金 | 一ヶ月ごとに $600 (時間単位での請求) |
RealTimeLog-KinesisDataStream | リアルタイムログの生成料金 | 100 万ログあたり $0.01 |
Executions-CloudFrontFunctions | CloudFront Functions の呼び出し料金 | 100 万件の呼び出しあたり $0.10 |
APN1-Lambda-Edge-Request | Lambda@Edge 関数の呼び出し料金 | リクエスト 100 万件あたり $0.60 (リクエスト 1 件あたり $0.0000006) |
APN1-Lambda-Edge-GB-Second | Lambda@Edge 関数の実行期間の料金 | GB 秒あたり $0.00005001 |
KeyValueStore-EdgeReads | CloudFront KeyValueStore の読み取り呼び出し料金 (get / exists / meta メソッド) |
100 万回の読み取りあたり $0.03 |
KeyValueStore-APIOperations | CloudFront KeyValueStore API の呼び出し料金 | 1,000 回の API リクエストあたり $1 |
なお以下の常時無料枠が存在するため、
一部の利用料金はこちらを消費しきってから発生します。
CloudFront 無料枠一覧
項目 | 無料枠 | 関連する請求書項目 |
---|---|---|
インターネットへのデータ転送 | 1 か月あたり 1 TB | JP-DataTransfer-Out-Bytes |
HTTP または HTTPS リクエスト | 1 か月あたり 10,000,000 件 | JP-Requests-Tier1 JP-Requests-Tier2-HTTPS |
CloudFront 関数呼び出し | 1 か月あたり 2,000,000 件 | Executions-CloudFrontFunctions |
CloudFront KeyValueStore の読み取り | 1 か月あたり 2,000,000 回 | KeyValueStore-EdgeReads |
CloudFront の通信と料金の関連性について
まず以下が全体像です。
が、これだけ見てもなんのこっちゃという感じだと思うので、詳しく解説します。
インターネット ↔︎ CloudFront 間の料金
図だと以下の赤枠の部分が該当します。
おそらくこれが一番想像しやすい料金かなと思います。
リクエスト料金
- region-Requests-Tier1
- region-Requests-Tier2-HTTPS
インターネット から CloudFront へのリクエスト料金です。
10,000,000件の無料枠があるので、それを超えた分が有料となります。
アウトバウンド データ転送料金
- region-DataTransfer-Out-Bytes
CloudFront からインターネットへのアウトバウンド転送料金です。
なお以下のようにデータ転送量に応じて段階的に料金が安くなっていきます。
データ転送料金 一覧 (JP)
データ転送量(月間累積) | 料金(GB あたり) |
---|---|
最初の 1 TB | 無料 |
次の 9 TB | $0.114 |
次の 40 TB | $0.089 |
次の 100 TB | $0.086 |
次の 350 TB | $0.084 |
次の 524 TB | $0.080 |
次の 4 PB | $0.070 |
5 PB 超 | $0.060 |
CloudFront ↔︎ Origin 間の料金
図だと以下の赤枠の部分が該当します。
インターネット ↔︎ CloudFront 間に比べると、ここの料金は意外と見落としがちな気がします。
また Origin までの経路が3つあるため、それぞれ解説します。
なお実際に通信が発生する際はいずれかの経路となるため、その経路の料金が発生します。
Edge Location ↔︎ Origin
リクエスト料金
- region-Requests-HTTP-Proxy
- region-Requests-HTTPS-Proxy
- region-Requests-HTTPS-Proxy-FLE
CloudFront から Origin や エッジ関数 への HTTP リクエスト料金です。
HTTP であれば region-Requests-HTTP-Proxy
、HTTPS であれば region-Requests-HTTPS-Proxy
となります。
なお region-Requests-HTTPS-Proxy-FLE
については公式ドキュメントの通り、
フィールドレベルの暗号化を実施したリクエスト数に応じて、HTTPS リクエスト料金に追加で発生します。
フィールドレベルの暗号化は、追加の暗号化を必要とするリクエストの数に応じて課金されます。
CloudFront がフィールドレベルの暗号化を使用して暗号化したリクエスト 1 万件ごとに、標準の HTTPS リクエスト料金に加えて 0.02 USD をお支払いいただきます。
また請求書のドキュメントにて以下の記述がありますが、
CloudFront がオリジンまたはエッジ関数に転送する
HTTP WebSocket リクエスト (Upgrade: websocket ヘッダー付きの GET リクエスト) の数も含まれます。
これは クライアントハンドシェイクリクエスト のGETリクエストのことだと思われます。
データ転送料金
- region-DataTransfer-Out-OBytes
CloudFront から Origin や エッジ関数 へのアウトバウンド転送料金です。
またクライアントからサーバーへの WebSocket データのデータ転送も含まれています。
Regional Edge Cache ↔︎ Origin
リクエスト料金
- region-Requests-HTTP-Proxy
- region-Requests-HTTPS-Proxy
- region-Requests-HTTPS-Proxy-FLE
他と共通です。
データ転送料金料金
- region-DataTransfer-Out-OBytes
他と共通です。
- region-Bytes-OriginShield
- region-OBytes-OriginShield
項目上は存在しますが、請求額は0のようです。
請求書の説明(item_description) では「$0 per GB - All data transfer XXX」のような表記になっています。
Origin Shield ↔︎ Origin
リクエスト料金
- region-Requests-OriginShield
増分レイヤーとして Origin Shield へ送信されたリクエストに応じて発生します。
記事の構成上ここに記載していますが、
実際は Origin 間ではなく、Edge Location ↔︎ Origin Shield 間で発生すると言えます。
- region-Requests-HTTP-Proxy
- region-Requests-HTTPS-Proxy
- region-Requests-HTTPS-Proxy-FLE
他と共通です。
データ転送料金料金
- region-DataTransfer-Out-OBytes
- region-Bytes-OriginShield
- region-OBytes-OriginShield
他と共通です。
CloudFront ↔︎ CloudFront Functions 間の料金
図だと以下の赤枠の部分が該当します。
みんな大好き CloudFront Functions に関連した料金です。
リクエスト料金
- region-Requests-HTTP-Proxy
- region-Requests-HTTPS-Proxy
- region-Requests-HTTPS-Proxy-FLE
他と共通です。
データ転送料金料金
- region-DataTransfer-Out-OBytes
他と共通です。
CloudFront Function 実行料金
- Executions-CloudFrontFunctions
CloudFront Functions の呼び出し料金です。
2,000,000件 の無料枠があるので、それを超えた分が有料となります。
Lambda@Edge に比べると CloudFront Function の実行料金が 1/6 なのは驚きました、
自由度の違いはあれど、このコストメリットが大きいので積極的に取り入れたいですね。
CloudFront ↔︎ Lambda@Edge 間の料金
図だと以下の赤枠の部分が該当します。
みんな大好き Lambda@Edge に関連した料金です。
リクエスト料金
- region-Requests-HTTP-Proxy
- region-Requests-HTTPS-Proxy
- region-Requests-HTTPS-Proxy-FLE
他と共通です。
データ転送料金料金
- region-DataTransfer-Out-OBytes
他と共通です。
Lambda@Edge リクエスト関連料金
- region-Lambda-Edge-Request
- region-Lambda-Edge-GB-Second
Lambda@Edge 関数の呼び出し料金と、Lambda@Edge 関数の実行期間 (実行開始から関数のリターンや終了まで) の料金です。
またregion-Lambda-Edge-GB-Second
は 1 ミリ秒単位 で利用したメモリ量を表しています。
CloudFront Function ↔︎ CloudFront KeyValueStore 間の料金
図だと以下の赤枠の部分が該当します。
皆さん、CloudFront KeyValueStore という機能を知っていましたか?
(お恥ずかしながら私は知らなかったです…。)
なお GA が 2023/11/21 らしいので、人によってはもうお馴染みの機能かもしれませんね。
メソッド呼び出し料金
- KeyValueStore-EdgeReads
CloudFront KeyValueStore の読み取り呼び出し (get、exists、meta) 料金です。
2,000,000 回の無料枠があるので、それを超えた分が有料となります。
基本的には CloudFront Functions の呼び出しと連動しており、関数コード内で呼び出した数だけカウントされます。
例えば CloudFront Functions が 1,000 回呼び出され、そのコード内で CloudFront KeyValueStore の読み取りが 5 回ある場合は、合計で KeyValueStore-EdgeReads
が 5,000 となります。
API 呼び出し料金
- KeyValueStore-APIOperations
上記読み取り呼び出しに該当しない、
CloudFront KeyValueStore API の呼び出しにかかる料金です。
API 呼び出しが対象なので、マネジメントコンソールや AWS CLI、SDK からの呼び出しなども該当します。
その他料金
図だと以下の赤枠の部分が該当します。
CloudFront 自体の通信には直接影響しない料金ですね。
専用 IP カスタム SSL 料金
- SSL-Cert-Custom
月額 $600 でお馴染みの、独自ドメイン + 専用 IP カスタム SSL を利用した際に発生する料金です。
一応時間割請求らしいですが、間違えて設定しないように気をつけましょう。
リアルタイムログ 生成料金
- RealTimeLog-KinesisDataStream
CloudFront から Kinesis Data Streams に配信している、
リアルタイムログの行数に応じて発生する料金です。
キャッシュ削除料金
- Invalidations
CloudFront でのキャッシュ削除に応じて発生する料金です。
1,000 パスの無料枠があるので、それを超えた分が有料となります。
さいごに
以上、CloudFront にかかる料金を図にしてみました。
利用料金全体を俯瞰して見ることで、改めてサービスへの理解が深まった気がします。
また知らない機能を発見できるいい機会になったので、今後も他のサービスでやってみようと思います。
なお CloudFront に限らず、マネージドサービスだとどうしても具体的な料金が意識しづらいものが多いような気がします。
そんなサービスでも正しく利用料金を把握して、コストを最適化していきたいですね。