1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWS のタグからのリソース検索でresource-type-filtersを使いたいが渡す文字列がわからないあなたへ

Posted at

resourcegroupstaggingapi の get-resources は便利

本格的にAWSのリソースを利用していたら、タグは大体の人はつけていると思います

一方で、そのタグを使用してリソースをフィルターして検索する方法は多くのサービスでサポートしていません。

例えば、EC2は対応していますが、RDSやECSでは対応していません

対応:

未対応:

もちろん一度取得した後に、--queryを使用したり、プログラム側フィルタリングをしても良いですが、やはりサーバーサイド側から1発で拾いたいものです。

せっかくタグをつけているんだから、そこから検索したい、という方のために resourcegroupstaggingapiget-resourcesというAPIで実現が可能です。

このAPIがどんなものかは以下の記事を見てみると良いです

公式リファレンスはこちら

リソース * タグ で絞り込みたい

とはいえ、タグだけで絞りこむには困るケースも多いです。
例えば、顧客ごとの共通のタグをつけていてそれで検索したいが、そうすると大量のリソースが検出されてしまうでしょう

get-resourcesAPIはそれにも resource-type-filters というパラメータで対応しています。これに

これも以下の記事を見るとイメージができると思います

なお、こちらの記事にある通り、このフィルターはすべてのリソースでサポートされているわけではありません

このコマンドのオプションにresource-type-filtersがあり、このオプションでサポートされているサービスは下記の一覧となります。
Services that support the Resource Groups Tagging API
AWS Resource Groupsとタグエディタで使用できるリソースタイプ Amazon CloudWatch

resource-type-filtersに渡す値

AWS Resource Groupsとタグエディタで使用できるリソースタイプ Amazon CloudWatch から対応リソースは分かりましたが、実際に渡す値は何になるのでしょうか

このAPIを使用するAWSコンソールを見ると リソースタイプのところで、上記リンクに表示しているリソースタイプを選択する形になっています

image.png

一方でAPIから実行するときはこの形式ではエラーになります

 $ aws resourcegroupstaggingapi get-resources  --resource-type-filters "AWS::RDS::DBInstance"   

An error occurred (InvalidParameterException) when calling the GetResources operation: Unsupported service=AWS in ResourceTypeFilter - AWS::RDS::DBInstance

そこで、リファレンスを読むと以下のように書いてあります

--resource-type-filters (list)

Specifies the resource types that you want included in the response. The format of each resource type is service[:resourceType] . For example, specifying a resource type of ec2 returns all Amazon EC2 resources (which includes EC2 instances). Specifying a resource type of ec2:instance returns only EC2 instances.

The string for each service name and resource type is the same as that embedded in a resource’s Amazon Resource Name (ARN). For the list of services whose resources you can use in this parameter, see Services that support the Resource Groups Tagging API .

You can specify multiple resource types by using an array. The array can include up to 100 items. Note that the length constraint requirement applies to each resource type filter. For example, the following string would limit the response to only Amazon EC2 instances, Amazon S3 buckets, or any Audit Manager resource:

ec2:instance,s3:bucket,auditmanager

ここから以下の内容がわかります。

  • service OR service:resourceType で絞り込める
  • service と resourceTypeはARN内に存在している

各リソースのARNを知る方法 ①

まずARNの形式についてですが、それはこちらの公式ドキュメントに書かれています。

これによると、arn:partition:service:region:account-id:resource-type/resource-id のような形式になるので、partitionの後が service で account-idのあとが resource-typeになります

あとはARNがわかればよいということになるのですが、サービスによっては以外とすぐに見つかりません

先ほどの AWS::RDS::DBInstanceの場合は簡単です。AWSコンソールからリソースの情報を見ればARNが載っています

例えば、以下のようなARNになるので、指定する値は rds:db になります

arn:aws:rds:ap-northeast-1:811463838477:db:hoge-fuga-instance

一方で、載っていないリソースもあります。例えば AWS::Backup::BackupPlan の場合、コンソールで見ても以下のようになり、ARNが表示されません

image.png

そこでWeb検索をすると、以下のような公式ドキュメントが見つかり、ARNが arn:aws:backup:region:account-id:backup-plan であることを知ることができました。

しかし、各サービスごとのドキュメントではARNが書かれている箇所は異なります。ですが、サービスごとに毎回Web検索をするのは面倒です

各リソースのARNを知る方法 ②

全てのサービスのARNがまとまったページはないのかと思って探したところ、ありました。

このページは各サービスのActions, resources, condition keys がまとまっているページになります

このページ内の各サービス名のリンクをクリックすると、それぞれのサービスの情報が記載されています。

画像右のResource TypesをクリックするとそのサービスのResource type並びにARNを知ることができます

image.png

まとめ

  • ARN形式における service:resource-type が有効な値になります
    • arn:partition:service:region:account-id:resource-type/resource-idserviceresource-type

  • 各リソースのARNは以下のドキュメントから調べられます

動作としては存在しないservice:resource-typeの組み合わせを指定しても、エラーにはならなかったので、以下のような仕組みになっているんだなと思います

  • 内部的には汎用的にARNから、serviceresource-typeでフィルタリング
  • resource-type-filtersで使用できるか(出力として表示するか)は別にフラグを用意している

個人的にはコンソール側の表示とAPI側で渡す値をそろえてほしいなと思いました。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?