ablog

不器用で落着きのない技術者のメモ

S3 オブジェクトの過去バージョンを一括削除する

バージョニングを有効化している S3 バケットでオブジェクトの過去バージョンを一括削除する手順。

  • 任意の S3 バケットの過去バージョンを確認する。
% aws s3api list-object-versions --bucket test-bucket|jq -r '.Versions[]|select(.IsLatest==false)|@text "\(.Key) \(.VersionId)"'
test.txt SFDNnzR6u1gfaeSV6ObrLubM.BoG5SiM
test.txt kUD7TJofypM6OCKj6kKPLrsWQC3f6gCm
test.txt ypCUBbPprcBd4mEOpjSr3FqFsfSjNetN
test.txt lIL_Lx69anh5NEc54YpAq2wOdoct5KB4
test/test.txt .r_ZZYydapeG8hzufYOFUuUXoHg0vRsl
test/test.txt TY2KZY4Ny_HeY7RU9q4th_buEr5Rrtca
test/test2.txt xGFYyS1BHb.ue.waKQiNfTSwQPrPuEWo
test/test2.txt oDt8wsl0t.ZgU0NJ5K6tkOrTQQ4cfoDm
test/test2.txt t4yV.zYNTP6ZXi0PCftXqhKk1v9kkA73
test2.txt ujot_grq_oL3NrjGpgXC8Y_5eFR9RMr5
test2.txt NFZNfh.vXXivtWekN1LSDly_75Fyh0Yl
test2.txt w2hKNGVg6M6hlUwjw5rVD9ocOGrXlX.v
  • 過去バージョンを一括削除する。
% aws s3api list-object-versions --bucket test-bucket|jq -r '.Versions[]|select(.IsLatest==false)|@text "\(.Key) \(.VersionId)"'|while read KEY VER
do
        aws s3api delete-object --bucket test-bucket --key ${KEY} --version-id ${VER}
done

{
    "VersionId": "SFDNnzR6u1gfaeSV6ObrLubM.BoG5SiM"
}
{
    "VersionId": "kUD7TJofypM6OCKj6kKPLrsWQC3f6gCm"
}
{
    "VersionId": "ypCUBbPprcBd4mEOpjSr3FqFsfSjNetN"
}
{
    "VersionId": "lIL_Lx69anh5NEc54YpAq2wOdoct5KB4"
}
{
    "VersionId": ".r_ZZYydapeG8hzufYOFUuUXoHg0vRsl"
}
{
    "VersionId": "TY2KZY4Ny_HeY7RU9q4th_buEr5Rrtca"
}
{
    "VersionId": "xGFYyS1BHb.ue.waKQiNfTSwQPrPuEWo"
}
{
    "VersionId": "oDt8wsl0t.ZgU0NJ5K6tkOrTQQ4cfoDm"
}
{
    "VersionId": "t4yV.zYNTP6ZXi0PCftXqhKk1v9kkA73"
}
{
    "VersionId": "ujot_grq_oL3NrjGpgXC8Y_5eFR9RMr5"
}
{
    "VersionId": "NFZNfh.vXXivtWekN1LSDly_75Fyh0Yl"
}
{
    "VersionId": "w2hKNGVg6M6hlUwjw5rVD9ocOGrXlX.v"
}
  • 過去バージョンが削除されていることを確認する。
% aws s3api list-object-versions --bucket test-bucket|jq -r '.Versions[]|select(.IsLatest==false)|@text "\(.Key) \(.VersionId)"'