CloudTrailの証跡データをS3ライフサイクルでGlacierに移行する際の損益分岐点を探る

結論:そんなものはなかった
2021.07.03

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

2021/09/14 指摘を受け計算式を修正しました。

こんにちは、CX事業本部の若槻です。

S3バケットに保管されているCloudTrailの証跡ログのストレージクラスをStandardからGlacierへライフサイクルによる移行を行う検討していた時に下記のような記事を見つけました。

コスト削減のためにストレージクラスの移行を行っても、移行時のコストをペイ出来ないため本末転倒では?という内容です。

しかしこのライフサイクルによる移行の料金ですが、2021/3に引き下げが行われたようです。

そこで今回は、CloudTrailの証跡データをS3ライフサイクルでGlacierに移行する際の損益分岐点を探ってみました。

CloudTrailの証跡ログ

下記は実際に出力されている証跡ログのオブジェクトです。1個あたり600〜3000Bとばらつきはありますが、小さめに見積もりザックリ1KBとします。

% aws s3 ls s3://cm-members-XXXXXXXXXXXX/AWSLogs/XXXXXXXXXXXX/CloudTrail/ap-northeast-1/2021/07/03/
2021-07-03 09:00:27        811 XXXXXXXXXXXX_CloudTrail_ap-northeast-1_20210703T0000Z_DOgHxa9SaRhsCX8z.json.gz
2021-07-03 09:03:25       1466 XXXXXXXXXXXX_CloudTrail_ap-northeast-1_20210703T0000Z_eVmfE5lhqpkYyt2m.json.gz
2021-07-03 09:03:18       2215 XXXXXXXXXXXX_CloudTrail_ap-northeast-1_20210703T0005Z_ugZeqv4VYS10MGxH.json.gz
2021-07-03 09:08:23       1471 XXXXXXXXXXXX_CloudTrail_ap-northeast-1_20210703T0005Z_zSf4nFMd1B3pbygk.json.gz
2021-07-03 09:18:37       1467 XXXXXXXXXXXX_CloudTrail_ap-northeast-1_20210703T0010Z_1tZNpotpRG3rSQYH.json.gz
2021-07-03 09:12:51       2276 XXXXXXXXXXXX_CloudTrail_ap-northeast-1_20210703T0010Z_Rd1pzunzX4PFJ6Zi.json.gz
2021-07-03 09:07:38        896 XXXXXXXXXXXX_CloudTrail_ap-northeast-1_20210703T0010Z_Uix1ygWjDhOqgEWE.json.gz
2021-07-03 09:08:28        969 XXXXXXXXXXXX_CloudTrail_ap-northeast-1_20210703T0010Z_fRGGj9veHiXmXG9R.json.gz
2021-07-03 09:13:39        657 XXXXXXXXXXXX_CloudTrail_ap-northeast-1_20210703T0010Z_x7kQB7cBAyKfrkWQ.json.gz
2021-07-03 09:18:08       1468 XXXXXXXXXXXX_CloudTrail_ap-northeast-1_20210703T0015Z_X9hyIfPqOYrgYKzY.json.gz
2021-07-03 09:23:30       1469 XXXXXXXXXXXX_CloudTrail_ap-northeast-1_20210703T0015Z_lIyqDbj9aXTof6FZ.json.gz
2021-07-03 09:15:18        895 XXXXXXXXXXXX_CloudTrail_ap-northeast-1_20210703T0015Z_w51m7y1cmzUXmCov.json.gz
2021-07-03 09:28:09       1471 XXXXXXXXXXXX_CloudTrail_ap-northeast-1_20210703T0020Z_H0byqF9eDuP4SL3p.json.gz
2021-07-03 09:18:48        819 XXXXXXXXXXXX_CloudTrail_ap-northeast-1_20210703T0020Z_lfMLLS0mWIQmFFMx.json.gz
2021-07-03 09:24:28        892 XXXXXXXXXXXX_CloudTrail_ap-northeast-1_20210703T0025Z_513a8tTHd4QPvEj7.json.gz
2021-07-03 09:29:48        699 XXXXXXXXXXXX_CloudTrail_ap-northeast-1_20210703T0025Z_SyLmR0TwepsvX39u.json.gz
2021-07-03 09:23:58       1161 XXXXXXXXXXXX_CloudTrail_ap-northeast-1_20210703T0025Z_WV26fcjS3IjFEIRu.json.gz
2021-07-03 09:33:02       3139 XXXXXXXXXXXX_CloudTrail_ap-northeast-1_20210703T0025Z_sbZH0rjUV8Lf7jvP.json.gz
2021-07-03 09:29:09        963 XXXXXXXXXXXX_CloudTrail_ap-northeast-1_20210703T0030Z_IzIOGaHNprbbHJEh.json.gz
2021-07-03 09:34:19        822 XXXXXXXXXXXX_CloudTrail_ap-northeast-1_20210703T0030Z_avVZy2vFqyNB1caj.json.gz
2021-07-03 09:35:08        884 XXXXXXXXXXXX_CloudTrail_ap-northeast-1_20210703T0035Z_38SO2vJJnPIqBwBw.json.gz
2021-07-03 09:37:50       1467 XXXXXXXXXXXX_CloudTrail_ap-northeast-1_20210703T0035Z_ayPMCrVpyvyD2jDm.json.gz
2021-07-03 09:37:48       1471 XXXXXXXXXXXX_CloudTrail_ap-northeast-1_20210703T0035Z_d8TWL3v0YSuD48LS.json.gz
2021-07-03 09:40:38        698 XXXXXXXXXXXX_CloudTrail_ap-northeast-1_20210703T0040Z_EyzQphQFBfZQaN0H.json.gz
2021-07-03 09:39:29        967 XXXXXXXXXXXX_CloudTrail_ap-northeast-1_20210703T0040Z_jfwdWsIrEGpkk5vW.json.gz
2021-07-03 09:43:50       1469 XXXXXXXXXXXX_CloudTrail_ap-northeast-1_20210703T0040Z_rxBea1hzHnPEdgAQ.json.gz
2021-07-03 09:44:39        822 XXXXXXXXXXXX_CloudTrail_ap-northeast-1_20210703T0045Z_7KVxuAosmThMHx5P.json.gz
2021-07-03 09:47:44       1469 XXXXXXXXXXXX_CloudTrail_ap-northeast-1_20210703T0045Z_UnvMiaFAqJHWm6Jd.json.gz
2021-07-03 09:53:03       2315 XXXXXXXXXXXX_CloudTrail_ap-northeast-1_20210703T0050Z_05EZYDzI6pOWnVBO.json.gz
2021-07-03 09:49:49        968 XXXXXXXXXXXX_CloudTrail_ap-northeast-1_20210703T0050Z_4dF5n9kjmR0ZoAMe.json.gz
2021-07-03 09:57:53       1469 XXXXXXXXXXXX_CloudTrail_ap-northeast-1_20210703T0050Z_Et9EVJN4ceqes9Yd.json.gz
2021-07-03 09:53:48        698 XXXXXXXXXXXX_CloudTrail_ap-northeast-1_20210703T0050Z_XudJCQhoEFMyg1hH.json.gz
2021-07-03 09:48:28        891 XXXXXXXXXXXX_CloudTrail_ap-northeast-1_20210703T0050Z_ceVoflJ9uXJMAI2c.json.gz
2021-07-03 09:54:59       2296 XXXXXXXXXXXX_CloudTrail_ap-northeast-1_20210703T0055Z_IxCadq1qe6nyJwhL.json.gz
2021-07-03 10:03:21       2820 XXXXXXXXXXXX_CloudTrail_ap-northeast-1_20210703T0055Z_ifKbWy0yM1Ds9QRs.json.gz
2021-07-03 10:08:22       2277 XXXXXXXXXXXX_CloudTrail_ap-northeast-1_20210703T0100Z_5KBBiKq1UPjRVaCr.json.gz

