2017年8月15日火曜日

LogicApps のサービス情報を Azure Table Storage に格納し新規サービスを検知する

現在、Twitter 上では、以前に構築した「サービス数をカウントしてツイートする」ということを続けています。これはこれでよいのですが、実際に対応サービスが増えた際に、何が増えたかを確認するのがおっくうになってきたので、その点も対応してみました。

まずデータ格納先となる Azure Table Storage を作成するのですが、現在では Table Storage か Cosmos DB の Table Storage かの 2 種類が存在しています。Cosmos DB の方が障害に強く実運用には適している面もあるのですが、反面コスト的には従来の Table Storage が有利な面もあるので、使い分けが必要です。ただし、LogicFlow 上ではどちらも同じような操作・設定となりますのでそれほど意識する必要はありません。

image

まずは下準備として、現在のサービス情報をあらかじめ Table Storage に導入しておく必要があります。

image

従来の Table Storage では、ストレージアカウントを新規作成し、その配下に Blob や Table などの従属サービスを作成する流れとなっています。上記の画面で「テーブル」をクリックすると、Table Storage の作成が可能な一覧画面へと変わります。

image

この一蘭画面の上部メニューにある「テーブル」をクリックすると、新規にテーブルが作成できます。

image

テーブルの作成といっても、難しいことは何もなく、テーブル名を設定するだけです。これで Table Storage を利用する準備は整いました。

image

LogicFlow から Table Storage を利用するには、アカウント名とアクセスキーが必要になりますので、「アクセスキー」ブレードを開いて、情報を控えておきます。

今回作成した、事前準備用の LogicFlow では前半でいつものアクセストークンを取得します。その情報をもとに、実際のサービス情報を取得、取得した結果を Table Storage に更新しています。

image

その際にポイントとなるのは、サービス情報を取得した後のこの部分です。取得したサービス情報を「選択」アクションで、名前と詳細のみの配列へと変更してその配列を Table Storage への更新に利用しています。

これは情報を制限しようと思っているからではなく、Table Storage の仕様として「平坦化された情報のみ保持可能」というものがあるためです。言い換えると、JSON などでは複数のプロパティを持つ値、prop.name、prop.description、prop.api ・・・など、このような値はそのままでは更新できずにエラーとなります。

image

そのために、今回はサービス名と詳細だけに値を絞って平坦化しています。実際に更新されたデータを確認するには、Azure Storage Explorer が便利です。

image

このように、実際のストレージ内部を確認できるので、これで更新がうまく行われているかを確認できます。

この下準備を行うことで、取得した最新のサービス情報と比較を行い、新たに増えたサービスが判定可能になります。

image

その場合の判定を行うには上記のような LogicFlow になります。取得した最新のサービス情報に対して ForEach でループを行い、取得した name(JSON 上に二つ name プロパティがあるので注意)を条件に、Table Storage より取得を行います。

取得した結果が存在するかどうかには、length 関数を使用して判定を行います。length 関数の結果が 0 である=Table Storage にデータがない=新規サービス、として判断が可能です。

また反対に、最新情報に含まれていないけど Table Storage に含まれている場合にも対応が可能です。この場合は、Table Storage のデータで ForEach ループを行う形になります(過去に、間違ってリリースしてしまったなどで、消えたサービスがあったりします…)

なお、Table Storage からデータを取得する際には、少々慣れが必要です。

image

詳細オプションの中の FIltter Query 項目で、取得する際の条件を指定することが可能ですが、上記のように、独自の構文(HTTP クエリパラメータに近い)を利用しています。こちらの記載については公式ドキュメントがあるので、参照してみてください。

もう一つの Select Query は、結果として取得する項目を指定するところとなります。

このような形で LogicFlow を組むことで、ほぼほぼコードレスな状態でも色々なことができるようになります。アイデア次第で、コードが必要だと思っていた箇所がコードレスで対応可能となることで、より重要なところに着手できる余裕が増えるのではないでしょうか。

0 件のコメント:

コメントを投稿