てくなべ (tekunabe)

ansible / network automation / 学習メモ

[AWS] アタッチされていない EBS ボリューム一覧を AWS CLI で表示する

EC2 インスタンス削除時に、自動でEBS ボリュームも削除されるつもりだったのにうっかり残っていた、という経験はありますでしょうか。

このようなとき、アタッチされていない EBS ボリュームの一覧を取得したいときがあるかもしれません(ありました)。

AWS CLI で調べるときのコマンドを控えておきます。

ボリュームの状態が available が「ボリュームはインスタンスにアタッチされていません」とのことなので、--filters オプションで statusavailable なものに絞った上で、 --query オプションで表示項目を調整することにします。

Name タグの値だけ表示したい場合

$ aws ec2 describe-volumes --filters Name=status,Values=available --query 'Volumes[*].Tags[?key==Name].Value[]'
[
    "ugui",
    "oikawa",
    "ginbuna",
    "kinbuna",
    "tanago"
]

ボリュームIDとセットで表示したい場合(キー付き)

$ aws ec2 describe-volumes --filters Name=status,Values=available --query 'Volumes[].{VolumeId: VolumeId, Name: Tags[?key==Name].Value | [0]}'
[
    {
        "VolumeId": "vol-086009cxxxxxxxxxx",
        "Name": "ugui"
    },
    {
        "VolumeId": "vol-01183daxxxxxxxxxx",
        "Name": "oikawa"
    },
    {
        "VolumeId": "vol-0794be4xxxxxxxxxx",
        "Name": "kinbuna"
    },
    {
        "VolumeId": "vol-0a9efabxxxxxxxxxx",
        "Name": "tanago"
    }
]

JMESPath 苦手なので、もう少し良い書き方があるかもしれません。

参考