Power Automate クラウド フローの実行履歴を Log Analytics ワークスペースにインポートする (準備編)

# はじめに

Power Automate クラウド フローでエラーが発生したら、すぐに何らかのアクションを実施したいんですが、標準機能では難しいです。
監視・通知の標準機能については、以下の投稿をご参考ください。

https://qiita.com/kumukai/items/3010ee48079665c6ea23

フロー自体でエラーハンドリングを施してエラーが発生したら通知するみたいに実装すれば叶うでしょうが、これをひとつひとつのフローに実装するのはとても面倒 (数個なら許容できるかな) ですし、監視そのものを一元管理したいところです。

Azure Monitor を利用すれば、そこににログを流し込み、アラート機能を用いれば、エラーが発生した際にすぐに何らかのアクションを実施することができます。

よって、ここでは Logic Apps で Power Automate クラウド フローの実行履歴を収集して Azure Log Analytics ワークスペースにインポートする方法を検証してみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/ed56fbc9-c109-4e0e-9fce-2957adfc09f8.png)

- **準備編** ... この投稿
- **実装編** ... [次回の投稿](https://qiita.com/tetsuya-ooooo/items/356b11cd30abc856fb12)


# Power Automate クラウド フローに所有者を追加する

Power Automate Flow API には、**サインインしたユーザーとしてアプリケーションが**アクセスしますので、クラウド フローの情報と実行履歴を取得するために、API にアクセスするユーザーを対象のクラウド フローに所有者として追加しておきます。

https://docs.microsoft.com/ja-jp/power-automate/create-team-flows?WT.mc_id=AZ-MVP-5003113#add-an-owner-to-a-cloud-flow


# Azure AD にアプリケーションを登録する

Azure AD にアプリケーションを登録します。そして、そのアプリケーションの「アプリケーション (クライアント) ID」、「クライアント シークレット」をメモっておきます。


## API のアクセス許可

Power Automate Flow API を呼び出すためのアクセス許可を付与します。

[管理] カテゴリ配下の [API のアクセス許可] をクリックして [アクセス許可の追加] をクリックします。そして、「Microsoft API」から「Flow Service」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/755d4908-f78b-9b76-51e8-b75c3333bb9c.png)

「委任されたアクセス許可」、「Flows.Manage.All」と順に選択して、[アクセス許可の追加] をクリックして追加します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/18d66bec-7ec3-8c15-26bb-2cb3a37399b5.png)


## リダイレクト URI

Web のリダイレクト URI は、[カスタムコネクタを保存した後に表示される「リダイレクト URL」](#2-%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3)をコピーして追加します。

[管理] カテゴリ配下の [認証] をクリックして、以下の Web のリダイレクト URI (カスタムコネクタ) を追加します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/f9d5fcd9-4bdb-db92-ff8b-fda4dd626ca4.png)


## Postman で動作確認

アプリケーションの登録が終わったら、Postman などで Power Automate Flow API にアクセスできるか確認すると良いでしょう。

Power Automate クラウド フローの実行履歴を取得するために、以下の 2 つの API にアクセスします。

- **フローの情報を取得**

```http:フローの情報を取得(GET)
https://api.flow.microsoft.com/providers/Microsoft.ProcessSimple/environments/{environment_name}/flows?api-version=2016-11-01
```

```{environment_name}``` は、Power Platform 管理センターを開き、対象の環境の詳細にある「環境 ID」の値 (GUID) です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/124d3b36-c5c9-f3a6-6885-a12b7edec488.png)

- **フローの実行履歴を取得** 

```http:フローの実行履歴を取得(GET)
https://api.flow.microsoft.com/providers/Microsoft.ProcessSimple/environments/{environment_name}/flows/{flow_name}/runs?api-version=2016-11-01
```

```{flow_name}``` は、前述した「フローの情報を取得」のレスポンス本文から確認することができます。下図の赤枠で囲った ```name``` プロパティ値 (GUID) です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/0c43c9ad-bde2-d2a5-cb48-1544587c584c.png)

Postman を使って Power Automate Flow API にアクセスする手順については、以下の投稿をご参考ください。

https://qiita.com/nanoka/items/21ead26b75566583f219


# カスタム コネクタを作成する

Power Automate Flow API を呼び出すためのカスタム コネクタを作成します。

https://docs.microsoft.com/ja-jp/connectors/custom-connectors/?WT.mc_id=AZ-MVP-5003113

https://docs.microsoft.com/ja-jp/connectors/custom-connectors/create-logic-apps-connector?WT.mc_id=AZ-MVP-5003113

https://docs.microsoft.com/ja-jp/connectors/custom-connectors/define-blank?WT.mc_id=AZ-MVP-5003113