保管と移行にかかる費用

2021/7時点での料金ページの情報を見てみます。(東京リージョン前提とします)

上記ページによるとS3での保管とライフサイクルによる移行では下記の費用が掛かるとのこと。

  • ストレージ料金。月ごとにStandardで0.025USD/GB、Glacierで0.005USD/GB

  • ライフサイクル移行リクエストの料金。1000リクエストごと(=1000オブジェクトごと)につき0.03426USD

上記2つの費用だけであれば、1KB程度のオブジェクトでも年単位の期間で保管するならGlacierに移行した方がお得な気がしますが、実はこれらの他にも考慮すべきコストがあります。

上記ページによるとGlacierへのストレージクラスの移行ではさらに下記のオーバーヘッドの保管料金を考慮する必要があるとのこと。

  • ストレージオーバーヘッド料金 - オブジェクトを S3 Glacier または S3 Glacier Deep Archive ストレージクラスに移行すると、そのオブジェクトを管理するメタデータを収容するために、各オブジェクトに対して一定量のストレージが追加されます。
    • S3 Glacier または S3 Glacier Deep Archive にアーカイブされたオブジェクトごとに、Amazon S3 ではオブジェクトの名前とその他のメタデータに 8 KB のストレージを使用します。Amazon S3 でこのメタデータを保存する目的は、ユーザーが Amazon S3 API を使用して、アーカイブされたオブジェクトのリアルタイムのリストを取得できるようにすることです。詳細については、「GET Bucket (List Objects)」を参照してください。この追加ストレージに対しては、Amazon S3 の標準料金で課金されます。

    • S3 Glacier または S3 Glacier Deep Archive にアーカイブされるオブジェクトごとに、インデックスおよび関連するメタデータ用に 32 KB のストレージが追加されます。この追加データは、オブジェクトを特定して復元するのに必要です。この追加ストレージに対しては、S3 Glacier または S3 Glacier Deep Archive の料金が課金されます。

