案外と手間だったのでメモ。
前年にサービスを開始したGlacierを使ってみたかったというのもあり、データをせっせとGlacierへ投入しました。分量としては15GBほどデータを保存しました。
以来毎月20円ほどクレジットカードへ請求が来ていました。
しかしGlacierは通常のファイルシステム風のインタフェースを提供せず少々厄介な構造をしているので案外面倒です。
Vaultの中にアーカイブが残っている状態ではVaultの削除をおこなえない(エラーになる)ので、アーカイブIDをぽちぽちと指定して中身を削除する必要があります。
Glacierへファイルを格納した際には基本的にそこで発行されたアーカイブIDをメモっておくことになります。これをサボるとVaultの中に含まれるアーカイブを指定削除できずに詰むのでは?となりますが実際はなんとかなります。
ドキュメント: https://docs.aws.amazon.com/ja_jp/amazonglacier/latest/dev/vault-inventory.html
GlacierのAPIに対してインベントリの取り出し依頼を発行する→数時間待つ→インベントリへアクセスできるようになり、Vaultの中身(アーカイブ一覧)がわかる→アーカイブIDを指定してぽちぽちと削除する
という流れです。データ本体取り出しだけでなくインベントリ取り出しも数時間かかるあたりがポイントです。
これを手動でやるの面倒だなぁと思いますよね。そのためのコマンドを作った人が世の中に居ました。
READMEを参照しつつ同ディレクトリにcredentials.jsonというファイルを作成し、IAMのアクセスキーIDとシークレットキーを指定します。ここで指定するIAMにはあらかじめGlacierのReadWriteアクセス(AmazonGlacierFullAccess)を与えておいてください。
そのうえでコマンドを実行するだけです。たとえば対象が東京リージョン1にあり、Vault名がvault101だとすると
と実行します。
ここで指定するリージョン情報などはhttps://console.aws.amazon.com/glacier/homeでVault一覧を調べればわかります。
このコマンドを実行するとインベントリ取り出しジョブが作成され、インベントリの取り出しが完了するまで30分間隔で自動的に状況を見に行きます。
このスクリプトは微妙にPython 3をサポートしていなかったのでPull Requestを投げておきました(PR #12)。blogを書いているうちにマージされました。
TL;DR
- https://github.com/leeroybrun/glacier-vault-removeをcloneしてinstall
- credentials.jsonにIAM情報を書き込み
- python removeVault.py ap-northeast-1 vault101と実行して数時間待つ
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を書いているうちにマージされました。
0 件のコメント:
コメントを投稿