LogicApps は日々新しいサービスの対応が追加されたり、利用できるアクションが増えたりと、知らない間にできることが増えてくるサービスです。公式ブログでも特にアナウンスがない場合も多く、いつの間にか追加されてた!、ということが頻繁にあります。
そのため、現時点で利用可能なサービス数やトリガ・アクション数を定期的に調査する仕組みを考えてみました。
Azure Portal だけでなく Visual Studio の LogicApps 拡張を利用して、LogicFlow の作成ができるので、CORS などによるアクセス制限はない、と考えていたので Fiddler で LogicApps 拡張がどうアクセスしているのかをまず調査します。
VS からも、Azure Portal からも同様のアクセス方法にてコネクタ一覧を取得しているのが確認できます。これらでアクセスしているのは、以下の2か所のようです。
- https://management.azure.com/subscriptions/{サブスクリプションID}/providers/Microsoft.Web/locations/{リージョン}/apiOperations?api-version={API Version}
- https://management.azure.com/subscriptions/{サブスクリプションID}/providers/Microsoft.Web/locations/{リージョン}/managedApis?api-version={API Version}
apiOperations にアクセスした場合は、その後のパラメータにより、トリガ一覧を取得するかアクション一覧を取得するかを指定できるようです。また、managedApis にアクセスした場合は、サービス一覧が取得できるようだと、結果から推測できます。
これと同様に HTTP アクセスすることで、LogicFlow だけで一覧を取得できるのですが、そこに至るまでが少々手間のかかるところでした。Azure の REST API を利用するときと同様、Azure ActiveDirectory にアプリケーションの登録が必要で、その情報をもとにアクセスするためのトークンを取得できるようになります。
1.Azure AD へのアプリ登録
ポータル上で Azure Active Directory のブレードを開き、「アプリの登録」をクリックします。
上記スクリーンショットのように、何かしらのアプリケーションとして登録が必要なので、「追加」をクリックします。
一覧上での名前(適当でOK)、アプリケーションの種類(Webアプリを選択)、サインオンURL(適当でOK、思いつかなかったら HTTPS://localhost でOK)を設定し、下部に表示されている「作成」をクリックします。作成されると、先の一覧に戻りますので、今作成したものをクリックします。
まずはここに表示されている、アプリケーションID、が後で必要になりますので、これをコピーして保存しておきます。次に Client Secret と呼ばれるパスワード的な項目を作成しますので、「キー」をクリックします。
ここで新しいキーを作成します。その際の説明は何でもよく、期限も自分が利用する範囲を設定します。そうして保存すると、新しいランダムな文字列が生成されますが、内容を確認できるのはここ一度だけですので、必ずこの値を控えておいてください。忘れた場合は、新しく作成しなおしとなります。
アプリケーションの登録は、これで完了です。次に、このアプリケーションに対して権限を付与します。
2.アプリケーションへの権限付与
ポータル上で「サブスクリプション」を開きます。
LogicApps を作成するサブスクリプションをクリックします。
アクセス制御(IAM)をクリックします。
するとこのような画面になりますので、ここからアプリケーションに対して権限を付与していきます。権限付与の方法はいろいろとあるので、詳しく知りたい方は RBAC について調べてみるのがよいと思います。今回は、閲覧権限だけを付与するやり方を行います。上部の「役割」をクリックします。
このようにサブスクリプションに定義されている役割が、一覧で表示されます。ここから、必要な役割を選択するので、今回は「閲覧者」をクリックします。
ここからアプリケーションを登録します。ユーザーの追加、とでていますがここにアプリケーション名を入力します。
うまくいくと上記のように作成したアプリケーションが表示されるので、これを選択し画面下部の「選択」をクリックします。うまく表示されない場合、アプリケーションID で検索すると出てくることもあるので、両方で試してみてください。
ここまでの作業で、ようやく REST API などで必要となる クライアントID と クライアントシークレット が作成でき、必要な権限も割り振られた状態となります。
3.アクセスして情報を取得する
ようやくここからが LogicFlow です。今回作成するものは、以下のようなものとなります。なお、今回は作成しているうちに、デザイナー上ではエラーとなって保存できないけども CodeView からはちゃんと保存できる、という現象が発生しましたので、もし保存できない場合は CodeView から保存を行ってください。
トリガの取得、アクションの取得、それにサービスの取得を並列にしていますが、これは単なる趣味です(
流れとしては、最初にトークンを取得し、次にトークンを用いて各種情報を取得する形になります。
トークン取得時は HTTP コネクタを利用して POST アクセスを行います。URL は次のものになります。
https://login.windows.net/{テナントID}/oauth2/token
ヘッダーには Contetnt-type として application/x-www-form-urlencodeed を指定し、本文として、以下の文字列を & で結合した形で設定します。
grant_type=client_credentials
resource=https://management.azure.com/
client_id={クライアントID}
client_secret={クライアントシークレットを URL エンコードしたもの}
注意すべきところは、resource で指定する URL で、これは management.azure.com を指定する必要があります。ほかの資料だと、自分のテナントとなる URL を指定するものもありますが、今回はこの URL である必要があります。
アクセスした場合の戻り値は JSON となりますので、あらかじめ ARC や POSTMAN などのツールでアクセスを行い、結果を取得しておくと 「JSON の解析」アクションを使うのが楽になります。
取得できたトークンを、後続処理で利用しやすいように加工します。「作成」アクションで、取得したトークンの頭に「Bearer 」(Bearer の後ろに半角ブランク)を付与しています。これはアクセスする際に、Authorization 項目としてヘッダに記載する必要があります。
アクセスして情報を取得する箇所は、上記のように設定します。
取得した結果より、配列の個数を length 関数で取得しています。これがサービスやアクション、トリガの個数となります。
最後に取得した結果をもとにツイートさせています。
余談として、趣味で行った並列動作については、上記のように実行条件となる runAfter の指定で、複数のコネクタの正常終了を条件と記載することで、設定が可能です。
これで何とか、LogicApps で利用可能なサービス数やアクション、トリガの情報が取得できました。今回はまとめて個数だけを利用していますが、取得した各種情報にはアクションやサービスの詳細情報もありますので、このあたりを利用すると独自のエディタ作成など、面白いことができるかもしれません。
0 件のコメント:
コメントを投稿