と思い、このようなコンポーネントを作り始めた。
MackerelのAPIを叩いてクラウド統合されているホストを取得して、統合先のクラウドリソースが実際に存在しているか? 確認したい。存在していなかったらホストのステータスを変えたい。といった感じだ。
まだ対応リソースも精度もダメダメだけれど、一応 GitHub Actions 向けの Action も用意して継続的に適用出来るように準備している。
別にMackerelとの統合目的でなくとも、クラウド上のリソースの状態を包括的に知りたい、という需要はありそうに思えるのだが、これがなかなか簡単には実現できなさそうなので「大変だなぁ」という感想記事を書いた次第だ。
- Azure のリソース状態取得事情
- AWS のリソース状態取得事情
に分けてお伝えする。
Azure のリソース状態取得事情
Azureのリソースを作成する際にはARM(Azure Resource Manager)を用いることができる。これに対して包括的にクエリ出来る Azure Resource Graph というサービスが用意されている。
SQL的なクエリ言語 でAzure上のリソースを探すことができる。最高か?
サービスとしてはなかなか良さそうなのだけれど、Mackerelとの統合だとIDのアンマッチがあったりして素直にはリソースの状態をクエリ出来るわけではなかった。もう少し突っ込んでリソースの持つプロパティを見ていきたいと思う。
それにしても、なんで201x年代も終わろうかというころになって大文字小文字のギャップで困らなくてはならないのだろうか? 新しいものに触れる時にはいろいろなことに注意が必要である。
Azure Resource Graph さんよぉ?
— 光電/7474 (@koudenpa) September 29, 2019
1. where type == "Microsoft.Sql/servers"
2. where type == "microsoft.sql/servers"
1: ヒットしない
2: ヒットする
ARM上の type は 1 。
あんまりな罠だ! どっかに書いてあったとしても!!https://t.co/kdZuCosxNg
サンプルも大文字だしよぉ!!!
AWS のリソース状態取得事情
AWSのリソースはAmazon リソースネーム (ARN) というIDを持っている。このARNなりでリソースの種類を横断してクエリ出来ると便利そうだ。
が、2019-09現在、自分が知る限りではそういったサービスは提供されていないようだ。
なので、愚直にリソース毎に問合せ手法を変えて実装することを考えている。
大変だ。
IAMなどはリージョンやリソースを越えて色々なものと関連しているリソースだけれど、これは各リージョン・リソースでIAMを参照してアクセス権限などを見ている訳で、逆に色々な壁を越えてリソースを参照するのは大変なのだろうと思っている。
そういう意味ではAzure Resource Graphは相当凄いことをやっているように思える。実際アーキテクチャを「すごかろう」といった感じで説明している。
なんだかAzure Resource Graphの提灯記事のようになってしまった。まぁ、そういう気分ではある。