Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
17
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

@hayao_k

AWSのリソース一覧を出力できるツール AWSets を試してみた

AWSets とは

AWSets は AWS アカウント内をクロールし、対応するリソースの一覧を json 形式で
出力可能な Go 製のコマンドラインツールです。
北米のプレミアコンサルティングパートナーである Trek10 社が開発、OSS として公開しています。

現時点ではすべての AWS リソースに対応しているわけではありませんが、
2020/9/13 時点で 200 以上のリソースに対応しています。

複数のリージョンに同時にクエリを実行しつつ、リージョンやサービスでフィルタリングが
可能であったり、リソース間の依存関係を保持した情報を出力してくれるのが特徴です。

インストール

GitHub のリリースページからバイナリファイルをダウンロード可能です。

以降では、2020/9/13 時点の最新バージョンである、v0.2.4 で確認しています。

$ awsets version
awsets - version: 0.2.4 commit: b5be906179904d9d412a70332d9d33b06fdd84df  date: 2020-09-09T19:58:18

使用方法

認証情報は .credentials ファイルの情報を読み取ってくれるようです。
使用するプロファイルを切り替えたい場合は、AWS_RROFILE 環境変数で指定すれば OK です。

awsets list

リソース情報を取得します。単に list コマンドを実行した場合、全リージョン、全対応リソースの
情報を取得しますが、--region オプションでリージョン、--include, --exclude
対象のサービスをフィルタリングすることができます。

以下の例は、東京リージョンの EC2 に関連するリソースを取得します。

$ awsets list --regions ap-northeast-1 -o ec2.json --include ec2

ツールで取得された情報は 以下のような json 形式で保存されます。
jq コマンドや jmespath などでで処理することを前提にしているようです。
以下の例では Relations という形で EC2 インスタンスに紐づくリソースを確認できます。

ec2.json
[
 {
    "Account": "123456789012",
    "Region": "ap-northeast-1",
    "Id": "i-xxxxxxxxxxxxxxxxx",
    "Version": "",
    "Type": "ec2/instance",
    "Name": "i-xxxxxxxxxxxxxxxxx",
    "Attributes": {
      "AmiLaunchIndex": 0,
      "Architecture": "x86_64",
      "BlockDeviceMappings": [
        {
          "DeviceName": "/dev/xvda",
          "Ebs": {
            "AttachTime": "2020-09-13T03:03:57Z",
            "DeleteOnTermination": true,
            "Status": "attached",
            "VolumeId": "vol-xxxxxxxxxxxxxxxxx"
          }
        }
      ]
      ~~省略~~
    }
    "Tags": {
      "Name": "test-instance"
    },
    "Relations": [
      {
        "Account": "123456789012",
        "Region": "ap-northeast-1",
        "Id": "subnet-xxxxxxxxxxxxxxxxx",
        "Version": "",
        "Type": "ec2/subnet"
      },
      {
        "Account": "123456789012",
        "Region": "ap-northeast-1",
        "Id": "vpc-xxxxxxxxxxxxxxxxx",
        "Version": "",
        "Type": "ec2/vpc"
      },
      {
        "Account": "123456789012",
        "Region": "ap-northeast-1",
        "Id": "sg-xxxxxxxxxxxxxxxxx",
        "Version": "",
        "Type": "ec2/securitygroup"
      },
      {
        "Account": "123456789012",
        "Region": "ap-northeast-1",
        "Id": "eni-xxxxxxxxxxxxxxxxx",
        "Version": "",
        "Type": "ec2/networkinterface"
      },
      {
        "Account": "123456789012",
        "Region": "ap-northeast-1",
        "Id": "vol-xxxxxxxxxxxx",
        "Version": "",
        "Type": "ec2/volume"
      }
    ]
  },
~~省略~~
]

awsets process

実験的な機能として出力した json ファイルを加工するため機能が用意されています。
v0.2.4 時点では process bot コマンドが使用可能です。
json ファイルのデータ構造をグラフとして表現する DOT 言語形式のファイルに変換することができます。

$ awsets process dot -i ec2.json -o ec2.dot

DOT ファイルは Graphviz などの描画ツールを使用することで
グラフを SVG や PNG など任意のイメージ形式で出力することができます。

$ dot ec2.dot -T svg -o ec2.svg

変換後のイメージの一部ですが、以下のように描写されます。
多くのリソースがある環境では複雑なグラフになってしまいますが
削除されて既に存在しないリソースは赤、関係性を持たないリソースは黄色で表示されるため、
孤立したリソースや使用されていないリソースをすぐに判別することができます。

image.png

複数リージョンの情報をもつファイルを変換した場合、リージョン毎にグラフが描写されます。

awsets region

region コマンドは 使用している認証情報に紐づくアカウントで有効になっている
リージョンの一覧が表示されます。

awsets types

サポートしているリソースのタイプを表示します。
表示される内容は、以下の内容と同じです。

以上です。
参考になれば幸いです。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
17
Help us understand the problem. What are the problem?