## 1. 全般
 
コネクタ名を入力した後、「説明」にコネクタの概要を、「ホスト」に ```api.flow.microsoft.com``` を入力します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/b6d4fc10-fbf0-23e1-5a19-dca061b134b3.png)


## 2. セキュリティ

Azure AD に追加したアプリケーションの情報を入力します。

- **認証タイプ**

| 項目 | 設定値 |
|:-|:-|
| API によって実装される認証の種類を選びます | OAuth 2.0 |

- **OAuth 2.0**

| 項目 | 設定値 |
|:-|:-|
| ID プロバイダー | Azure Active Directory |
| Client Id | アプリケーション (クライアント) ID |
| Client secret | クライアント シークレット値 |
| Login URL | ```https://login.windows.net``` (既定値) |
| Tenant ID | ```common``` (既定値) |
| Resource URL | ```https://service.flow.microsoft.com/``` |
| Enable on-behalf-of-login | ```false``` (既定値) |
| スコープ | 空欄 |
| リダイレクト URL | [コネクタの更新] をクリックして保存すると表示される<br />→ URL をコピーして、[Azure AD アプリケーションの「リダイレクト URI」](#%E3%83%AA%E3%83%80%E3%82%A4%E3%83%AC%E3%82%AF%E3%83%88-uri)に追加すること |

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/5a780007-21e7-cff0-b08b-64dfd71c2929.png)

すべて入力し終わったら、[コネクタの更新] をクリックしてカスタム コネクタを保存します。その際、資格情報を求められる (場合がある) ので、[「Power Automate クラウド フローの所有者に追加」](#power-automate-%E3%82%AF%E3%83%A9%E3%82%A6%E3%83%89-%E3%83%95%E3%83%AD%E3%83%BC%E3%81%AB%E6%89%80%E6%9C%89%E8%80%85%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%99%E3%82%8B)したアカウントでサインインします。


## 3. 定義

Power Automate Flow API から情報を取得するための以下の 2 つのアクションを定義します。
[新しいアクション] をクリックして、アクションを追加していきます。

### アクション : Power Automate クラウド フローの情報を取得

- **全般**

[全般] の「概要」、「説明」、「操作 ID」を入力します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/14776859-2c90-936d-b6a8-907ea6479f62.png)

- **要求**

[要求] にある [サンプルからのインポート] をクリックして、「動詞」、「URL」を入力した後、[インポート] をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/de4d3e9b-94fe-81b5-42cc-5755d6892957.png)

| 項目 | 設定値 |
|:-|:-|
| 動詞 | GET |
| URL | ```https://api.flow.microsoft.com/providers/Microsoft.ProcessSimple/environments/{environment_name}/flows?api-version=2016-11-01&$filter=XXX&$orderby=xxx&$skiptoken=xxx``` |

インポート後、パラメーターを編集するには、そのパラメーターの [編集] をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/560dbcf0-75e5-8725-fc6f-25a68ace94f8.png)

各パラメーターを以下のように編集します。
編集し終わったら、[戻る] をクリックして元の画面に戻ります。

| 名前 | 説明<br>※適当に | 概要<br>※適当に | 既定値 | 必須 | 表示 | 場所 |
|:-|:-|:-|:-|:-|:-|:-|
| environment_name | Power Platform の環境名 | Environment Name |   | はい | none | パス |
| api-version | API バージョン | API version | 2016-11-01 | はい | none | クエリ |
| $filter | 抽出条件 | Filter |   | いいえ | advanced | クエリ |
| $orderby | 表示順 | Order by |   | いいえ | advanced | クエリ |
| $skiptoken | スキップトークン | Skip token |   | いいえ | advanced | クエリ |

※「種類」、「書式」、「ドロップダウンリストの種類」は既定値のまま

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/d50d5771-fda2-637b-8fd3-46af655ab53f.png)

- **応答**

[応答] にある [既定の応答を追加する] をクリックして、「本文」をを入力した後、[インポート] をクリックします。
「本文」には、Postman などで動作確認した時に受け取ったレスポンス本文を (サンプルとして) コピー & ペーストすると良いでしょう。

なお、Power Automate Flow API は、**1 リクエストで最大 50 レコードを返します**。50 レコードを超えた分については、```nextLink``` プロパティにそのレコード (こちらも最大 50 レコード) を取得するための URL が記載されるので、もしコピー & ペーストしたレスポンス本文に ```nextLink``` プロパティが含まれていない場合は、手入力で追加する (```value``` プロパティと同じ階層に追加) と良いでしょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/48a7efe6-ac1f-274d-ff02-2ec619192582.png)

