KuriKumaChan’s diary

Kuri ちゃんと Kuma ちゃんの飼い主の独り言

QNAP と クラウドバックアップ (8) - 旧 Glacier の Vault が削除できない!- 最後は msp360 の CloudBerry Explorer !

前回までに QuDedup で思わぬ回り道をしてしまいましたが、前に進むことにします。今回はバックアップが期待するように実行されたバックアップジョブのスケジュール設定と、Glacier Deep Archive にバックアップできたので不要となった旧 Glacier の古いバックアップの vault (貯蔵庫) の削除です。特に Vault の削除は遅れれば遅れるだけコストがかかりますのでさっさと片付けてしまいたいところです。


1. バックアップジョブをスケジュールしてみる

以前の NAS (TS-431p)を使っていた頃は、クラウドバックアップは旧 Glacier にしていましたが、当時のフレッツ光が超絶遅いため初回バックアップに1週間かかったこともあり、気軽にバックアップし難いと考えていました(頻繁にバックアップすればさほどバックアップジョブに時間は取られないはずですが、フレッツ光遅し憎しでその気になれなかったと言うのが正直なところでしょうか)。
今となっては、ストレージコストもより安くなり回線は信頼の Nuro なので定期的なバックアップ(差分)に何の不安もありませんのでジョブにスケジュール設定してみます。

まずは HBS3 で設定

HBS3 でジョブのスケジュールを設定するのは簡単です。私は前回単発実行で作成したジョブを編集して自動実行のスケジュールを設定してみました。

ジョブ実行スケジュールを設定してみた。

スケジュールの実行結果

実は上の図のスケジュール設定は実行されませんでした。図のように必要な項目をポチポチっとやるだけなのですが、ここで「保存」ボタンを押し忘れていてスケジュール設定が保存されていませんでした。
で気を取り直して翌日に再設定してその後ちゃんと実行されていることを確認できました。

バケット内の HBS3 管理ファイルは毎回総入れ替え?

今回は差分バックアップがちゃんと行われるかどうかの確認しようと、事前にテスト用のディレクトリにテスト用ファイルを一つ作成しておきました。実行結果を確認するとちゃんとフィルサイズ 3MB のファイルがバックアップされていることが確認できました。ただ‥
3MB のファイル一つバックアップするのに転送データは 20倍以上の 68MB!

バックアップ元にあったデータ以外のファイルがバケット内にある

バケット内を確認すると自分のバックアップ元にはない "QNAP.....db" と "QNAP....info" と言うファイルが存在しています。どうやら HBS3 用の管理ファイルのようです。実際のバックアップファイル以外にもこれらのファイルも総入れ替えされているようでその容量が S3 Glacier の容量に含まれているのではないかと思います。

と言うことで、少量の更新データのバックアップに毎回同じオーバヘッドがかかってもつまらないので、当面今のスケジュールはそのまま週一回の差分バックアップで様子を見ようかと思います。

2. 旧 Glacier の不要となった Vault を削除してコストを削減する

新しい Glacier Deep Archive に(2つも)バックアップが取れたことを確認したので、旧 Glacier に残っているバックアップをさっさと削除してコスト削減したいところです。

AWS コンソールから削除できない!

AWS コンソール(ブラウザ操作)で Glacier に残っている Vault を確認し。一番上の Vault (クリッピングした CD などの iTunes ライブラリのバックアップ)を残して他の Vault を削除しようと思います。

毎月 $7 払っている Glacier の Vault

ところが Vault を選択して「ボールとの削除」ボタンを押してもエラーが発生します!

当然 AWS コンソール(ブラウザ)で削除できると考えていたのですが、ところがサイズが "--" になっているものは簡単に削除できたのですが、サイズに数字があるもの(つまり何かしらのバックアップデータが残っているもの)はコンソール上で削除しようとしてもエラーとなって削除できませんでした。

毎月コストが発生しているものだけが削除できないとは何とも言えない状況なのですが、調べてみると、

  • Vault の中にアーカイブと呼ばれるデータが残っていると Vault は削除できないので、先にアーカイブを削除しなければならない。

  • どのくらいアーカイブがあるのかは AWS コンソールから確認できる(山ほどの個数があった)。

  • アーカイブの削除は AWS コンソール(ブラウザ操作)から行うことはできず、CLI (コマンド・ライン・インターフェース)か API で実行する。

と言う衝撃的な事実が発覚しました。もちろんアマゾンが隠していたわけではなく、私がデータを放り込むことしか考えずに使っていただけなのですが、ショックでした😭

dev.classmethod.jp

AWS CLI でアーカイブを削除する

このアマゾンの説明を参考にアーカイブの削除をしてみました。 docs.aws.amazon.com

一言で CLI を説明すると、Mac のターミナル(Windows のコマンドプロンプト)から "ls" (dir) といったコマンドを入力するのと同じように "aws s3 ..." か "aws glacier ..." とコマンドを入力して結果を得るものです。"aws" コマンドを使えるようにするには AWS CLI を導入する必要があります。

AWS CLI のセットアップ

AWS CLI は昔々 Windows PC で軽く使っただけで、今の Macbook Pro では AWS CLI を使ったことがなかったので新規導入しました。導入ガイドは本家アマゾンのもの以外も色々あるのでネットで検索してみてください。人にパッケージマネジャーを使っていればそれにあった導入手順も紹介されています。
私は homebrew で導入してみましたが、CLI 導入の過程で Python 3.9 が無いからビルドできない、なんてエラーが出たりして少し手間取ってしまいました。もしどうしてもこういった導入が敷居が高すぎる、ということであれば、この後紹介する msp360 CloudBerry Explorer を試してみるのも手かと思います。

