Contents management tool for AWS Glacier
AWS Glacierは安価で企業向けのためにクラウドストレージ難民になりにくい点では良いのですが、いかんせん癖が強いサービスです。 AWSコンソールからも一応Glacierへの保存ができますが、こちらもログ保全などが主目的のためクラウドストレージとして使うにはインタフェースが貧弱です。
GlamanはAWS Glacierを個人の安価なクラウドストレージとして使うためのシンプルなコマンドラインツールです。
向いてるケース:
- 子供の成長ビデオなど、「ごくたまにしか見ない」けど「絶対に無くしたくない」「大きめのファイル」を「なるべく安く」保持したい
- ファイルがローカルのディスクを圧迫してるのでどこかに預けて消したい
Glacierはデータダウンロードにコストがかかるのであくまで一例ですが、放置状態だとus-east-1で約1.3Tで月$5.22の請求です。 1$=110円として570円/月ぐらい。2年で13,680-。判断は様々でしょうがNASでRAID1組むぐらいならいい数字だと思います。NASも飛ぶときには飛びますから。まあ、データセンターも飛ぶときには飛ぶでしょうが。
ただしGlacierに限らずGCPのColdline等この手の低頻度ストレージはアクセスしたり、すぐに消したりすると高めにつく場合が多いのでご自身できちんと計算して判断してください。
向いてないケース:
- よく更新するファイルを保持したい → おとなしくDropbox系を使いましょう。Glacierには向いてません。
- 複数ユーザや複数デバイスで共有したいファイルを保持したい → 同上
- 写真→ AmazonとかGoogle でいいんじゃね?写真なら容量無制限のとこ多いですし。
- 子供の成長ビデオを見たいと思ったら4時間も待てない :-) → GCPのColdlineなら$0.007/GBなので良いかもしれません。が、対応してません。
なお現状macOS用CUIのみです。
- 事前にaws-cliなどで、~/.aws以下にcredentialsとconfigを用意しておいてください。
- Glacier側にvaultを作っておいてください。
- bin/glaman をどこか適当なところにダウンロードしてください。
- $./glaman newdb ~/Documents/glaman.sqlite3 を実行してDBを初期化します。
各種設定、ファイル情報を保持するために最初に初期化を行います。
$ ./glaman newdb ~/Documents/glaman.sqlite3 --region=us-west-2 --vault=sdb --basedir=/Users/rami1942/Documents/glaman/ --password=test
- --region AWSのリージョンを指定します。東京リージョンでも構いませんが微妙に高いのでus-east-1やus-west-2あたりもおすすめす。
- --vault Glacierのvaultを指定します。
- --basedir 同期対象とするローカルのディレクトリを指定します。
- --password 暗号化で使うパスワードを指定します。
パスワードはアップロード/ダウンロード時の暗号化に使用しますが自動で使用されますので意識することはありません。気合い入れたもので大丈夫です。
ローカルのディレクトリにファイルを置いて、 glaman sync -r を実行してください。-rをつけない場合にはチェックのみ行います。 一度同期が完了すれば、ローカルのファイルは消してしまって大丈夫ですが、後述のglaman cleanで安全に削除できます。
なお、アップロード時にはAES256で暗号化された状態でGlacierにデータが送られます。鍵情報はAWSには一切送りませんので AES256が突破されない限りアップロードしたコンテンツは安全です。
通常ローカルディスク << Glacierだと思いますので、すぐに使わないファイルはローカルから消してGlacier側にだけ保持することが できます。
- glaman ls で取得したいファイルのidを特定します。
- glaman unlock でファイルをアンロックします。
- glaman clean を実行します。
glaman clean を実行すると、同期が完了していてロックされていないファイル(だけ)が削除されます。 ディスクがすっきり。 Glacierにアップロードが完了していないファイルは当然削除されませんので手で消すより安全です。
ファイルをダウンロードするには、以下の手順を踏みます。
- glaman ls で取得したいファイルのidを特定します。
- glaman lock でファイルをロックします。
- glaman sync -r で同期を取ります。
ご存知の通り、Glacierではファイルのダウンロードの要求を出してから4,5時間後に取得ができるようになります。 この時点ではglamanはGlacierにダウンロード要求を出しますので、4,5時間後に再度sync -r します。 Glacier側で取得可能となっていれば実際のダウンロード要求を出します。
ジョブの状況はglaman jobstatusで確認できます。
glaman.sqlite3は決して無くさないでください。ここだけはDropboxでもなんでもいいのでバックアップ必須です。
glaman.sqlite3には以下の情報を保持しています。想像つくと思いますがなくすと復元は不可能です。
- Glacierのarchive IDとファイルの対応付け
- 各ファイルの暗号化鍵
-
GUI 同期状況だけツリーで確認するGUIが手元にあるのですが、一般で使えるように整備する前に満足してしまったので公開するかは未定です。
-
Windows Goなのでコンパイルすれば動く気がする。今や特定用途でしか使ってないのでモチベーションが起きないのです..