全 Cloud Resource を PostgreSQL に ! CloudQuery を試してみる。

こんにちは k-jun です。今回はパブリッククラウドに存在するリソースを全てレコード化して SQL で検索できるようにする CloudQuery を試してみます。

https://github.com/cloudquery/cloudquery

README.md を見た感じは、PostgreSQL を用意してコマンドを実行するだけみたいですね。ユースケースは正直全く思いついていませんが、列挙できるのは意外と便利かもしれません。

Setup

$ brew install cloudquery/tap/cloudquery
$ cloudquery init aws 

生成された設定ファイルを見てみると、PostgreSQL の接続情報が書かれています。ということで、これと同じ接続情報で PostgreSQL を起動していきます。

$ cat config.hcl
 ...
  connection {
    dsn = "host=localhost user=postgres password=pass database=postgres port=5432 sslmode=disable"
  }
...
$ docker run -p 5432:5432 -e POSTGRES_PASSWORD=pass -d postgres

Run

満を持して fetch を実行してみるも失敗している様子。

$ cloudquery fetch
Provider fetch complete.

Provider aws fetch summary:  ✓ Total Resources fetched: 5        ⚠️ Warnings: 0   ❌ Errors: 203

調べるとファイルオープンの上限に引っかかっていたようなので調査して解消。

https://discussions.apple.com/thread/251000125

$ cloudquery fetch
...
Provider aws fetch summary:  ✓ Total Resources fetched: 2        ⚠️ Warnings: 0   ❌ Errors: 0

良さそう。PostgreSQL の中身を見てみる。

f:id:K-jun1221:20211127143739p:plain

EC2 だけでもこれだけテーブルが作成されている...! すごい...! MySQL も対応していたら、業務導入をよりかんたんに検討できるかもしれないのになぁ...。

postgres=# SELECT * FROM aws_ec2_instances;
-[ RECORD 1 ]--------------------------------------+-------------------------------------------------------
cq_id                                              | 964684cc-xxxx-xxxx-xxxx-250dac7de772
meta                                               | {"last_updated": "2021-11-27T05:31:30Z"}
account_id                                         | 9367844xxxxx
region                                             | ap-northeast-1
id                                                 | i-0f7141eff3f2xxxxx
ami_launch_index                                   | 0
architecture                                       | x86_64
capacity_reservation_id                            |
cap_reservation_preference                         | open
cap_reservation_target_capacity_reservation_id     |
cap_reservation_target_capacity_reservation_rg_arn |
client_token                                       |
cpu_options_core_count                             | 1
cpu_options_threads_per_core                       | 1
ebs_optimized                                      | f
ena_support                                        | t
enclave_options_enabled                            | f
hibernation_options_configured                     | f
hypervisor                                         | xen
iam_instance_profile_arn                           |
iam_instance_profile_id                            |
image_id                                           | ami-02d36247c5bc58c23
instance_lifecycle                                 |
instance_type                                      | t2.micro
kernel_id                                          |
key_name                                           | k-jun
...

レコードの中身を見てみたけれども、本当に全列挙という感じで情報が全部入っている。これはなかなかすごいぞ...! Cloud Config なんて使用しなくてもいい感じにリソースの監視ができるかもしれない。良さげ。

ということで今回はこのへんで。