AWSのタグ情報は運用管理や料金管理につながる部分となるため。
通常運用では仕組みから付与されたり、手動でタグ登録する際はルールに従ってタグ登録がされているかと思います。
ここではイレギュラーケースが発生したときを想定し
- タグ情報が何もついていないSnapshot
- 特定のタグがついていないSnapshot
- 特定のタグの組み合わせがついていないSnapshot
をaws-cli
で一覧に出力する方法を説明します。
参考ドキュメント
AWS CLI を使用して、指定されたキータグの有無にかかわらず、Amazon EBS スナップショットをすべてリストするにはどうすればよいですか?
タグ情報がなにもついていないSnapshotの一覧を取得
○○のタグ情報がついているといった検索をする場合は、--filter
オプションを使ってフィルタをできますが。
今回はタグがついて いない ものを探す必要があるため
`--filter`オプションではなく`query`オプションで全件取得したあとに`query`していきます。
# タグ登録がないSnapshotの情報を出力
aws ec2 describe-snapshots --owner self --query 'Snapshots[?!not_null(Tags)]'
上記の様にSnapshots
構造を!not_null(tags)
で検索して、タグ登録がないSnapshot一覧を出力しています。
describe-snapshots
ではタグ登録がない場合は、Tags
自体がなくなるため。
not_null(Tags)
で、タグが登録されていると真となり、それを!(反転)
でなにもタグ登録がない場合に真となる検索条件となります。
実行サンプル
下記のようなSnapshotがある状態で実行すると
タグが登録されていない、説明がqiita-tags001
となっているスナップショットの情報が取得できます。
特定のタグが登録されていないSnapshotの一覧を取得
ここではName
が登録されていないsnapshotを検索してみます。
# Nameタグが登録されていないSnapshotの情報を出力
aws ec2 describe-snapshots --owner-ids self --query 'Snapshots[?!(Tags[?Key == `Name`])]'
?Tags[?Key == `Name`]
でNameタグが登録されていれば真となる条件となり、これを!(反転)
して?!(Tags[?Key == `Name`])
はNameタグが登録されてなければ真となります。
実行サンプル
下記のようなSnapshotがある状態で実行すると
Nameタグが登録されていない、説明qiita-tags001
とqiita-tags003
のスナップショットが取得できます。
特定のタグの組み合わせが登録されていないSnapshotの一覧を取得
ここではName
タグとsample
タグが登録されていない一覧を検索してみます
# Nameタグが登録されていないSnapshotの情報を出力
aws ec2 describe-snapshots --owner-ids self --query 'Snapshots[?!(Tags[?Key == `Name`] && Tags[?Key == `sample`])]'
?Tags[?Key == `Name`] && Tags[?Key == `sample`]
でNameタグとsampleタグをもつ場合に真となる条件となり、これを!(反転)
して?!(Tags[?Key == `Name`] && Tags[?Key == `sample`])
はNameタグとsampleタグがない場合は真となります。
実行サンプル
下記のようなSnapshotがある状態で実行すると
Nameタグとsampleタグがあわせて登録されていない説明qiita-tags001
,qiita-tags002
,qiita-tags003
が取得できました。
総評
filter
オプションを利用せずにquery
で全件チェックをしているため。
Snapshotが大量にある環境では時間がかかるかと思いますが、特定のタグが登録されていないといった切り口で情報を一覧で出力できるのは便利です。