S3の不完全なマルチパートアップロードをawscliで一括削除する
s3 storage lensとかcost explorerとか見てたらなんかオブジェクトとかコスト多いなとなって、s3の不完全なマルチパートアップロードが溜まってるぽかった
消し方について軽くググると、バケットライフサイクルでやる方法は多く出てくるものの、アドホックに消す方法がパッと分からなかった
不完全なマルチパートアップロードを、ライフサイクルでなく、awscliでガッと消す方法を書く
マルチパートアップロードを一覧する
aws s3api list-multipart-uploads --bucket <bucket>
でマルチパートアップロード一覧を取れる
レスポンスは以下のような感じ
{
"Uploads": [
{
"UploadId": "<upload id>",
"Key": "<s3のオブジェクトキー>",
"Initiated": "",
"StorageClass": "",
"Owner": {},
"Initiator": {}
}
]
}
aws s3api list-multipart-uploads --bucket <bucket> | jq '.Uploads | length'
とかで不完全なマルチパートアップロード件数を確認できる
マルチパートアップロードを中止する(削除する)
aws s3api abort-multipart-uploads --bucket <bucket> --key <key> --upload-id <upload id>
でマルチパートアップロードを中止できる
https://docs.aws.amazon.com/cli/latest/reference/s3api/abort-multipart-upload.html
jqを使ってバケット一括でabort-multipart-uploadsする
aws s3api list-multipart-uploads --bucket ${BucketName} \
| jq -r '.Uploads[] | "\(.UploadId) \(.Key)"' \
| while read -r i k; do aws s3api abort-multipart-upload --bucket ${BucketName} --key $k --upload-id $i; done
ほんとはInitiatedの日付を見てちゃんと判定したりする必要もありそうだけど、そこは状況、要件に合わせて(というかちゃんとやりたければライフサイクルでやればいい)
自分は全部消していい状況だったので全部消した