% aws --version
aws-cli/2.2.0 Python/3.9.4 Darwin/20.3.0 source/x86_64 prompt/off

CLI を使って手作業で削除できたけれども

さて、CLI 環境が導入できてしまえばコマンド入力はすぐできます。が、単純に「即削除」はできず手順を踏んでしかもある程度時間をかけなければならないことがわかりました。(時間さえかければ作業は単純)
手続きは以下の通りです。(「パラメーター」は "aws glacier" に続くもの)

  項目 手段 CLI のパラメータ 入力項目 出力項目
Vault の確認 コンソール - - Vault名
インベントリー作成ジョブの開始 CLI initiate-job Vault名, job-parameters '{"Type": "inventory-retrieval"}' jobId
ジョブステータスの確認※1 CLI describe-job Vault名, jobid StatusCode
インベントリーの取得※2 CLI get-job-output Vault名, jobid, 結果用ファイル名 (結果は指定のファイルへ)
アーカイブの削除 CLI delete-archive Vault名, jobid, archive-id
Vaultの削除 コンソール

※上記の入力項目以外に "account id" が必要です。
※1 これはジョブが完了するまで繰り返し実行し、StatusCode が "Succeeded" になることを確認します。完了までに数時間(6時間くらい?)かかりました。
※2 入力で指定したファイル名に、インベントリー情報がダウンロードされます。その中にある山盛りの "archive-id" 一つ一つが削除すべきアーカイブです!

この辺りは下記二つの記事を参考にさせていただきました。

Amazon GlacierのVaultを削除する手順 - muo-notes

Amazon Glacierの一通りの流れ - Qiita

インベントリーの取得で、残存しているアーカイブの情報が指定したファイルにダウンロードされるので、その中から "archive-id" を探して "aws glacier delete-archive ...--archive-id archiveid " と入力すればアーカイブが一つだけ削除できます
しかーし!不要な vault には消さなければならないアーカイブが 278,152個もある!

AWS コンソールで Vault に残っているアーカイブの数は確認できる。

と言うことで、アーカイブを一つ一つ削除するコマンドの手動投入は諦めざるを得なくなりました。

スクリプトにしてバッチ処理もできたけれども

と言うことでバッチ処理にしてみました。 インベントリーの出力ファイルは json だったので、そこから archive-id だけを278,152個取り出してコマンドをシェルスクリプトにして実行しました。
が、コマンド一つがおおよそ 1秒かかります。ですので、約 28万秒 = 3日以上かかることが一晩放置してから分かりました(何という計画性のなさ‥)。そのまま放置しようかとも思ったのですが、Mac で初めて karnel_task が暴走してバッテリー残が 5%と瀕死の状況(純正 AC アダプターではなくディスプレィから USB PD で普段利用しているのですが、ワットが足りない)。

結局

と言うことで、CLI でアーカイブを削除できることは検証できたのですが、とても全量を削除するのはバッチ処理でも追いつかないので別の方法を試してみることにしました。

msp360 CloudBerry Explorer を試してみる

これからご紹介する方法は Mac 版もあるようですが、私がなぜか Windows 版しかないと誤解して Windows 版で試してみましたが、ちゃんとアーカイブの削除まで行えることを確認しました。

これはたまたまネットで見つけたのですが、各種バックアップソリューションを提供している MSP360 (以前は CloudBerry Lab) と言う会社とその CloudBerry Explorer と言うソフトが活躍してくれました。 www.msp360.com

もちろん有料ソフトなのですが、15日の無料トライアルがあったので何とか2,3日で決着をつけようと頑張りました(ちなみに買うとしたら $59.99)。私のように旧 Glacier と決別しようとして最後のあがきで操作しなければならない人は(ビジネスの邪魔をするわけではありませんが)free trial で問題ないと思いますが、旧 Glacier と今後もお付き合いする方は購入を検討した方が楽になれるかもしれません。具体的な操作は下記リンク先を参照いただければ雰囲気わかると思います。

kb.msp360.com

基本 Windows のエクスプローラーで Glacier の Vault やアーカイブをドリルダウンできるイメージです。なの直感的に分かりやすいと言えば分かりやすいです。少なくとも CLI パッケージの導入はしなくて良く、単なるソフトの導入を行うだけですし。 ただし、CLI でやるにしても CloudBerry Explorer で操作するにしてもサーバー側処理は変わらないので、例えば「インベントリー作成ジョブの開始」つまり CLI では initiate-job に相当する "get inventry" メニューはあって、その結果が反映されるにはやはり何時間もかかります。
あと私が戸惑ったのは、278,152個のアーカイブリストの全体を選択して delete する操作で若干不安になりました。リストの先頭をクリックしてリストの最後に移動してリストの最後をクリックして全体を選択、と言う操作自体が「本当に全てを選択できているの?」と言うのが確認できず不安でした。それが ok だったと確認できたのは、CLI のバッチ処理で 10万個くらいしか削除できていなかったはずなのにコンソールで確認したらアーカイブの数が "__" となっていて vault も削除できたので CloudBerry Explorer が正しく機能してくれたと確認できました。

ようやくアーカイブを削除することができた

そして Vault もコンソールから削除できた!


と言うことで、3日間 CloudBerry Explorer を使わせてもらって旧 Glacier を全て削除することができました。やれやれ。