0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

閉域構成の Azure Databricks でプロキシ設定を試してみた

Last updated at Posted at 2025-05-08

はじめに

閉域構成の Azrure Databricks からインターネットへ通信(ライブラリのインストール)する際にプロキシサーバを経由する方法を検証してみました。
構成は以下のようなイメージとなります。仮想ネットワーク vnet_spoke-01 にあるクラスターから仮想ネットワーク vnet_on-premises にあるプロキシサーバ(vm-proxy)を経由してインターネットに出るように設定していきます。

image.png

閉域構成の Azrure Databricks の作成

Azrure Databricks のデプロイについてはこちらの記事をご参照ください。
(本構成では vnet_hub 内のワークスペースへの接続用 VM は不要のため、作成しなくても問題ないです)

プロキシサーバの設定

プロキシサーバの設定についてはこちらの記事をご参照ください。

追加の設定として、プロキシサーバ(vm-proxy)のファイアウォールの受信規則の追加が必要となります。
「セキュリティが強化された Windows Defender ファイアウォール」 > 「受信の規則:Squid Cache Server」 > 「スコープ」 > 「リモートIPアドレス」 で vnet_spoke-01 のアドレス範囲(10.1.0.0/16)を追加します。
(ホストサブネットのアドレス範囲が含まれていればOKのはずです)

image.png

VNet 間接続の構成

vnet_on-premises(疑似オンプレネットワーク)と vnet_hub の接続については VPN ゲートウェイを用いた VNet 間接続で構成しました。VNet 間接続の構成およびワークスペースへの接続についてはこちらの記事をご参照ください。

仮想ネットワークのピアリング設定

Azrure Databricks における仮想ネットワークピアリングの概要は以下となります。
今回は Databricks をデプロイしている vnet_spoke-01 と vnet_hub のピアリングを設定していきます。

image.png

また、vnet_hub に VPN ゲートウェイを構成しているため、以下の手順を基に設定しました。

vnet_hub からピアリングを開き、追加を選択します。
設定値は以下の通りとなります。

image.png

image.png

正常に設定できると以下のようになります。

image.png

ここまででクラスターからプロキシサーバのネットワークが繋がったことになります。

接続確認

ノートブックでプロキシを設定したライブラリのインストールを実行すると正常に完了することが確認できます。
プロキシには vm-proxy のプライベート IP と Squid のポートを指定します。

%pip install --proxy http://<プロキシのプライベート IP>:<Squid のポート> <ライブラリ名>

image.png

Databricks でのプロキシ設定

ここではグローバル init スクリプトを使用したプロキシ設定の方法を紹介したいと思います。
以下のようにスクリプトを設定して、クラスターを再起動します。

#!/bin/bash

proxy="http://<プロキシのプライベート IP>:<Squid のポート>"

echo "export http_proxy=${proxy}" >> /databricks/spark/conf/spark-env.sh
echo "export https_proxy=${proxy}" >> /databricks/spark/conf/spark-env.sh
echo "export no_proxy=<ワークスペース ID >,localhost,127.0.0.1,<ワークスペースのリージョン>.azuredatabricks.net" >> /databricks/spark/conf/spark-env.sh

echo "export http_proxy=${proxy}" >> /etc/environment
echo "export https_proxy=${proxy}" >> /etc/environment
echo "export no_proxy=<ワークスペース ID >,localhost,127.0.0.1,<ワークスペースのリージョン>.azuredatabricks.net" >> /etc/environment

pip config set global.proxy ${proxy}

exit 0

image.png

no_proxy について
http_proxy を設定すると Databricks 内の通信もプロキシサーバを経由してしまい、クラスターが Volume や Workspace フォルダにアクセスできない事象が発生します。
そのため、Databricks 内の通信については no_proxy を設定する必要があるようです。
参考記事はこちら

以下のコードでプロキシが設定されているか確認できます。

import os

for key, value in os.environ.items():
    print(f'{key}={value}')

image.png

グローバル init で設定されているため、ライブラリのインストール時はプロキシを指定しなくても正常に完了することが確認できます。

image.png

また、インターネットへ出ていく際のグローバル IP を取得してみると、プロキシサーバ(vm-proxy)のパブリック IP が表示されます。

import requests

def get_public_ip():
    response = requests.get('https://api.ipify.org?format=json')
    ip = response.json()['ip']
    return ip

# グローバルIPアドレスを取得する
public_ip = get_public_ip()
print(public_ip)

image.png

おわりに

公式ドキュメントではグローバル init ではなく、コンピューティングポリシーまたはクラスタースコープの init が推奨されています。
コンピューティングポリシーを使用した方法は別記事で紹介したいと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?