Amazon S3のライフサイクルによるストレージクラス移行制約

S3のライフサイクルによってストレージクラス移行を設定したがストレージクラス移行されないファイルがあり原因を調査しました。
今回はStandardからGlacier Instant Retrievalに移行を試みました。

結果、今回はファイルの容量が5KiB程度であった為下記制約に該当していました。

  • 128 KiB 未満のオブジェクト – 以下の移行では、Amazon S3 は 128 KiB 未満のオブジェクトを移行しません。
    • S3 Standard または S3 標準 – IA ストレージクラスから S3 Intelligent-Tiering または S3 Glacier Instant Retrieval へ移行します。
    • S3 Standard ストレージクラスから S3 Standard – IA または S3 1 ゾーン – IA への移行。
https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/lifecycle-transition-general-considerations.html

なぜ、128KiBが閾値になるかというとS3料金のストレージクラス毎の説明が関係してきます。

S3 Glacier Instant Retrieval の課金対象となる最小オブジェクトサイズは 128 KB です。128 KB より小さいサイズのオブジェクトを保存することもできますが、適切なストレージクラス料金で 128 KB のストレージとして課金されます。

https://aws.amazon.com/jp/s3/pricing/

日本語が難しいですね。適切なストレージクラス料金...この点下記記事で確認してくれていました。

「128 KB より小さいオブジェクトは 128 KB として S3 Glacier Instant Retrieval のストレージ料金で課金される」が正しい考え方でした。

https://dev.classmethod.jp/articles/s3-minimum-billable-object-size/

当方で試算をしてみるとストレージ料金のみで考えると26KiBより大きい場合にはGlacier Instant Retrievalに置いたほうが安くなりそうでした。
ライフサイクルで移行してくれないだけで明示的に指定すればストレージクラスの変更は可能です。
数ファイルくらいでは気にする必要ないと思いますが、ファイル数が膨大になるようだと価格差が気になってくるかもしれませんね。