バージョニングを有効にしたS3バケットをAWS CLIコマンドで空にします。
AWSマネジメントコンソールでも、バケット選択 → [ 空にする ] → [ 完全に削除 ] と入力 → [ 空にする ] をクリックすれば一括削除できますが、複数バケットある場合はそれなりに手間なのでコマンドでサクッと削除してみます。
一括削除コマンド
list-object-versionsとdelete-objectのワンライナーで一括削除
コマンド先頭のbucketを対象のバケット名に変更してから実行してください。
$ bucket=zoo200-bucket && aws s3api list-object-versions --bucket $bucket | jq -r '.Versions[] | [.Key, .VersionId] |@tsv' | while read k v;do aws s3api delete-object --bucket $bucket --key $k --version-id $v; done
...
$
このワンライナーは、まずlist-object-versionsコマンドのレスポンスのバージョンIDとキー(S3のファイルパス)を jqコマンドで抽出 → それを1行ずつtsv形式(基本的にIFSはタブや空白)で出力 → 各バージョンとキーをwhile文中のdelete-objectコマンドに渡して削除 という流れです。
$ aws s3api list-object-versions --bucket zoo200-bucket
{
"Versions": [
{
"ETag": "\"3b7c42xxxx\"",
"Size": 4,
"StorageClass": "STANDARD",
"Key": "demo-file",
"VersionId": "Zconi6xxxx",
"IsLatest": true,
"LastModified": "2022-05-03T11:12:19+00:00",
"Owner": {
"DisplayName": "xyz",
"ID": "6bbb16xxxx"
}
},
{
...
"Key": "demo-file",
"VersionId": "QeVwNoxxxx",
...
},
{
...
"Key": "demo-file",
"VersionId": "d27wQXxxxx",
...
}
]
}
$
## 上記のレスポンスをタブ区切りに整形
$ bucket=zoo200-bucket && aws s3api list-object-versions --bucket $bucket | jq -r '.Versions[] | [.Key, .VersionId] |@tsv'
demo-file Zconi6xxxx
demo-file QeVwNoxxxx
demo-file d27wQXxxxx
$
## whileループでdelete-objectを実行
$ bucket=zoo200-bucket && aws s3api list-object-versions --bucket $bucket | jq -r '.Versions[] | [.Key, .VersionId] |@tsv' | while read k v;do echo aws s3api delete-object --bucket $bucket --key $k --version-id $v; done
aws s3api delete-object --bucket zoo200-bucket --key demo-file --version-id Zconi6xxxx
aws s3api delete-object --bucket zoo200-bucket --key demo-file --version-id QeVwNoxxxx
aws s3api delete-object --bucket zoo200-bucket --key demo-file --version-id d27wQXxxxx
$
なおdelete-objectはversion-idを指定しないと削除マーカーがつくのみで実際にオブジェクトは削除はされません。
delete-objectsとjsonファイルで一括削除
ファイル作成の必要があるためサクッとではありませんが、delete-objects(複数形)コマンドに削除対象のバージョンとキーを記述したJSONファイルを渡すことでも一括削除ができます。
$ cat delete.json
{
"Objects": [
{
"Key": "demo-file",
"VersionId": "AL_Yj4xxxx"
},
{
"Key": "demo-file",
"VersionId": "1gOKX7xxxx"
},
{
"Key": "demo-file",
"VersionId": "HHFzJIxxxx"
}
]
}
$
$ aws s3api delete-objects --bucket zoo200-bucket --delete file://delete.json
...
$
今回は以上です〜ノシ
参考
(`・ω・´)ノ アリガトウゴザイマス!!
S3 オブジェクトの過去バージョンを一括削除する
シェル芸で使いたい jqイディオム
jq Manual
リンク
リンク