Help us understand the problem. What is going on with this article?

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

AWSets とは

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

https://github.com/trek10inc/awsets

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

https://github.com/trek10inc/awsets/blob/master/supported_resources.md

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

インストール

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

https://github.com/trek10inc/awsets/releases

以降では、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

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

https://github.com/trek10inc/awsets/blob/master/supported_resources.md

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

hayao_k
インフラ大好きです。2019 & 2020 APN AWS Top Engineers に選出いただきました。 掲載内容は個人の見解であり、所属する企業を代表するものではありません。
saison_information_systems
モード1(守りのIT)・モード2(攻めのIT)を兼ね備えたバイモーダル・インテグレーターとしてデータ連携プラットフォームのHULFTシリーズ, リンケージサービス, 流通ITサービス, フィナンシャルITサービスを提供します。
https://home.saison.co.jp/
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
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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
ユーザーは見つかりませんでした