このオーバーヘッドの保管料金も踏まえ、CloudTrailの証跡ログ(1オブジェクトあたり1KB)を10年間保管する場合の1000オブジェクトあたりの費用を、ライフサイクル移行を行わない場合と行う場合とで試算して比較してみます。

ライフサイクル移行を行わない場合(Standardで10年間保管)

//Standardで10年間保管の料金
(1GB/1000000) * 1000オブジェクト * 0.025USD/GB/月 * (12 * 10)ヶ月 = 0.003USD

ライフサイクル移行を行う場合(Standardで1年間保管後にGlacierで9年間保管)

//Standardで1年間保管の料金
(1GB/1000000) * 1000オブジェクト * 0.025USD/GB/月 * (12 * 1)ヶ月 = 0.0003USD

//ライフサイクル移行リクエストの料金
1000オブジェクト * 0.03426USD/1000オブジェクト = 0.03426USD

//Glacierで9年間保管の料金
(1GB/1000000) * 1000オブジェクト * 0.005USD/GB/月 * (12 * 9)ヶ月 = 0.00054USD

//オブジェクトの名前とその他のメタデータの保管の料金
(8GB/1000000) * 1000オブジェクト * 0.025USD/GB/月 * (12 * 9)ヶ月 = 0.0216USD

//オブジェクトのインデックスとその他のメタデータの保管の料金
(32GB/1000000) * 1000オブジェクト * 0.005USD/GB/月 * (12 * 9)ヶ月 = 0.01728USD

//合計
0.0003USD + 0.03426USD + 0.00054USD + 0.0216USD + 0.01728USD = 0.07398USD

結論

両者の合計費用を比較してみます。

//(Standardで10年間保管した場合の費用) - (Standardで1年間保管後にGlacierで9年間保管した場合の費用)
0.003USD - 0.07398USD = -0.07098USD

スプレッドシートで計算した際の様子。

  • 結論:Standardに保管し続けるよりも、Glacierへの移行を行った方が10年間で1000オブジェクトあたり費用が約0.071USD増加するという計算結果となりました。 そもそも9年間の「オブジェクトの名前とその他のメタデータの保管の料金」+「オブジェクトのインデックスとその他のメタデータの保管の料金」の料金だけで、「Standardで10年間保管の料金」を超えているため、Glacierへの保管期間が長いほどコスト負けしてしまいます。つまり損益分岐点なんてものはありませんでした。

おわりに

CloudTrailの証跡データをS3ライフサイクルでGlacierに移行する際の損益分岐点を探ってみました。

単純にライフサイクルによりオブジェクトをそのままGlacierに移行するだけではコスト負けして余計に費用が掛かることが分かりました。よってコスト削減を行うためには移行時に複数オブジェクトをサイズの大きな単一オブジェクトに集約する仕組みが必要となりそうです。機会があればこの仕組みの実現方法についても調べてみたいです。

参考

以上