Amazon GlacierのVaultを削除する手順

2015年11月3日火曜日

案外と手間だったのでメモ。
図1 Glacierのコンソール

TL;DR

Glacierの利用経緯

AWSばかり使っていた2013年の春、「たまに使うアプリのインストーラやドライバCDのデータをどこか安価なストレージへ保持したい」と考えました。手元でDropboxの挙動が怪しく、また数十GBのデータを保持するのはあまり金額的に嬉しくなかったためです。
前年にサービスを開始したGlacierを使ってみたかったというのもあり、データをせっせとGlacierへ投入しました。分量としては15GBほどデータを保存しました。
以来毎月20円ほどクレジットカードへ請求が来ていました。

消そう

データ投入から2年以上経った2015年11月、これまで一切データ取り出しをおこなっていないと気づきました。調べてみるとデータの削除は無料(ただし格納から90日以内の削除は0.021USD/GB)ということで、消してみようと思いました。
しかしGlacierは通常のファイルシステム風のインタフェースを提供せず少々厄介な構造をしているので案外面倒です。

Vaultの中身がわからない…

Glacierの管理単位はVault と呼ばれます。この中に含まれる各ファイルはアーカイブ と呼ばれます。
Vaultの中にアーカイブが残っている状態ではVaultの削除をおこなえない(エラーになる)ので、アーカイブIDをぽちぽちと指定して中身を削除する必要があります。
Glacierへファイルを格納した際には基本的にそこで発行されたアーカイブIDをメモっておくことになります。これをサボるとVaultの中に含まれるアーカイブを指定削除できずに詰むのでは?となりますが実際はなんとかなります。

Vaultのインベントリ

GlacierはVaultの中身に関する情報をまとめたインベントリ というデータセットを自動作成します。
ドキュメント: https://docs.aws.amazon.com/ja_jp/amazonglacier/latest/dev/vault-inventory.html
GlacierのAPIに対してインベントリの取り出し依頼を発行する→数時間待つ→インベントリへアクセスできるようになり、Vaultの中身(アーカイブ一覧)がわかる→アーカイブIDを指定してぽちぽちと削除する
という流れです。データ本体取り出しだけでなくインベントリ取り出しも数時間かかるあたりがポイントです。
これを手動でやるの面倒だなぁと思いますよね。そのためのコマンドを作った人が世の中に居ました。

glacier-vault-removeコマンドでの削除

まずhttps://github.com/leeroybrun/glacier-vault-removeをcloneしてpython setup.py installでインストールします。わざわざシステム全体へインストールするのが嫌という場合、依存パッケージであるbotoさえPyPIから拾ってくればインストール無しで動くと思います。
READMEを参照しつつ同ディレクトリにcredentials.jsonというファイルを作成し、IAMのアクセスキーIDとシークレットキーを指定します。ここで指定するIAMにはあらかじめGlacierのReadWriteアクセス(AmazonGlacierFullAccess)を与えておいてください。
そのうえでコマンドを実行するだけです。たとえば対象が東京リージョン1にあり、Vault名がvault101だとすると
$ python removeVault.py ap-northeast-1 vault101
と実行します。
ここで指定するリージョン情報などはhttps://console.aws.amazon.com/glacier/homeでVault一覧を調べればわかります。
このコマンドを実行するとインベントリ取り出しジョブが作成され、インベントリの取り出しが完了するまで30分間隔で自動的に状況を見に行きます。
このスクリプトは微妙にPython 3をサポートしていなかったのでPull Requestを投げておきました(PR #12)。blogを書いているうちにマージされました。

まとめ

GlacierはVaultを削除するために空っぽにするのが少々面倒で、時間も数時間はかかるので簡便さの面ではS3の圧勝(使いみちがハマればよさそう)。

0 件のコメント:

コメントを投稿