CLIでS3管理~バージョニング設定編~

こんにちは!Tamaです!

S3にアップロードしたファイルを間違って上書き、削除してしまった!なんてことありませんか?

バージョニング機能が有効なS3バケットではファイルを以前のバージョンに戻せるだけではなく、なんと誤って削除してしまったファイルを復元させることが可能です。

今回は「CLIでS3管理~バージョニング設定編~」と題して、AWS CLIを使ったS3バケットへのバージョニングの設定と確認を行っていきます。

準備としてS3バケットにテスト用ファイルを設置しておきます。

1$ cat test.txt2test file ver.13$ aws s3 cp test.txt s3://[バケット名]/4upload: ./test.txt to s3://[バケット名]/test.txt

バージョニング有効化

バージョニング設定の有効化と確認を行います。

StatusがEnabledになっていれば設定完了です。

1#バージョニングを有効化2$ aws s3api put-bucket-versioning --bucket [バケット名] --versioning-configuration Status=Enabled3#バージョニング設定の確認4$ aws s3api get-bucket-versioning --bucket [バケット名]5{6    "Status": "Enabled"7}

次にファイルをアップロード、予めS3に保存しておいたファイルを上書きしバージョニングの確認を行います。

1#test.txt書き換え2$ echo "test file ver.2" > test.txt3#S3バケットへコピー4$ aws s3 cp test.txt s3://[バケット名]/5upload: ./test.txt to s3://[バケット名]/test.txt

ファイルが上書きできているか確認します。

1#アップロードしたファイルの内容確認2$ aws s3 cp s3://[バケット名]/test.txt -3test file ver.24#オブジェクト確認5$ aws s3 ls s3://[バケット名]62018-02-01 17:46:02         16 test.txt

ファイルの上書きは確認できましたが、s3 ls コマンドではバージョンの確認はできません。

バージョンを確認するにはs3api list-object-versionsコマンドを使う必要があります。

1#指定バケット以下ファイルのバージョン確認2$ aws s3api list-object-versions --bucket [バケット名]3{4    "Versions": [5        {6            "LastModified": "2018-02-01T08:49:54.000Z",7            "VersionId": "iRfkDhjPO8bnmmThrW6R40h3sO4ViPHY",8            "ETag": "\" xxxxxxxxxxxxxxxxxxxxxxxxxx \"",9            "StorageClass": "STANDARD",10            "Key": "test.txt",11            "Owner": {12                "DisplayName": " xxxxxxxxxxxx ",13                "ID": " xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx "14            },15            "IsLatest": true,16            "Size": 1617        },18        {19            "LastModified": "2018-02-01T08:48:44.000Z",20            "VersionId": "null",21            "ETag": "\"xxxxxxxxxxxxxxxxxxxxxxxxxx\"",22            "StorageClass": "STANDARD",23            "Key": "test.txt",24            "Owner": {25                "DisplayName": "xxxxxxxxxxxx",26                "ID": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"27            },28            "IsLatest": false,29            "Size": 1630        }31    ]32}

バージョンの異なるファイルが2つ表示されました。

最新のファイルはIsLatestがtrueになっています。

バージョニングの管理にはVersionIdを使用しますが、

バージョン管理されていないオブジェクトの場合VersionIdはnullになります。

バージョニング無効化

最後にバージョニングの無効化も試してみました。

1#バージョニング無効化2$ aws s3api put-bucket-versioning --bucket [バケット名] --versioning-configuration Status=Suspended3aws s3api get-bucket-versioning --bucket [バケット名]4{5    "Status": "Suspended"6}7#バージョン確認8$ aws s3api list-object-versions --bucket level1009{10    "Versions": [11        {12            "LastModified": "2018-02-01T08:49:54.000Z",13            "VersionId": "iRfkDhjPO8bnmmThrW6R40h3sO4ViPHY",14            "ETag": "\"4906a8fc7ed06b284953145fe03d8e64\"",15            "StorageClass": "STANDARD",16            "Key": "test.txt",17            "Owner": {18                "DisplayName": "y-numasawa",19                "ID": "99e98a70f3f7079dfda5a60137c342e64a4573070331a23a694cd7d197621b3c"20            },21            "IsLatest": true,22            "Size": 1623        },24        {25            "LastModified": "2018-02-01T08:48:44.000Z",26            "VersionId": "null",27            "ETag": "\"b26a3c6cf47c7c252ae41c5fd9d83d38\"",28            "StorageClass": "STANDARD",29            "Key": "test.txt",30            "Owner": {31                "DisplayName": "y-numasawa",32                "ID": "99e98a70f3f7079dfda5a60137c342e64a4573070331a23a694cd7d197621b3c"33            },34            "IsLatest": false,35            "Size": 1636        }37    ]38}

S3へ書き込み済みのバージョンファイルはバージョニング無効化後も保持されるようです。

S3のバージョニングは便利ですが差分での管理ではないため大きなファイルを管理する場合思ったより利用料がかさむこともあるため注意が必要です。

次回はバージョン管理を紹介します。

またお会いしましょう!

この記事を書いた人

aws-recipe-user