0
0

AWS S3 Glacierにある大量のアーカイブを全部消す

Posted at

はじめに

そもそもそんな操作をする事は無いのでしょう。
単純なワンライナーですが長いのでメモ。

いきさつ

Synology製NASにはGlacier BackupというNASのディレクトリをS3 Glacierにバックアップするアプリがあります。
自宅NASのバックアップ動作確認で不要になったボールトを削除する事になり、本来であればNAS側からボールト削除操作を実行するべきだったのですが・・・
パソコン初心者なので、誤ってAWS側のアクセスキーを先に削除してしまいました。(本当は深夜飲酒中にシステム操作したせいです。)
別のアクセスキーを再登録してもNAS側操作はエラーとなり、仕方なくCLIから操作する事にしました。
しかし、ボールトを削除するためには格納されているアーカイブを全削除しなければならず、アーカイブの総数は10000件以上もあったのです。リファレンスのように手動ではやってられません。

結論

  • 生成したアーカイブリストJSONファイルのArchiveIdを抽出し、delete-archiveコマンドに渡す

どうする

こちらの記事にある通り、アーカイブリスト取得まで進めます。
「何をするにも時間がかかる」という知見は同記事から頭にいれておきます。
アーカイブリストの結果ファイルは本文もoutput.jsonとしています。

JSONにあるアーカイブを消す

jq '.ArchiveList[].ArchiveId' output.json | xargs -I {} aws glacier delete-archive --account-id [アカウントID] --vault-name [ボールト名] --archive-id="{}"

シェルからjqコマンドが使えました。
これでArchiveIDキーの値だけを取り出し、xargsコマンドで引数のアーカイブIDに該当する部分をjqの出力で置換するだけです。
これでArchiveIdキー毎にdelete-archiveコマンドが実行されます。
エラーが無ければ標準出力はありません。
対象アーカイブが多すぎると待ち時間で接続がタイムアウトする可能性があるので、その場合はnohupのバックグラウンド実行も併用しておきましょう。

終わりに

酒飲んでシステムを触るのはやめようね。。。

参考

AWS公式リファレンス: Delete an Archive in S3 Glacier by Using the AWS CLI

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0