Jupyter NotebookからREST APIを使ってPower BI のデータセットを更新する (2/4)

# はじめに
こんにちは。Power BI 担当の松永です。
今回は **Jupyter Notebook** から **REST API** を使って **Power BI データセットを更新する** 方法について書いていきます。(2/4)
というのも、これまで筆者は REST API のことはさっぱりわからず Power BI Desktop やサービス、Power Automate など GUI 以外での更新方法に皆目見当がつきませんでした。
そこで、今回は Power BI REST API を理解するとともに、学生の頃研究で使っていた Jupyter Notebook 上での更新まで頑張ってみようと思います。
(長さがあるので4回に分けての投稿です)

::: note warn
本記事は、組織の [Azure Portal](https://portal.azure.com) にアクセスして認証を取得する場面があります。
組織内ユーザーの中には自由にアクセスできない方も多いと思いますので、読み物としてもぜひ楽しんでいただけたら幸いです！

:::

# これまでの歩み
[ひとつめの投稿](https://qiita.com/Minori_Matsunaga/items/9030a17be362d7eea977)では、ベースの知識を付けた後に Jupyter Notebook のインストールを行いました。
今回は Azure AD アプリ登録をやっていきます。作業量が多くヘビーですが、一緒に頑張りましょう！
(太字が今回の範囲です)

1. Jupyter Notebook のインストール
2. **Azure に Azure AD アプリケーションを登録する**
2. (Postman で実行検証)
2. Jupyter Notebook の環境を整える
2. Jupyter Notebook から Oauth2 認証でアクセストークンを得る
2. Power BI REST API を使ってデータセットに更新をかける


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

Jupyter Notebook から Power BI サービスに REST API 接続するには、Azure AD が提供するサービスを利用しなければいけません。
しかし、そのままでは Azure AD 側としては

**「あなた誰？？知らない人はアクセスできないよ！」**

となってしまいますので、

**「このアプリケーションIDとシークレット使うよ！ちゃんと通行証もってるよ！」**

と言えるようにあらかじめ **通行証を発行** しておかないといけないのです。
以下ドキュメントにも機能と理由の記載があったので、気になる方は読んでみてください。
[アプリケーションを Azure AD に追加する方法と理由](https://learn.microsoft.com/ja-jp/azure/active-directory/develop/active-directory-how-applications-are-added#why-do-applications-integrate-with-azure-ad)

### アプリ登録する

Azure AD にアプリ登録するために参考にした記事はこちらです。
[HOW TO REGISTER AN AZURE APP TO USE WITH POWER BI](https://carldesouza.com/how-to-register-an-azure-app-to-use-with-power-bi/)
公式ドキュメントはこちら
[Power BI Embedded を設定する](https://learn.microsoft.com/ja-jp/power-bi/developer/embedded/register-app?tabs=customers)

アプリ登録するための方法は2つ
- Azure Portal から登録する
- Power BI 埋め込み分析セットアップツールを使う

どちらも手順的にはほとんど変わりませんが、セットアップツールを使うと、Power BI の API アクセス権が選択しやすく、コンテンツ埋め込みに使う場合はワークスペースを同時に作れる等 Power BI 専用の機能がいくつか含まれています。 今回は最初の設定についてはセットアップツールからやってみましょう。
(どのみちあとで Azure Portal 側の操作も必要になるのですが…)


### 要件
Azure AD にアプリ登録してシークレットを発行するには以下の要件を満たすユーザーが必要です。
- (セットアップツール用) Power BI Pro アカウント
- (必須) Azure Active Directory テナントと組織 (マスター) ユーザー

### セットアップツールでアプリ登録をする


まず、[セットアップツール](https://app.powerbi.com/embedsetup/AppOwnsData?session_id=d876ccd9-7055-40de-b3bc-d46ccc6812ac)のページに移動します。

埋め込みソリューションの選択画面がでてきます。
- 組織向け埋め込み
- 顧客向け埋め込み

の2種類があり、いったい何のことやらわからないと思います。
この **「埋め込み」** とは、Power BI で作ったコンテンツを外部で独自開発したアプリや他のサービスに埋め込むことを指していて、たとえば Teams や Sharepoint への埋め込みは「組織向け埋め込み」にあたります。
今回やりたいのは埋め込みではなく外部サービスから認証を通したいだけなのですが、アプリ登録する最初のステップは一緒なのでこのままOKです。
アクセスするユーザーごとに Azure AD 認証する方法ではないので **「顧客向け埋め込み」** を選択してください。

埋め込みについての詳細は、サポート部門が出しているブログをご覧ください。
[Power BI Embedded とは？ライセンスと埋め込み方法](https://jpbap-sqlbi.github.io/blog/powerbi/pbi_embedded_license/#:~:text=%E7%B5%84%E7%B9%94%E5%90%91%E3%81%91%E5%9F%8B%E3%82%81%E8%BE%BC%E3%81%BF%201%20%E7%8B%AC%E8%87%AA%E3%81%AE%20Azure%20Active%20Directory%20%E3%83%86%E3%83%8A%E3%83%B3%E3%83%88%202,%E3%83%A9%E3%82%A4%E3%82%BB%E3%83%B3%E3%82%B9%E3%82%92%E6%8C%81%E3%81%A4%E3%81%99%E3%81%B9%E3%81%A6%E3%81%AE%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%20PPU%20%E3%83%A9%E3%82%A4%E3%82%BB%E3%83%B3%E3%82%B9%E3%82%92%E6%8C%81%E3%81%A4%E3%81%99%E3%81%B9%E3%81%A6%E3%81%AE%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%20P%20%E3%81%BE%E3%81%9F%E3%81%AF%20EM%E5%AE%B9%E9%87%8F%20%E3%80%82%20%E3%81%93%E3%81%AE%E6%A7%8B%E6%88%90%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B%E3%81%A8%E3%80%81%E3%81%99%E3%81%B9%E3%81%A6%E3%81%AE%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%81%8C%E7%84%A1%E6%96%99%E3%83%A9%E3%82%A4%E3%82%BB%E3%83%B3%E3%82%B9%E3%82%92%E6%8C%81%E3%81%A4%E3%81%93%E3%81%A8%E3%81%8C%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2542710/27aa1ea9-1264-c3c0-9441-3acec1edfa3f.png)

---

- サインインし、次に進みます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2542710/0c6f4ba2-45e1-2023-55d3-87ea64b6bdcf.png)
---
- 登録名を入力し、API アクセスで  **[Select All]**  を選びます。登録ボタンで次に進みます。
(特定の API に限定したい場合はそれだけ選ぶこともできます。)

::: note warn
セットアップツールから選択できるアクセス許可には
- Tenant.Read.All
- Tenant.ReadWrite.All

は含まれません。
このままでは Admin がつく API は実行できないので必要であれば Azure Portal で付与してください。
:::


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2542710/1f4cecc1-8cab-7a0b-1e42-05b298545867.png)

---

ワークスペースとコンテンツについては **[スキップ]** します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2542710/8b6f62cf-b58e-a549-003b-a0da91888baa.png)




![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2542710/462b0f2a-0e50-95e2-454c-8e60c717ed86.png)

---

- 最後に、 **[アクセス許可を付与する]** をクリックしてポップアップウィンドウで承諾しましょう。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2542710/5541cce8-baca-6a9f-1a78-a985fd4fd5e2.png)

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2542710/46f18fdd-9ca7-36f8-8119-955480dbb0d5.png" width=450 />

こちらの操作ですが、以下のような意味合いがあると[ドキュメント](https://learn.microsoft.com/ja-jp/power-bi/developer/embedded/register-app?tabs=customers#step-5---grant-permissions-embed-for-your-customers-only)に記載があります。

>[アクセス許可の付与] を選択し、ポップアップ ウィンドウで [承諾] を選びます。 この手順により、Azure AD アプリから、サインインしているユーザーで選択した API (スコープともいう) にアクセスできるようになります。 このユーザーは、マスター ユーザーとも呼ばれます。

以上で、セットアップツールの操作は終了です。

### Azure Portal で作成確認、シークレット取得

それでは、[Azure Portal](https://portal.azure.com/) にアクセスして登録したアプリの確認をしてみましょう！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2542710/7d4e8d06-6236-b532-446b-5f9c6d5e9048.png)

Azure サービス一覧から **[アプリの登録]** を選択し、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2542710/9bea0f70-32fa-6330-f26d-7dd2c5f2df76.png)


**[すべてのアプリケーション]** から、先ほど作成したアプリ名をクリックします。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2542710/b1a3990e-81cc-b2cb-20cc-abefa66346f3.png)

作成したアプリに関して、基本情報がでてきます。
いろいろと難しそうに感じますが、実際にこの後 Jupyter Notebook (や Postman) から値を使うのは
- アプリケーション(クライアント) ID
- シークレット

の2つだけです。
アプリを登録した段階では、**アプリケーション ID 作成されていますがシークレットは作成されていません。** 「シークレットってなんやねん」って感じですが、次のページにこう書いてありました。

>トークンの要求時にアプリケーションが自身の ID を証明するために使用する秘密の文字列です。アプリケーション パスワードと呼ばれることもあります。

要は、パスワードのことを指しているのですね！あとはシークレットが作成できればよさそうです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2542710/295e2a33-ccae-a024-5f88-b16606d2be64.png)

画面左側メニュー **[証明書とシークレット]** を選択して、 **[新しいクライアントシークレット]** から
- 名前
- 有効期間

を設定して **[追加]** しましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2542710/225f0651-e8bf-c92b-54c1-194dcf8d7b78.png)

作成できた画面がこちらです。 **[値]** に表示されている文字列がシークレットになるので、コピーしておきます。

::: note warn

**[値]** に表示されている文字列は、しばらくするとセキュリティ保護のため非表示になります。
作成したタイミングで必ず値をひかえておいてくださいね！

:::

さて、これでやっと

- **アプリケーション(クライアント) ID**
- **シークレット**

がそろいました。これでやっと Power BI REST API が使えるようになりました！！頑張りましたね！
さて立ち止まっている暇はありません。実践編にうつっていきましょう。


# おわりに
今回はここまでです。おつかれさまでした！
次回からはやっとツールを使った実践に入ります。
まずは簡単な **Postman** というツールから Power BI REST API を実行していきましょう。

それではこの後の記事も是非読んでいただけたら嬉しいです！

それでは！！