koudenpaのブログ

趣味のブログです。株式会社はてなでWebアプリケーションエンジニアをやっています。職業柄IT関連の記事が多いと思います。

Mackerel のAWS/Azureインテグレーションされているリソースが存在しているか知りたい

と思い、このようなコンポーネントを作り始めた。

github.com

MackerelのAPIを叩いてクラウド統合されているホストを取得して、統合先のクラウドリソースが実際に存在しているか? 確認したい。存在していなかったらホストのステータスを変えたい。といった感じだ。

まだ対応リソースも精度もダメダメだけれど、一応 GitHub Actions 向けの Action も用意して継続的に適用出来るように準備している。

別にMackerelとの統合目的でなくとも、クラウド上のリソースの状態を包括的に知りたい、という需要はありそうに思えるのだが、これがなかなか簡単には実現できなさそうなので「大変だなぁ」という感想記事を書いた次第だ。

  • Azure のリソース状態取得事情
  • AWS のリソース状態取得事情

に分けてお伝えする。

Azure のリソース状態取得事情

Azureのリソースを作成する際にはARM(Azure Resource Manager)を用いることができる。これに対して包括的にクエリ出来る Azure Resource Graph というサービスが用意されている。

docs.microsoft.com

SQL的なクエリ言語 でAzure上のリソースを探すことができる。最高か?

サービスとしてはなかなか良さそうなのだけれど、Mackerelとの統合だとIDのアンマッチがあったりして素直にはリソースの状態をクエリ出来るわけではなかった。もう少し突っ込んでリソースの持つプロパティを見ていきたいと思う。

SQLDatabase Mackerel 上の name と Azure Resource Graphs 上の name が一致しない場合がある。 · Issue #1 · 7474/mackerel-cloud-integration · GitHub

それにしても、なんで201x年代も終わろうかというころになって大文字小文字のギャップで困らなくてはならないのだろうか? 新しいものに触れる時にはいろいろなことに注意が必要である。

AWS のリソース状態取得事情

AWSのリソースはAmazon リソースネーム (ARN) というIDを持っている。このARNなりでリソースの種類を横断してクエリ出来ると便利そうだ。

docs.aws.amazon.com

が、2019-09現在、自分が知る限りではそういったサービスは提供されていないようだ。

なので、愚直にリソース毎に問合せ手法を変えて実装することを考えている。

大変だ。

IAMなどはリージョンやリソースを越えて色々なものと関連しているリソースだけれど、これは各リージョン・リソースでIAMを参照してアクセス権限などを見ている訳で、逆に色々な壁を越えてリソースを参照するのは大変なのだろうと思っている。

そういう意味ではAzure Resource Graphは相当凄いことをやっているように思える。実際アーキテクチャを「すごかろう」といった感じで説明している。

なんだかAzure Resource Graphの提灯記事のようになってしまった。まぁ、そういう気分ではある。