ForgeVision Engineer Blog

フォージビジョン エンジニア ブログ

S3 のバージョニングは何世代まで保持できるか?

こんにちは、AWS 内製化支援チームの尾谷です。

先日、お客様より Amazon S3 のバージョニングは何世代まで保持できるか?質問をいただきました。
考えたこともなかったのですが、非常に身近な仕様に関するご質問だったので、調べてみました。

バージョニング数に制限はない..?

おそらく、本質問の回答は「バージョニング数に制限はない。」という回答で宜しいのではないでしょうか。

AWS のドキュメントにて制限の記載が見つけられませんでした。
AWS サポートに問い合わせしようかとも思いましたが、使用感などを含めて自分で検証をしてみることにしました。

S3 バケットにてバージョニングを有効化

まずはバージョニングの有効化します。S3 バケットの管理からバージョニングを選択し、有効にする を選択しました。

AWS Lambda 関数

次に、ただひたすら、S3 バケットに同じオブジェクトを書き込み続ける Lambda 関数をデプロイします。

Python 3.11 が使えるようになりましたね!

IAM ロールのポリシーには、対象のバケットに対象のファイルを書き込むだけの権限を付与し、事故を防ぎました。

Lambda コード

シンプルなコードです。Lambda のテンポラリーディレクトリに繰り返しファイルに回数を記録して保存し、ファイルを S3 にアップロードします。

import json
import os
import boto3
s3_client = boto3.client('s3')

def lambda_handler(event, context):
    for i in range(1000):
        print(i)
        with open("/tmp/hoge.txt", "w") as text_data:
            print(i, file=text_data)
        s3_client.put_object(
            Bucket='otani-test-pri-s3',
            Key='hoge.txt'
            )

上記コードをデプロイし、Lambda の実行時間を 15 秒に延長してテスト実行したところ、タイムアウトしてしまいました。
1000 ファイル書き込むには、結構時間がかかりそうです。

S3 管理コンソールにアクセスしてファイルを確認すると、バージョン (300+) の表記となっていて、ページ数がえらいことになっていました。

30 ページまで進んだところ、読み込みが発生してファイルが表示されなくなりました。

その後、しばらくしてからリロードするとファイルが表示されました。
何度か試しましたが、最終ページは結果がすぐに表示されないような仕様がありそうです。

ということで、バージョニング数に制限はないようだが、500 バージョンぐらいまでであれば、ストレスなくお使いいただけそうであると回答することにしました。