この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんにちは、S3のバージョニングって便利だなと思っているDA部の下地です。
そんなS3のバージョニングをAWS CLIを使用して実装してみましたのでまとめたいと思います。
全体像
aws s3api
とaws s3
を使用し以下の手順で実装します(CLIコマンドが使用できるという前提で進めさせてもらいます)。
- バケット作成とバージョニングの設定
- ファイルのアップロードと削除
- objectのバージョンを確認
- ファイルを戻す
1. バケット作成とバージョニングの設定
まずはじめに、2010-test-bucket
という名前でS3バケットを作成します。作成時に、--create-bucket-configuration LocationConstraint
の指定が必要になるのでap-northeast-1
を指定します。
$ aws s3api create-bucket --profile プロファイル名 \
--bucket 2010-test-bucket \
--create-bucket-configuration LocationConstraint=ap-northeast-1
{
"Location": "http://2010-test-bucket.s3.amazonaws.com/"
}
バケットが作成されました。作成したバケットのversioningを有効化するためにs3api put-bucket-versioning
を使用します。
$ aws s3api put-bucket-versioning --profile プロファイル名 \
--bucket 2010-test-bucket \
--versioning-configuration Status=Enabled
バケットのバージョニングが有効化されたか確認します。
$ aws s3api get-bucket-versioning --profile プロファイル名 \
--bucket 2010-test-bucket
{
"Status": "Enabled"
}
有効化されていることを確認しました。
2. ファイルのアップロードと削除
次にバージョニングを有効化したS3バケットに、s3 cp
を使用してファイルをアップロードします。
$ aws s3 cp test.txt s3://2010-test-bucket/ --profile プロファイル名
upload: ./test.txt to s3://2010-test-bucket/test.txt
s3 ls
を使用してバケット内を確認します。
$ aws s3 ls s3://2010-test-bucket/ --profile プロファイル名
2020-10-14 17:22:56 15 test.txt
アップロードしたファイルがあることが確認できました。では、このファイルを削除します。
$ aws s3 rm s3://2010-test-bucket/test.txt --profile プロファイル名
delete: s3://2010-test-bucket/test.txt
バケット内にファイルがないことを確認できました。
$ aws s3 ls s3://2010-test-bucket/ --profile プロファイル名
3. ファイルのバージョンを確認
text.txt
はファイルは削除されていますがバージョニングを有効にしているのでファイルのバージョンをs3api list-object-versions
を使用して確認します。
$ aws s3api list-object-versions --profile プロファイル名 \
--bucket 2010-test-bucket \
--prefix test.txt
{
"Versions": [
{
"ETag": "\"ebc92aad19b71192647c7663ecf25f18\"",
"Size": 15,
"StorageClass": "STANDARD",
"Key": "test.txt",
"VersionId": "VoHF9j08Yp.zys8frvWszurCmYjqAD5l",
"IsLatest": false,
"LastModified": "2020-10-14T08:22:56+00:00",
"Owner": {
"DisplayName": "spare-0340",
"ID": "768f6050502b8ce1417048ad447ef58a7357f088ff070255f1041259028d393d"
}
}
],
"DeleteMarkers": [
{
"Owner": {
"DisplayName": "spare-0340",
"ID": "768f6050502b8ce1417048ad447ef58a7357f088ff070255f1041259028d393d"
},
"Key": "test.txt",
"VersionId": "N3a0VLfBZRMXDAand3KSErfLFwFuOcOF",
"IsLatest": true,
"LastModified": "2020-10-14T08:26:17+00:00"
}
]
}
VersionsとDeleteMarkerの2つがあります。
4. ファイルを戻す
先ほど確認したDeleteMarker
を削除するとファイルが削除される前の状態に戻りますので、DeleteMarker
のVersionIdを指定し削除します。削除する際にはs3api delete-object
を使用します。
aws s3api delete-object --profile プロファイル名 \
--bucket 2010-test-bucket \
--key 2010_versioning/test.txt \
--version-id N3a0VLfBZRMXDAand3KSErfLFwFuOcOF
{
"DeleteMarker": true,
"VersionId": "N3a0VLfBZRMXDAand3KSErfLFwFuOcOF"
}
ではdeleteマーカーを削除しましたので、ファイルがあるか確認します。
aws s3 ls s3://2010-test-bucket/ --profile プロファイル名
2020-10-14 17:22:56 15 test.txt
削除したファイルが戻ったことが確認できました!
まとめ
S3のバージョニングはとても便利だなと実感したのでCLIを使用して実装しました。この記事がどなたかの助けになれば幸いです。