[小ネタ]削除保護有効化のリソースを一覧表示するAWSCLIコマンド(RDS、EC2編)

2020.01.27

はじめに

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

ここ最近、検証でCloudFormationを触ることが多いのですが、Cloudformationのテンプレートで設定した値が期待通りになっているかどうかのチェックって結構アナログでやると大変ですよね。「あれこれ確認したっけ?」「してないけっけ?」みたいな感じで作業効率がガタ落ちしたので今回はRDSとEC2に絞って削除保護を有効化しているリソースを一気に見る方法を紹介したいと思います。

事前準備

とは言ってもデフォルトでコマンドラインが用意されている訳では無いので、jqを駆使してやっていきます。

環境準備

  • jqコマンドが利用できること
  • AWS CLIが利用できること

    コマンド

    環境に応じて--profileオプションを付けるなど実施ください。

    RDS用(Aurora)

    aws rds describe-db-clusters | jq -r '.DBClusters[] | select(.DeletionProtection == true )' | jq -r '.DBClusterIdentifier'

    RDS用(Aurora以外)

    aws rds describe-db-instances | jq -r '.DBInstances[] | select(.DeletionProtection == true )' | jq -r '.DBInstanceIdentifier'

    EC2用

    EC2はRDSと違い削除保護の有効/無効を調べるためにインスタンスIDを引数にしなければならず、インスタンスIDの取得も含めてコマンドを並べているので長くなっていますo( _ _ )o

    aws ec2 describe-instances | jq -r  '.Reservations[].Instances[].InstanceId' | xargs -L 1 aws ec2 describe-instance-attribute --attribute disableApiTermination  --instance-id  | jq -r 'select(.DisableApiTermination.Value == true)' | jq -r '.InstanceId'

    やってみた

    RDS用(Aurora)

    実際にコマンドを叩いてみます。なおtrueの部分をfalseに変えると削除保護を無効化にしているリソースの一覧を取得できます。 下記のRDS用(Aurora以外)のコマンドと&&つないでも実行できます。

    aws rds describe-db-clusters | jq -r '.DBClusters[] | select(.DeletionProtection == true )' | jq -r '.DBClusterIdentifier'

    結果として削除保護を有効にしているリソースの名前が返ってきます。

    database-3

    RDS用(Aurora以外)

    実際にコマンドを叩いてみます。なおtrueの部分をfalseに変えると削除保護を無効化にしているリソースの一覧を取得できます。

    $ aws rds describe-db-instances | jq -r '.DBInstances[] | select(.DeletionProtection == true )' | jq -r '.DBInstanceIdentifier'

    結果として削除保護を有効にしているリソースの名前が返ってきます。

    database-1
    database-2

    EC2用

    実際にコマンドを叩いてみます。なおtrueの部分をfalseに変えると削除保護を無効化にしているリソースの一覧を取得できます。

    $ aws ec2 describe-instances | jq -r  '.Reservations[].Instances[].InstanceId' | xargs -L 1 aws ec2 describe-instance-attribute --attribute disableApiTermination  --instance-id  | jq -r 'select(.DisableApiTermination.Value == true)' | jq -r '.InstanceId'

    結果として削除保護を有効にしているインスタンスのIDが返ってきます。

    i-07160e3xxxxxxxxxx
    i-0577971xxxxxxxxxx
    i-0d22bbdxxxxxxxxxx

    EC2の場合はNameタグで名前を引っ張ってくることも出来るのですが同じ名前のリソースがあるかもしれないので、インスタンスIDを取得するようにしています。

    おまけ

    そのままCLI上でリソースの削除保護を無効化させる場合は下記のコマンドを実行します。

    RDS用(Aurora)

    Auroraの「database-3」というデータベースの削除保護を無効にしています。

    aws rds modify-db-cluster --db-cluster-identifier database-3 --no-deletion-protection

    RDS用(Aurora以外)

    MySQLの「database-1」というデータベースの削除保護を無効にしています。

    aws rds modify-db-instance --db-instance-identifier database-1 --no-deletion-protection

    EC2用

    EC2の「i-07160e3xxxxxxxxxx」というインスタンスIDを持つリソースの削除保護を無効にしています。

    aws ec2 modify-instance-attribute --instance-id i-07160e3xxxxxxxxxx --no-disable-api-termination

    まとめ

    CLIを駆使することでちょっとでも作業効率が上がればと思いご紹介させて頂きました!

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