Azure Data Factory から Synapse Spark Notebook 実行する機能を試す

## はじめに

[Orchestrate and operationalize Synapse Notebooks and Spark Job Definitions from Azure Data Factory](https://techcommunity.microsoft.com/t5/azure-data-factory-blog/orchestrate-and-operationalize-synapse-notebooks-and-spark-job/ba-p/3724379)

ということでData Factory から Synapse Spark Notebook の実行ができるようになったそうなので試してみます。
これができると、Data Factory を起点にSynapse 上のSpark処理も回せます。これまでは、Data Factory からSynapse PipelineをAPIでトリガーする必要がありました。

## 準備

synapse側の準備をしておきます。

[サーバーレス Apache Spark プールを作成する](https://learn.microsoft.com/ja-jp/azure/synapse-analytics/get-started-analyze-spark#create-a-serverless-apache-spark-pool) を参考にSpark Poolを作成しておきます。

![2023-01-27-08-30-25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/467ec2fb-1b66-5d4f-07e5-9567820621ce.png)


notebookを作成します。どんな内容でもいいですが、今回はナレッジセンターから Azure Open Datasets を利用するサンプルを使います。

![2023-01-27-08-26-43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/5e72579d-1d89-4312-cf55-7522f5483ffe.png)

![2023-01-27-08-27-41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/6fb76e28-a79c-7f4c-bdeb-fac7ba344dec.png)

![2023-01-27-08-27-55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/98f8b4d4-d8c4-18af-85eb-cf38957c3e23.png)

![2023-01-27-08-28-08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/30331169-2b8e-2e6d-22db-0ef6b3243845.png)

![2023-01-27-08-28-46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/5fbdd89e-5eb5-7729-502c-a5cf7808e7df.png)


今回は Data Factory からnotebookを実行するわけですが、その際にdata lakeへの読み書きはData Factory の権限で実行されます。
必要に応じて、利用するストレージにData Factory に ストレージ Blob データ共同作成者などの権限を振ります。

![2023-01-27-09-28-03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/f829d0a8-c39f-30fa-542d-fed457998cd1.png)


Synapse Workspace の権限で実行したい場合はマネージドIDを利用したSpark Session 構成をするのですが、ADF からの実行ではうまくいきませんでした。

![2023-01-27-09-19-41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/c67007d5-af76-19c9-bdde-2be898ebc7b2.png)


## 手順

### Data Factory からの接続の構成

冒頭のURLの手順に従います。

1.Synapse Studio 上で Data Factory を Synapse コンピューティングオペレーター、および、成果物ユーザーロールに追加します。

![2023-01-27-09-04-59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/216ad337-742e-933a-9b52-f82cc1cb0c47.png)

2.Data Factory Studio上でリンクサービスを作成します。

リンクサービスのタブをコンピューティングに変更すると Azure Synapse Analytics が表示されます。

![2023-01-27-08-31-42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/20df7a56-8e64-e72e-2d98-5a225fb3d0db.png)


ワークスペースを選択して作成します。

![2023-01-27-08-34-48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/65136c4d-5522-1d3b-273f-c34b18373139.png)


作成完了したら発行しておきます。

![2023-01-27-08-35-38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/47784edb-ee49-dc08-3dc8-f573e4f7b62c.png)


### Synapse Workspace が パブリックの場合（Azure サービスを許可する状態も含む）

このように、 Synapse Workspace にファイアウォールがかかっていないような状況でのテストからはじめてみます。


![2023-01-27-09-12-52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/5240bcd0-516d-5f4a-8a9f-8c3bb10b2515.png)


1.パイプラインを構成します。

ノートブックアクティビティを配置します。

![2023-01-27-08-36-03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/203ad190-76b7-0a50-417b-21f2d124be8d.png)


配置後、対象ノートブックのあるワークスペースを設定し、

![2023-01-27-08-36-35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/6d00d66a-7010-2226-17ed-cc5779740fc4.png)

現時点だと一覧がうまく読み込めませんでしたが、動的なコンテンツの追加から直接入力することにします

![2023-01-27-08-57-59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/216fb8e7-b5b9-6d13-160a-be482a27047a.png)


ノートブック名を入力し、あとは省略してしまいます。ちなみに開くをクリックすると Synapse Studio 別タブで開きました

![2023-01-27-08-59-19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/74642ba8-0e18-b467-7597-ed60eec2c894.png)


2.実行確認します。

デバッグ実行してみます。Spark Pool の起動に数分かかるはずです。

![2023-01-27-09-56-54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/86a4adfc-2301-7aed-8c74-871727ad4df2.png)



Synapse Studio からはApache Spark アプリケーションの実行が確認できます。

![2023-01-27-09-57-36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/3d0c8983-0b27-9270-7d7b-fa782703b339.png)


成功しました。

![2023-01-27-10-10-40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/b9a6463f-a2bf-9d1f-ebf8-abf3643b0e79.png)



### Synapse Workspace が ファイアウォール設定済

ここから少し実践的に Synapse Workspace にファイアウォール設定をします。私のクライアントIPからしか接続できなくしました。


![2023-01-27-09-58-39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/d0d18d47-5cdf-7587-39f4-1cee04e1b915.png)



そのまま実行するとエラーになります。Data Factory が接続に利用するAzure統合ランタイムはIPが特定できないためです。


![2023-01-27-10-04-35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/1bdbcb5f-d5e3-d9d6-12b9-f66b68942eef.png)


結論から言うと、現時点では、セルフホステッド統合ランタイムおよびManaged Vnetの利用はできませんでした。

セルフホステッド統合ランタイムはリンクサービス内で候補になりません。

![2023-01-27-10-38-36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/a4f76c6f-550a-33aa-a71c-37f345d1da03.png)


後者の[Managed Vnet](https://learn.microsoft.com/ja-jp/azure/data-factory/managed-virtual-network-private-endpoint) の利用を試してみます。

1.Managed Vnet Azure IRを構成する

Data Factory 上で 新しい統合ランタイムをセットアップします。

![2023-01-27-10-00-04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/f202e026-da99-9032-5f2e-2e532a1325f5.png)


Azureを選択

![2023-01-27-10-00-19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/72d559ed-cc83-e3a7-7985-e423f863ecf1.png)


仮想ネットワークを有効化

![2023-01-27-10-00-37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/fb2786ed-4acd-6617-5cf4-6cff17c99597.png)


作成

![2023-01-27-10-00-54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/67a5a5b1-5051-b0bb-56f7-32ee91f54a7c.png)


2.マネージドプライベートエンドポイントを作成します。

![2023-01-27-10-01-49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/56476a0b-88ec-f426-ab61-f1b551b89d24.png)


Synapse Analytics を選択後、サブリソースをdevで作成します。

![2023-01-27-10-02-33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/ea48cedc-602a-2472-e9a1-1b73ef428e80.png)


Azure Portal 上で Synapse Workspace からプライベートエンドポイント接続セクションにて承認します。

![2023-01-27-10-03-30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/cd3b3d1a-3924-07f1-2454-9968c9a71558.png)


コメントはなんでもよし

![2023-01-27-10-03-46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/7c6b0c98-9dc4-1e21-2b49-0e4038474ccf.png)


Data Factory 上からも承認状態の更新が確認できるまで待ちます。

![2023-01-27-10-09-54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/83a68458-1857-286f-3011-94577f68482b.png)


3.Data Factoryのリンクサービスで統合ランタイムを先ほど作成したものに変更します。

![2023-01-27-10-05-49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/ca07c9d2-6f1b-e5e5-a451-221e55077ae3.png)


4.実行します。

が、失敗します。

![2023-01-27-10-20-09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/0388f1e8-a937-423f-6aca-7a495c74e913.png)


現時点では Azure Synapse Analytics (Artifacts)のリンクサービスはManaged Private Endpointに対応していないようでした。（対応していれば、マネージドプライベートエンドポイントの情報が出ます。）

![2023-01-27-10-19-36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/a9162902-fcc9-626f-829f-10288a8b18d9.png)

## 所感

プライベートな Synapse Workspace への対応がまだっぽいじょうたいであることがちょっと扱いづらいので今後の更新に期待するやつですね。