Deleting Amazon Glacier vaultsEdit
Amazon Glacier vaults are notoriously hard to delete, because they can’t be deleted until empty, getting a list of their contents is a multi-hour operation, and they can grow to be immensely large, requiring a lot of time to actually delete the contained archives.
For this purpose, I use the mt-aws-glacier
tool.
Installing the tool
This is how I installed the tool on my OS X Mavericks box:
$ sudo cpan -i JSON::XS
$ sudo cpan -i Bundle::LWP # this is the p5-libwww-perl mentioned in the README
$ sudo cpan -i App::MtAws
Remember to recoil in horror as you realize that this pollutes /usr/local/bin
(which Homebrew prefers to keep all to itself).
Prepare your credentials
$ cat > glacier.cfg <<HEREDOC
key=YOURKEY
secret=YOURSECRET
region=us-east-1
protocol=http
HEREDOC
Prepare a list of vaults to be deleted
$ VAULTS="somevault
someothervault
yetanothervault
onemorevault"
Request a list of archives in each vault
$ echo $VAULTS | while read VAULT; do
echo "'$VAULT'"
mtglacier retrieve-inventory --config glacier.cfg --vault $VAULT
done
Download the inventory
$ cat > glacier.cfg <<HEREDOC
key=YOURKEY
secret=YOURSECRET
region=us-east-1
protocol=http
HEREDOC
$ VAULTS="somevault
someothervault
yetanothervault
onemorevault"
Request a list of archives in each vault
$ echo $VAULTS | while read VAULT; do
echo "'$VAULT'"
mtglacier retrieve-inventory --config glacier.cfg --vault $VAULT
done
Download the inventory
$ echo $VAULTS | while read VAULT; do
echo "'$VAULT'"
mtglacier retrieve-inventory --config glacier.cfg --vault $VAULT
done
After 4 or 5 hours, you should be able to download the requested inventories:
$ echo $VAULTS | while read VAULT; do
echo "'$VAULT'"
mtglacier download-inventory --config glacier.cfg --vault $VAULT --new-journal $VAULT-journal.log
done
Note: If you have to retry this step at any point remember to delete your *-journal.log
files; mtglacier
will complain if you don’t.
Delete the archives from the vaults
$ echo $VAULTS | while read VAULT; do
echo "'$VAULT'"
mtglacier purge-vault --config glacier.cfg --vault $VAULT --journal $VAULT-journal.log
done
Delete the vaults
$ echo $VAULTS | while read VAULT; do
echo "'$VAULT'"
mtglacier purge-vault --config glacier.cfg --vault $VAULT --journal $VAULT-journal.log
done
Supposedly you might have to wait 24-48 hours before doing this, but I suspect it may work immediately:
$ echo $VAULTS | while read VAULT; do
echo "'$VAULT'"
mtglacier delete-vault $VAULT --config glacier.cfg
done
Cleaning up after yourself
$ rm glacier.cfg *-journal.log
General observations
$ rm glacier.cfg *-journal.log
In my case I had about 700k archives and 8 vaults to delete, and it took about 3 days in all. I had to restart the operation two or three times, re-requesting the inventories (and waiting hours before they were ready) each time.