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 インスタンスに紐づくリソースを確認できます。
[
{
"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
変換後のイメージの一部ですが、以下のように描写されます。
多くのリソースがある環境では複雑なグラフになってしまいますが
削除されて既に存在しないリソースは赤、関係性を持たないリソースは黄色で表示されるため、
孤立したリソースや使用されていないリソースをすぐに判別することができます。
複数リージョンの情報をもつファイルを変換した場合、リージョン毎にグラフが描写されます。
awsets region
region コマンドは 使用している認証情報に紐づくアカウントで有効になっている
リージョンの一覧が表示されます。
awsets types
サポートしているリソースのタイプを表示します。
表示される内容は、以下の内容と同じです。
以上です。
参考になれば幸いです。