CloudWatch Alarm
は登録したアラームにタグをつける事ができます。
タグ付けできるので、aws-cli
でアラーム一覧を取得してタグでフィルタすることも簡単にできるかと思いきや……
なんとaws-cliのaws cloudwatch describe-alarms
ではCloudWatch Alarm
の一覧は取得できますが、ここにタグ情報はふくまれてない事に気が付きました。
この事に気がつく前は、aws ec2 describe-instances
のように、一覧とタグ情報が一度に引けて簡単にフィルタ処理できるかと考えていましたが、Cloud Watch Alarm
だとそうはできなかったので本記事で紹介します。
ドキュメント
aws cloudwatch describe-alarms にはタグ情報がない!
2023年7月現在コマンドのドキュメントを確認すると、最初に気が付きますがアラームの一覧を取得できるdescribe-alarms
のoutput
にTags
がありません。
当然のようにタグ情報を取得できると考えてしまいますが、これがないのはCloudWatch Alarm
自体へのタグ付けが最初からサポートされていたわけではなかった歴的な背景がありそうです。
Amazon CloudWatch アラームにリソースレベルポリシーを使用できるようになりました
でもタグフィルタしたい
そもそもCloudWatch Alarm
のタグ情報はdescribe-alarms
では取得できず、list-tags-for-resource
で取得できます。
ただし、list-tags-for-resource
は必須引数として--resource-arn
を指定する形となり、アラーム一覧をタグでフィルタしたいといった用途に使うためには。
describe-alarms
でCloudWatch Alarm
の一覧を取得し、それをベースに一アラームずつlist-tags-for-resource
でタグ情報を取得する必要があります。
この方式だと、CloudWatch Alarm
の登録された個数回、list-tags-for-resource
を実行する必要があり残念な感じです。
resourcegroupstaggingapiからせめてみる
aws-cli
ではタグを取り扱う、resourcegroupstaggingapi
もあるのでこちらからせめてみます。
aws resourcegroupstaggingapi get-resources
でAWSリソースのタグを取得できます。
このコマンドのオプションにresource-type-filters
があり、このオプションでサポートされているサービスは下記の一覧となります。
Services that support the Resource Groups Tagging API
AWS Resource Groupsとタグエディタで使用できるリソースタイプ Amazon CloudWatch
この中に、Amazon CloudWatch (alarms only)
と記載されており、アラームの情報だけ取得できます。
aws resourcegroupstaggingapi get-resources --resource-type-filters cloudwatch:alarm --tag-filters Key=Name,Values=qiita
aws resourcegroupstaggingapi get-resources
からせめたとによって、CloudWatch Alarmをタグでフィルタし,CloudWatch AlarmのARNを取得できました。
総評
過去の経緯? からdescribe-alarms
にタグ情報が含まれていないのは残念でしたが、リソースタグの方向からなんとかフィルタできました。
ただしタグで取得したアラームに対して、変更操作をしたい場合。
delete-alarms
等は必須パラメータがalarm-names
となっており、arn
ではないので取得したarn
をそのまま使えず、ひと手間追加で必要となる点はやっぱうまくいかない感があります。