バケットバージョニング
[更新: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のヘルプを参照してください。