インポート後、[応答] にある [default] をクリックすると、インポートしたサンプルから読み取った内容が下図のように表示されます。各スキーマを編集する必要がある場合は、要求の時と同じような操作で編集画面に遷移できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/b0e91258-f8d8-eb04-3222-6be0298bc2d2.png)


### アクション : Power Automate クラウド フローの実行履歴を取得

[「アクション : Power Automate クラウド フローの情報を取得」](#%E3%82%A2%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3--power-automate-%E3%82%AF%E3%83%A9%E3%82%A6%E3%83%89-%E3%83%95%E3%83%AD%E3%83%BC%E3%81%AE%E6%83%85%E5%A0%B1%E3%82%92%E5%8F%96%E5%BE%97)と同じように操作します。

- **全般**

[全般] の「概要」、「説明」、「操作 ID」を入力します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/8196768c-a437-2dff-6a54-ff2efb3b12ed.png)

- **要求**

[要求] にある [サンプルからのインポート] をクリックして、「動詞」、「URL」を入力した後、[インポート] をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/76fc3d5e-188d-f9a4-8e8b-b2789e9a0968.png)

| 項目 | 設定値 |
|:-|:-|
| 動詞 | GET |
| URL | ```https://api.flow.microsoft.com/providers/Microsoft.ProcessSimple/environments/{environment_name}/flows/{flow_name}/runs?api-version=2016-11-01&$filter=XXX&$orderby=xxx&$skiptoken=xxx``` |

インポート後、パラメーターを編集するには、そのパラメーターの [編集] をクリックします。
各パラメーターを以下のように編集します。
編集し終わったら、[戻る] をクリックして元の画面に戻ります。

| 名前 | 説明<br>※適当に | 概要<br>※適当に | 既定値 | 必須 | 表示 | 場所 |
|:-|:-|:-|:-|:-|:-|:-|
| environment_name | Power Platform の環境名 | Environment Name |   | はい | none | パス |
| flow_name | Flow 名 | Flow name |  | はい | none | パス |
| api-version | API バージョン | API version | 2016-11-01 | はい | none | クエリ |
| $filter | 抽出条件 | Filter |   | いいえ | advanced | クエリ |
| $orderby | 表示順 | Order by |   | いいえ | advanced | クエリ |
| $skiptoken | スキップトークン | Skip token |   | いいえ | advanced | クエリ |

※「種類」、「書式」、「ドロップダウンリストの種類」は既定値のまま

- **応答**

[応答] にある [既定の応答を追加する] をクリックして、「本文」をを入力した後、[インポート] をクリックします。
こちらも「本文」には、Postman などで動作確認した時に受け取ったレスポンス本文を (サンプルとして) コピー & ペースト、```nextLink``` プロパティが含まれていない場合は、手入力で追加 (```value``` プロパティと同じ階層に追加) しましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/ef2065a2-8acf-e871-00e9-97bd4b843a47.png)


### ちょっとひと工夫...

[応答] を定義していると気づくと思いますが、同じ名前のスキーマがいくつもあって、ロジックアプリを作成する際にどのスキーマを使えば良いのか迷うことがあると思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/72cabdc9-41bc-7a2b-05e5-8c723c7fad6f.png)

この対策として、Swagger エディターを開き、プロパティの ```description``` 属性に「印 (下図では```AAA``` と印を付けてみた)」を付けておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/ed633087-ecdc-a8b0-da38-fce4ab07eb4f.png)

この対策により、これが目印となって迷わずスキーマを選択できると思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/3f2856f6-8958-e1ca-ad5d-232d7beac4ad.png)


# まとめ

[次回の投稿](https://qiita.com/tetsuya-ooooo/items/356b11cd30abc856fb12)では、ここで作成したカスタムコネクタを使って Power Automate クラウド フローの実行履歴を収集して Azure Log Analytics ワークスペースにインポートする実装について説明します。

つづく。


# Appendix

Power Automate 関連の新しい URL ```*.powerautomate.com``` がリリースされます。今後は現在の ```*.flow.microsoft.com``` にアクセスすると、新しいものにリダイレクトされます。
※リダイレクトは 2022 年 6 ～ 7 月に順次開始される予定です。
※リダイレクトの終了期限は執筆時点では公開されておりません。

なお、今回使用した Power Automate Flow API もリダイレクト対象となります。

リダイレクトの終了が正式に決まっていないので、それまでは現在の URL は利用できるだろうと思われます。

https://powerautomate.microsoft.com/ja-jp/blog/flow-microsoft-com-is-moving-to-make-powerautomate-com/?WT.mc_id=AZ-MVP-5003113