バケットバージョニング

[更新:2025年10月21日]

バケットバージョニング機能について

バケットバージョニング機能は バケット内のオブジェクトにおいて複数のバージョンを保持できる仕組みです。この機能を有効にすることで、意図しないオブジェクトの上書きや削除が実行された場合でも、復旧・復元させることが可能になります。

バージョニングステータス

バージョニングは、バケット単位で以下の3つの状態のいずれかに設定されます。

注釈

設定はバケット単位となります。オブジェクト単位での設定はできません。

ステータス

説明

Unversioned

初期状態のステータス。バージョニングは無効になっています。

Enabled

バージョニングが有効になっています。

Suspended

バージョニングが一時停止状態になっています。
※この状態ではオブジェクトの新しいバージョンが作成されることはありません。また、過去のバージョンが自動的に削除されることもありません。

注意

一度バージョニングを有効にしたバケット(Enabledへの変更だけではなく直接Suspendedへ変更した場合も含む)はバージョニング無効の状態(Unversioned)に戻すことはできません。バージョニングを使用しない場合は一時停止状態(Suspended)にする必要があります。

AWS CLIによる利用例

バケットバージョニングはS3 APIでのみ操作可能な機能です。ここではAWS CLIによるコマンド例を記載します。より詳細な情報はAWS CLIのヘルプ、またはAWSのドキュメントを参照してください。

バージョニングステータスの確認

S3API:GetBucketVersioningを使用してバージョニングステータスを取得することができます。以下は「example」という名前のバケットに対して確認する場合の各状態ごとの戻り値の例です。

無効(Unversioned)の場合

$ aws --endpoint-url="https://s3.isk01.sakurastorage.jp" s3api get-bucket-versioning --bucket example
$
※戻り値なし

有効(Enabled)の場合

$ aws --endpoint-url="https://s3.isk01.sakurastorage.jp" s3api get-bucket-versioning --bucket example
{
    "Status": "Enabled"
}

一時停止(Suspended)の場合

$ aws --endpoint-url="https://s3.isk01.sakurastorage.jp" s3api get-bucket-versioning --bucket example
{
    "Status": "Suspended"
}

バージョニングを有効にする

S3API:PutBucketVersioningを使用してバージョニングを有効にすることができます。

$ aws --endpoint-url="https://s3.isk01.sakurastorage.jp" s3api put-bucket-versioning --bucket example --versioning-configuration Status=Enabled

バージョニングを一時停止する

S3API:PutBucketVersioningを使用してバージョニングを一時停止状態にすることができます。

$ aws --endpoint-url="https://s3.isk01.sakurastorage.jp" s3api put-bucket-versioning --bucket example --versioning-configuration Status=Suspended

バージョニングされたオブジェクト一覧を取得する

S3API:ListObjectVersionsを使用してバージョニングされたオブジェクトのバージョン一覧を取得できます。

注釈

通常のオブジェクトリスト取得API(S3API:ListObjects)では取得できないのでご注意ください。

$ aws --endpoint-url="https://s3.isk01.sakurastorage.jp" s3api list-object-versions --bucket example --prefix test0001-cp.png
{
    "Versions": [
        {
            "ETag": "\"824154963b82c7f725b058da598a4e20\"",
            "Size": 2844633,
            "StorageClass": "STANDARD",
            "Key": "test0001-cp.png",
            "VersionId": "39383331303836383534303238353939393939395333503031202039332e3132303535343037352e313336",
            "IsLatest": true,
            "LastModified": "2023-07-08T03:10:59.637000+00:00",
            "Owner": {
                "DisplayName": "",
                "ID": ""
            }
        },
        {
            "ETag": "\"824154963b82c7f7250b85da598a4e20\"",
            "Size": 28446009,
            "StorageClass": "STANDARD",
            "Key": "test0001-cp.png",
            "VersionId": "null",
            "IsLatest": false,
            "LastModified": "2023-07-04T05:50:52.894000+00:00",
            "Owner": {
                "DisplayName": "",
                "ID": ""
            }
        }
    ]
}

バージョニングされたオブジェクトを削除する

S3API:DeleteObjectを使用してバージョニングされたオブジェクトを削除することができます。

パラメータ versionId を指定することで任意のバージョンのオブジェクトを削除することができます。 versionId を指定しない場合は最新のバージョンのオブジェクトが削除されます。

$ aws --endpoint-url="https://s3.isk01.sakurastorage.jp" s3api delete-object --bucket example --key test0001-cp.png --version-id 39383331303836383534303238353939393939395333503031202039332e3132303535343037352e313336
{
    "VersionId": "39383331303836383534303238353939393939395333503031202039332e3132303535343037352e313336"
}

特定のバージョンのオブジェクトを取得する

S3API:GetObjectを使用してバージョニングされたオブジェクトを取得することができます。

パラメータ versionId を指定することで任意のバージョンのオブジェクトを取得することができます。

$ aws --endpoint-url="https://s3.isk01.sakurastorage.jp" s3api get-object --bucket example --key test0001-cp.png --version-id 39383331303836383534303238353939393939395333503031202039332e3132303535343037352e313336  /tmp/outputfile.png

特定のバージョンのオブジェクトで復元する

S3API:CopyObjectを使用して特定のバージョンのオブジェクトを復元することができます。 copy-source パラメータのオブジェクト名に versionId を指定する必要があります。

注意

S3API:CopyObjectコマンドは、コピー元のバケット及びオブジェクトの読み取り権限と、コピー先のバケット及びオブジェクトへの書き込み権限の両方を持つアクセスキー・シークレットキーのペアが必要になります。

$ aws --endpoint-url="https://s3.isk01.sakurastorage.jp" s3api copy-object --bucket example --copy-source example/test0001-cp.png?versionid=39383331303836383534303238353939393939395333503031202039332e3132303535343037352e313336 --key test0001-cp.png
{
    "VersionId": "39383331303834363232313332323939393939395333503031202039332e3132303538383037322e313338",
    "CopyObjectResult": {
        "ETag": "\"824154963b82c7f725b085da598a4e20\"",
        "LastModified": "2023-07-10T09:22:58.631000+00:00"
    }
}
  • --bucket パラメータはコピー先のバケット名となります。

  • --copy-source パラメータはコピー元のバケット名、オブジェクト名及びバージョンIDを指定します(例: <bucket>/Key?versionId=XXXXXXXXX)。

  • --key パラメータはコピー先のオブジェクト名となります。既存のオブジェクト名を指定した場合上書きされます。

  • その他詳細はawscli copy-objectのヘルプを参照してください。