CloudFrontのアクセスログ出力に対するコスト削減の取り組み
はじめに
こんにちは、馬場です!
今回の記事ではre:Invent2024で発表されたCloudFrontの標準アクセスログ機能の強化について触れ、実際に検証していこうと思います。
このre:Inventのリリースを見た時にログ出力に関するコスト削減に繋がりそうだと感じたので、そういった点を重点的に見ていきます。
新機能の内容
以下のログ設定と配信オプションが追加されています。
配信オプション
- Amazon CloudWatch Logs
- Amazon Data Firehose
CloudWatch Logs へのアクセスログ配信を有効にしている場合は、CloudFrontリクエストごとに 750 バイトのログを無料枠として利用できるそうです。
(S3へのログ配信は元々無料)
新しいログ設定
Plain Textに追加で以下ログ形式が追加されています。
- Json
- Parquet(S3のみ)
加えて、出力するログのフィールドを自由に選択できるようになっています。
また、S3を出力先に設定する場合ログの自動分割機能が追加されています。
試してみた
先に結論として、雑にログ出力フィールドを項目数 33 -> 26に減らして検証してみたところ 約15~20%程 のコスト削減に繋がりそうでした。
事前準備
今回の記事ではアクセスログの出力先を S3 として進めていくので、事前にアクセスログの出力用のS3バケットを用意しておいてください。
設定方法
設定部分の肝はどのログフィールドを削るか?になってくると思うのですが、長くなりすぎないように先に設定手順を記載します。
-
CloudFrontディストリビューションの詳細ページを開きます
-
Loggingタブを開きます
-
"標準ログ送信先" の右上にある "Add" を選択します
-
今回は "Amazon S3" を選択します
-
アクセスログの出力先バケットを選択します
-
"Submit" ボタンをクリックします
これでログが出力されるようになりました。
ログは実際に使っていくことで意味を持ってくるので、不要そうなフィールドについては削いでいきます。
検証時では画像のフィールドを削除していきました。
それぞれの詳細については下記公式ドキュメントの 標準ログファイルフィールド を参照ください。
アクセスログの出力フィールドを変更していきます
- アクセスログの設定を開きます
-
Additional settins -optional をクリックします
- デフォルトの33フィールドが選択されているので、不要なフィールドを外していきます
- 設定が終わったら "Submit" をクリックします
動かしてみた
以下は読み飛ばしてOKです。
社内利用しているサービスのCloudFrontアクセスログを出力するように設定し
- デフォルトのフィールド
- 不要フィールドの出力停止
をそれぞれ約1日ずつ試しました。
が、利用に差があり過ぎてリクエスト数辺りのS3ストレージ量やデータ通信量辺りのストレージ量を取ってみてもあまり意味が無さそうなものになってしまいました……
ということでデフォルトの設定で出力したものから、不要フィールドを取り除いてサイズにどれくらい変化があるのかを見ていくことにしました。
その結果が以下となります。
ファイル名 | 変更前 (Bytes) | 変更後 (Bytes) | 削減率 (%) |
---|---|---|---|
ファイル1 | 2,998 | 2,522 | 15.88 |
ファイル2 | 5,034 | 4,301 | 14.56 |
ファイル3 | 144,648 | 112,839 | 21.99 |
まとめ
サービスの内容やファイルサイズにも依存するかと思いますが、1~2割ほどは今回検証で削減したフィールドを対象外とすることでコスト削減効果が見込めそうでした。
(ここでコスト削減効果の対象となるのはS3のオブジェクト保存料についてです。)
また、今回はフィールドだけを対象としていましたがS3をログ出力先とする場合は、出力形式も選択することができます。
不要フィールドの除外に加え、デフォルトのW3Cから圧縮率に優れているParquet形式にすることでさらにコストパフォーマンスを発揮できそうでした。
Discussion