AWSリソースをTagでFilterする時の注意点

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

こんにちは。望月です。
AWSでは、インスタンスやセキュリティグループなどのリソースに対してタグを付与することができます。タグは様々な用途に利用できますが、最も有名な使い方は、Nameタグを付与してインスタンスを一意に判断することだと思います。今日はそのタグ検索をAPIから行う時の注意点をひとつ。既に知っている人にとっては当然の話だと思います。短いです。

タグを利用したフィルタリング

AWS CLIを利用して、タグを検索条件に指定して絞り込みを実施することが出来ます。例えば、以下のコマンドではEC2インスタンスに紐付けられたタグを検索条件にしてインスタンスを表示しています。

aws ec2 describe-instances --filters "Name=tag-key,Values=Name" "Name=tag-value,Values=app01"

上のコマンドでは「タグのKeyが"Name"のタグを持つ」かつ、「タグの値が"app01"」であるインスタンスが取得できます。
ですが、上記のコマンドには一つ落とし穴があります。それは、「フィルターの各条件は独立している」点です。
どういうことかというと、例えば以下のようなインスタンスがあった場合を考えます。

mc_1

上記のフィルターを利用すると、画像の2インスタンス両方が取得できてしまいます。ですが、本来やりたかったのは下の「Nameタグが"app01"」のものを取得することです。
ある特定のタグのKey-Valueのペアで検索したいときは、以下のフィルター条件を使用しましょう。

aws ec2 describe-instances --output table --filters "Name=tag:Name,Values=app01"

この記法はEC2インスタンスだけではなく、タグを利用できるリソース全般に対して利用できるので、頭に入れておくと少し幸せになれるかもしれません。

ところで

先日のManagement Consoleのアップデートで、EC2インスタンス一覧のページの検索バーでフィルター条件を利用できるようになりました。 Management Consoleで上記のようなフィルターを実施したい場合はtag:Name : app01のように検索バーに入力しましょう。

mc_21

Nameタグの値のみでフィルタされるようになりました。

まとめ

AWSのタグ機能は非常に柔軟ですが、API経由での取得には若干の癖があります。APIを利用してタグを取得するやり方については先日の植木のエントリを参照下さい。タグを上手く活用して快適なAWSライフを!