閉域構成の Azure Databricks でコンピューティングポリシーを用いてプロキシ設定してみた

# はじめに
閉域構成の Azrure Databricks からライブラリのインストールやMLモデルのダウンロード等のインターネットへの通信をオンプレのプロキシサーバ経由とさせたい場合があるかと思います。
その際にポリシーを使用したプロキシの設定を検証してみました。
以下の記事から派生した内容となるため、 Databricks のデプロイ方法等についてはこちらをご参照ください。

https://qiita.com/satoshi_enomoto/items/71e75e75a9b28bad6a76

併せて、requirements.txtを使用したライブラリのインストールも試してみました。

## 環境変数にプロキシを設定するコンピューティングポリシーを作成
ポリシーの概要は以下の通りです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3478068/53abc501-d46c-4f42-be70-7d33f522d98d.png)

https://learn.microsoft.com/ja-jp/azure/databricks/admin/clusters/policies

今回は spark 環境変数として PROXY と NO_PROXY を設定するポリシーの定義を記載します。
PROXY だけだと、ワークスペースフォルダやボリュームにアクセスできない等の事象が発生するため、NO_PROXY も設定しておいたほうが良いかと思います。

```json:ポリシー定義
{
    "spark_env_vars.HTTP_PROXY": {
        "type": "fixed",
        "value": "http://<プロキシサーバの IP >:<ポート>"
    },
    "spark_env_vars.HTTPS_PROXY": {
        "type": "fixed",
        "value": "http://<プロキシサーバの IP >:<ポート>"
    },
    "spark_env_vars.NO_PROXY": {
        "type": "fixed",
        "value": "<ワークスペース ID >,localhost,127.0.0.1,<ワークスペースのリージョン>.azuredatabricks.net"
    }
}
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3478068/67b44f2e-bfe7-45a8-92bd-f5df0cb89087.png)

## クラスターにポリシーを適用
クラスター作成画面から、ポリシーを選択して適用します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3478068/89c97d3d-4937-4062-b2e0-89f3552dac76.png)

適用後にクラスターを再起動すると、[高度なオプション] > [Spark] > [環境変数] にポリシーで定義した内容が表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3478068/49df83ba-7314-40d9-9d39-8b7199052236.png)

ここまででプロキシの設定は完了となります。

## requirements.txt を使用したライブラリのインストール
プロキシの設定を確認するために、ライブラリのインストールを実施します。
ノートブックでのインストールは以下の記事にある、%pip install ~ で実施できます。

https://qiita.com/satoshi_enomoto/items/71e75e75a9b28bad6a76#databricks-%E3%81%A7%E3%81%AE%E3%83%97%E3%83%AD%E3%82%AD%E3%82%B7%E8%A8%AD%E5%AE%9A

ここでは ワークスペースフォルダに requirements.txt をアップロードしてライブラリをインストールする方法を紹介したいと思います。

:::note warn
注意
この方法では Databricks Runtime 15.0 以降が必要です。
ドキュメントは[こちら](https://learn.microsoft.com/ja-jp/azure/databricks/libraries/workspace-files-libraries)。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3478068/5cf7d3d2-5631-4636-ba4b-fdf2052839e7.png)

:::

### 準備
以下のような形で requirements.txt を用意して、ワークスペースにアップロードしておきます。
特定のバージョンを指定することも可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3478068/46a332c8-74fd-464f-9a78-8a8c542c22cd.png)

### インストール
プロキシを設定したクラスターを選択して、[クラスター] > [ライブラリ] > [新規をインストール]を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3478068/d3195572-d42c-4f7d-b614-4423a8555899.png)

[ワークスペース]を選択し、すでにアップロードしてある requirements.txt を選択してインストールします。（新規でアップロードすることも可能）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3478068/8549146b-7794-4030-8727-f2602a18977c.png)

クラスターを再起動して正常にインストールできると以下のようなステータスとなります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3478068/bad933be-f3d4-4959-b541-33aa1f3bd9d8.png)

以下のコードで指定したバージョンがインストールされているかを確認することができます。

```python:
%pip show <ライブラリ名> <ライブラリ名> …
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3478068/5bd1e798-4fff-4d33-a9fe-5c826b54e58f.png)

### 参考
クラスター共通でインストールさせたいライブラリがある場合は、ポリシーとして requirements.txt を設定しておくことも可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3478068/c2de58f4-5fcf-4aee-a3cb-e357cf8f0e49.png)


## おわりに
他にも必要な設定があれば、ポリシー定義に記載しておくことでユーザが使用するクラスターの管理がしやすくなるのかなと思いました。