[アップデート] Amazon Kinesis Data Firehose の配信ストリームで CloudWatch ログデータを解凍後に送信出来るようになりました

2023.12.16

いわさです。

CloudWatch Logs から S3 へログを転送させたい場合に、サブスクリプションフィルターで Kinesis Data Firehose を経由させることが多いと思います。

CloudWatch Logs のログは GZip 形式で圧縮されるため、デフォルトで S3 へ転送すると圧縮されたログデータが送信されていました。
本日のアップデートで、Kinesis Data Firehose がソースレコードの解凍を行ってから送信先に転送する機能が追加されました。

Amazon Athena は GZip 圧縮形式からの読み取りをサポートしているので、Athena で S3 に転送されたログを読み込む程度であれば不要ですが、別のアプリケーションで読み込む際にどこかのタイミングで解凍処理が必要だったという場合は、今回の機能が役に立ちそうです。

ためしてみた

次のように Amazon API Gateway から CloudWatch ログ出力を有効化し、ログストリームに実行ログなどが出力されている状態として、今回は従来どおりの解凍なしでの転送と、解凍を行う転送の 2 つを構成し、その様子を観察してみました。

Kinesis Data Firehose のオプションでソースレコード解凍を有効化

今回のアップデートで設定上必要な箇所は以下のみです。
配信ストリーム作成時に「Amazon CloudWatch Logs からソースレコードを解凍する」というオプションがあるのでこちらを有効にするだけです。CloudWatch Logs 側での追加設定は特に不要です。

上記でオプションを有効化した配信ストリームと、オプションを使わない従来どおりの配信ストリームを用意し、冒頭の API Gateway のログが格納されたロググープのサブスクリプションフィルターの送信先に指定しました。

ログ出力させる

API Gateway へリクエストを送信し、適当なログを出力してもらいましょう。

% curl "https://qzusvb5io7.execute-api.ap-northeast-1.amazonaws.com/hogestage/"
{
    "hoge": "value1"
}

しばらくすると、それぞれの配信ストリームで設定した S3 出力先にログが出力されはじめました。
今回は同一バケットの別プレフィックスへ出力しています。

解凍なし(従来)

今回のオプションを有効化していない場合は圧縮されたファイルが出力されています。
今回の例だと 32.3 KB です。

なお、ダウンロードしてもこのままテキストエディターで開くことは出来ません。

解凍あり

今回のアップデートの機能を使って解凍したものがこちらです。
同じロググループに同じフィルターで設定しているので内容は同じはずですが、解凍されているので S3 へ転送されたファイルサイズがまず大きいですね。

S3 バケットからダウンロードしたファイルをテキストエディターで開いてみると、そのまま編集することが出来ました。

なお、圧縮されていたものを手動で解凍すると次のようにファイルサイズが一致しました。ハッシュ確認まではまぁいいか。

% gunzip hoge1216compressed-1-2023-12-16-03-35-16-5cb57f78-60b9-4c08-a648-00b7980c6f99         
% ls -l
total 480
-rw-r--r--  1 iwasa.takahito  staff  119063 Dec 16 12:42 hoge1216compressed-1-2023-12-16-03-35-16-5cb57f78-60b9-4c08-a648-00b7980c6f99
-rw-r--r--@ 1 iwasa.takahito  staff  119133 Dec 16 12:43 hoge1216decompressed-1-2023-12-16-03-35-58-679e163a-9315-46a7-a24a-d5f414b81a58

追加料金発生します

今回のこのオプション、アップデートアナウンスには記載がありませんでしたがコンソールには追加料金が発生する旨が注意書きされています。

Kinesis Data Firehose のページにも解凍機能を使った際の料金について追記されていることを確認しました。

東京リージョンだと、次の料金単価となっています。

Decompression for CloudWatch Logs, per GB decompressed $0.00403

解凍されたデータの GB ごとに料金がかかる形式となっており、料金ページでは月間 10 TB 処理した場合を例に挙げられています。
これを東京リージョン単価にあてはめると次のようになります。

毎月の解凍料金 = 10240 GB * 0.00403 ドル/GB = 41.27 ドル

さいごに

本日は Amazon Kinesis Data Firehose が解凍後に送信することが出来るようになったので試してみました。

私は9割くらいはそのまま Athena で使用するので使い機会が多くなさそうですが、GZip 対応していないサービスへ Kinesis Data Firehose から連携する場合などは役に立ちそうですね。