Azure Machine Learningに既存のAzure Data Lake Gen2を追加する方法

# Azure Machine Learningに既存のAzure Data Lake Gen2を追加する方法
今回は、Azure Machine Learningに既存のAzure Data Lake Gen2を追加する方法を解説します。
Azureワークショップで躓いている方も多かったので、お役に立てば幸いです。

## 事前確認1.Azure Data Lake Gen2の確認
Azure Data Lake gen2とは一言で言うとオブジェクトストレージであるAzure Blob Storageの上位互換です。
オブジェクトストレージにファイルシステムの機能(階層的名前空間)が追加されたことにより、分析のパフォーマンスを向上させることが可能となります。
Hadoopにも対応していることからAzure SynapseやDatabricksのストレージとして利用されています。
Azure Blob Storageと見分けがつきにくいですが、
[概要]->[プロパティ]->[Data Lake Strage]->[階層構造の名前空間]が[有効]になっていればData Lake Gen2です。
![画像1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2681297/bdad9d99-292d-b93e-e373-f0f1245325fd.png)

## 事前確認2.Azure Machine Learningの確認
Azure Machine Learning上からAzure上のデータにアクセスする場合は、新しいデータストアを作成します。
Azure Data Lake Gen2に接続したい場合、認証の種類は22年7月時点で「サービスプリンシパル」のみ対応しています。
それでは、サービスプリンシパルを作成していきましょう。
![画像19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2681297/c29251a1-74ef-0146-f6e8-1675858f5176.png)


## サービスプリンシパルの作成
サービスプリンシパルとは何でしょうか？初学者の方は躓くポイントだと思います。
私なりの一言説明としては「ユーザの代わりとして使えるアプリケーション用ID」ですかね。
サービスへアクセス権限は基本的にユーザに紐づくものですが、アプリケーションにアクセス権限を持たせたい場合に使います。
今回で言うと、Azure Machine LearningというアプリケーションがData Lake Gen2というサービスにアクセスする、というユースケースですね。
ググってもらえると様々な解説記事が出ているのでそちらもご参照いただければと思います。

Azure Portalの検索窓から「アプリ」で検索すると「アプリの登録」がでてきます。
そちらの画面から[新規登録]をクリックしましょう。
![画像4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2681297/23c87265-07e5-fd9d-ddee-7a647e3c6ed3.png)
アプリケーション名を入力して、[登録]をクリックしましょう。
![画像5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2681297/1dd040bb-3b75-5753-ed38-53e24c9e26ee.png)
アプリケーションの[概要]からクライアントIDをメモしておきましょう。
![画像6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2681297/6beaef5f-cade-560d-9265-4ac422b0d2f6.png)
次にクライアントシークレットを発行します。
[証明書とシークレット]->[新しいクライアントシークレット]をクリックし、有効期限を設定し、[追加]をクリックしましょう。
![画像7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2681297/58728571-feca-d315-d80f-8e8a6ac6c98c.png)
すると、シークレットが生成されますので、こちらの値をメモしておきましょう。
![画像8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2681297/9e1686fd-7e94-6e02-fec0-ffad797945bd.png)

以上でサービスプリンシパルの作成は完了です。
空のアプリケーションと認証シークレットまで準備ができました。
次はこちらのアプリケーションにアクセス権限を付与していきましょう。

## サービスプリンシパルにロールを付与
Azue Portalの検索窓から「ストレージアカウント」で検索し、アクセスしたいAzure Data Lake Gen2をクリックします。
今回は「mlstoragedemo1234」というストレージを使います。
[アクセス制御]->「追加」をクリックしましょう。
![画像10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2681297/90757088-fa88-f61a-19ef-d4f5f5f8e38e.png)
ここでは、サービスプリンシパルに与えるロールを指定します。
Azure Machine Learningではストレージへの読み・書き両方行うので「ストレージBLOBデータ共同作成者」を選択します。
![画像11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2681297/96ffbca3-e818-fad1-0675-acf526a45f1f.png)
[メンバーを選択する]をクリックし、右上[選択]の検索枠から先ほど作成したサービスプリンシパルを検索し、選択しましょう。
![画像12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2681297/73a7adc8-1636-516d-bcf7-ff33da51b4cb.png)
[レビューと割り当て]をクリックしましょう。
![画像13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2681297/502dfc02-b5c3-03e7-291a-488fbccf82eb.png)

## データストアの登録
Azure Machine Learning Studioに戻り、[データストア]->[新しいデータストア]をクリックしましょう。
データストア名を入力し、データストアの種類を「Azure Data Lake Storage Gen2」にしましょう。
先ほどメモしたクライアントIDとクライアントシークレットを入力し、作成をクリックしましょう。
![画像16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2681297/dacb066a-b9e1-8a45-a570-7a3d06294c6e.png)
無事にデータストアとして登録されていることが確認できました！
![画像17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2681297/4c3dc7ee-22fb-5ca3-cb01-538bf285c10f.png)

## まとめ
Azure Machine Learningに既存のAzure Data Lake Gen2を追加する方法を解説しました。
特にサービスプリンシパル周りが少しややこしかったですが、一度理解すればそこまで難しい操作ではないと思います。
データアクセスを理解し、積極的にAzure Machine Learningを活用していきましょう！