[小ネタ]特定のバックアップVaultの復旧ポイントを一括で削除するCLI

2020.03.10

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

こんにちは。大阪オフィスの林です。

AWS BakcupのバックアップVaultに保存された復旧ポイントの削除がマネージメントコンソールからだと少々手間だったのでCLIからの操作方法(一括削除方法)を紹介したいと思います。

なにが手間か?

はじめにどの辺りが手間と感じたのか、マネージメントコンソールでバックアップボールトを削除するオペレーションを紹介したいと思います。

AWS Backupのダッシュボードからバックアップボールトを選択し、対象のバックアップボールトを選択します。

右上に「削除」とあるので選択してみます。

確認を求められるので、対象のバックアップボールト名を入力し、「バックアップボールトを削除」を選択します。

『復旧ポイントがあるのでバックアップボールトを削除できません。』と怒られます。

復旧ポイントを削除しようとするのですが、ラジオボタンになっていて1個1個消す必要があり、数が多いと骨が折れます。一括で削除してくれそうなボタンもありません。_| ̄|○ ガックリ

上記が手間と感じたオペレーションです。AWS Backupはバックアップしたデータのストレージサイズに応じてコストがかかります。そのため不要なバックアップデータは速やかに削除したいですよね。ということでさっそくCLIでの操作を紹介します。

事前準備

  • jqコマンド(本検証ではver1.5を使用)が利用できること
  • AWS CLI(本検証ではver2.0.1を使用)が利用できること
  • コマンドの紹介

    aws cliのbackupコマンドを使って、復旧ポイントを一括で削除します。標準で一括削除するようなコマンドが用意されている訳では無いのでjqコマンドを使いながら操作していきます。なお、実際に動かす際は、バックアップボールト名を実際の環境に合わせて変更ください。例示のコマンドのtest-vaultの部分がバックアップボールト名を記載する部分となります。

    aws backup list-backup-jobs | jq -r '.BackupJobs[] | select(.BackupVaultName == "test-vault" )' | jq -r '.RecoveryPointArn' | xargs -L 1 aws backup delete-recovery-point --backup-vault-name test-vault --recovery-point-arn

    バックアップボールトそのものを削除するコマンド(delete-backup-vault)も用意されているのですが、現状forceオプションのような強制削除するものも用意されていないので、CLIからでも復旧ポイントの削除 → バックアップボールトの削除という順で掃除する必要があります。

    やってみた

    ひとまずdeleteコマンドを実行しない状態でバックアップボールトに紐づく復旧ポイントを確認してみます。今回の場合test-vaultというバックアップボールトに紐づく復旧ポイントが19個あることが分かります。

    [ec2-user@ip-172-16-0-92 ~]$ aws backup list-backup-jobs | jq -r '.BackupJobs[] | select(.BackupVaultName == "test-vault" )' | jq -r '.RecoveryPointArn'
    arn:aws:ec2:ap-northeast-1::image/ami-08eff1fffd9c42361
    arn:aws:ec2:ap-northeast-1::image/ami-0fa1ae3210cd7b852
    arn:aws:ec2:ap-northeast-1::image/ami-06d18eea160faa93f
    arn:aws:ec2:ap-northeast-1::image/ami-039d15e9e825dd420
    arn:aws:ec2:ap-northeast-1::image/ami-0c7a6a473a815d797
    arn:aws:ec2:ap-northeast-1::image/ami-087d857f3440f0629
    arn:aws:ec2:ap-northeast-1::image/ami-075844adcd57005d1
    arn:aws:ec2:ap-northeast-1::image/ami-0afc069b24576dddb
    arn:aws:ec2:ap-northeast-1::image/ami-0498b0524c7e0d73b
    arn:aws:ec2:ap-northeast-1::image/ami-0b295fac7469d2e17
    arn:aws:ec2:ap-northeast-1::image/ami-036c2bf513fc3a5bd
    arn:aws:ec2:ap-northeast-1::image/ami-0dc8bea65b9661b62
    arn:aws:ec2:ap-northeast-1::image/ami-0f90503b5beee7b75
    arn:aws:ec2:ap-northeast-1::image/ami-04b0126ebf1f756fc
    arn:aws:ec2:ap-northeast-1::image/ami-01e0179cf2c9f1c9f
    arn:aws:ec2:ap-northeast-1::image/ami-038ef303146d92166
    arn:aws:ec2:ap-northeast-1::image/ami-086e29ba33e9e6dec
    arn:aws:ec2:ap-northeast-1::image/ami-03175347ed58836a7
    arn:aws:ec2:ap-northeast-1::image/ami-07ade61b15a7c0a18

    それでは実際にdeleteコマンド付きで実行してみます。特に戻り値はありません。

    aws backup list-backup-jobs | jq -r '.BackupJobs[] | select(.BackupVaultName == "test-vault" )' | jq -r '.RecoveryPointArn' | xargs -L 1 aws backup delete-recovery-point --backup-vault-name test-vault --recovery-point-arn

    マネージメントコンソールからも確認してみると復旧ポイントが全て消えていることが分かります。

    バックアップボールト名を削除します。

    確認を求められるので、対象のバックアップボールト名を入力し「バックアップボールトを削除」を選択します。

    無事にバックアップボールトが削除できました。

    まとめ

    かゆいところに手が届きやすいのがCLIでの操作を思っています。手間と感じたマネージメントコンソールでの作業は、ぜひCLIでの作業も検討してみましょう!

    以上、大阪オフィスの林がお送りしました!

    参考

    コマンドリファレンス