こんにちは!Tamaです!
S3にアップロードしたファイルを間違って上書き、削除してしまった!なんてことありませんか?
バージョニング機能が有効なS3バケットではファイルを以前のバージョンに戻せるだけではなく、なんと誤って削除してしまったファイルを復元させることが可能です。
今回は「CLIでS3管理~バージョニング設定編~」と題して、AWS CLIを使ったS3バケットへのバージョニングの設定と確認を行っていきます。
準備としてS3バケットにテスト用ファイルを設置しておきます。
1 2 3 4 |
$ cat test.txt test file ver.1 $ aws s3 cp test.txt s3://[バケット名]/ upload: ./test.txt to s3://[バケット名]/test.txt |
バージョニング有効化
バージョニング設定の有効化と確認を行います。
StatusがEnabledになっていれば設定完了です。
1 2 3 4 5 6 7 |
#バージョニングを有効化 $ aws s3api put-bucket-versioning --bucket [バケット名] --versioning-configuration Status=Enabled #バージョニング設定の確認 $ aws s3api get-bucket-versioning --bucket [バケット名] { "Status": "Enabled" } |
次にファイルをアップロード、予めS3に保存しておいたファイルを上書きしバージョニングの確認を行います。
1 2 3 4 5 |
#test.txt書き換え $ echo "test file ver.2" > test.txt #S3バケットへコピー $ aws s3 cp test.txt s3://[バケット名]/ upload: ./test.txt to s3://[バケット名]/test.txt |
ファイルが上書きできているか確認します。
1 2 3 4 5 6 |
#アップロードしたファイルの内容確認 $ aws s3 cp s3://[バケット名]/test.txt - test file ver.2 #オブジェクト確認 $ aws s3 ls s3://[バケット名] 2018-02-01 17:46:02 16 test.txt |
ファイルの上書きは確認できましたが、s3 ls コマンドではバージョンの確認はできません。
バージョンを確認するにはs3api list-object-versionsコマンドを使う必要があります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
#指定バケット以下ファイルのバージョン確認 $ aws s3api list-object-versions --bucket [バケット名] { "Versions": [ { "LastModified": "2018-02-01T08:49:54.000Z", "VersionId": "iRfkDhjPO8bnmmThrW6R40h3sO4ViPHY", "ETag": "\" xxxxxxxxxxxxxxxxxxxxxxxxxx \"", "StorageClass": "STANDARD", "Key": "test.txt", "Owner": { "DisplayName": " xxxxxxxxxxxx ", "ID": " xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx " }, "IsLatest": true, "Size": 16 }, { "LastModified": "2018-02-01T08:48:44.000Z", "VersionId": "null", "ETag": "\"xxxxxxxxxxxxxxxxxxxxxxxxxx\"", "StorageClass": "STANDARD", "Key": "test.txt", "Owner": { "DisplayName": "xxxxxxxxxxxx", "ID": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, "IsLatest": false, "Size": 16 } ] } |
バージョンの異なるファイルが2つ表示されました。
最新のファイルはIsLatestがtrueになっています。
バージョニングの管理にはVersionIdを使用しますが、
バージョン管理されていないオブジェクトの場合VersionIdはnullになります。
バージョニング無効化
最後にバージョニングの無効化も試してみました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
#バージョニング無効化 $ aws s3api put-bucket-versioning --bucket [バケット名] --versioning-configuration Status=Suspended aws s3api get-bucket-versioning --bucket [バケット名] { "Status": "Suspended" } #バージョン確認 $ aws s3api list-object-versions --bucket level100 { "Versions": [ { "LastModified": "2018-02-01T08:49:54.000Z", "VersionId": "iRfkDhjPO8bnmmThrW6R40h3sO4ViPHY", "ETag": "\"4906a8fc7ed06b284953145fe03d8e64\"", "StorageClass": "STANDARD", "Key": "test.txt", "Owner": { "DisplayName": "y-numasawa", "ID": "99e98a70f3f7079dfda5a60137c342e64a4573070331a23a694cd7d197621b3c" }, "IsLatest": true, "Size": 16 }, { "LastModified": "2018-02-01T08:48:44.000Z", "VersionId": "null", "ETag": "\"b26a3c6cf47c7c252ae41c5fd9d83d38\"", "StorageClass": "STANDARD", "Key": "test.txt", "Owner": { "DisplayName": "y-numasawa", "ID": "99e98a70f3f7079dfda5a60137c342e64a4573070331a23a694cd7d197621b3c" }, "IsLatest": false, "Size": 16 } ] } |
S3へ書き込み済みのバージョンファイルはバージョニング無効化後も保持されるようです。
S3のバージョニングは便利ですが差分での管理ではないため大きなファイルを管理する場合思ったより利用料がかさむこともあるため注意が必要です。
次回はバージョン管理を紹介します。
またお会いしましょう!