Azure DatabricksのドライバーノードへのSSH接続

ドライバーノードのシェルにアクセスするには、こちらに紹介されているWebターミナルを使うのが簡単ですが、ローカルマシンからSSH接続したいというケースもあるかと思います。

https://qiita.com/maroon-db/items/01c96016d0961358ccfb

今回初めてやってみたら意外に難しかったのでまとめます。以下の前提をクリアしなくてはなりません。

- ワークスペースのデプロイで[VNetインジェクション](https://learn.microsoft.com/ja-jp/azure/databricks/security/network/classic/vnet-inject)が使用されている
- ワークスペースのデプロイで[Secure Cluster Connectivity](https://learn.microsoft.com/ja-jp/azure/databricks/security/network/classic/secure-cluster-connectivity)を使ってはいけない(パブリックIPが必要)
- 接続元マシンからクラスターへのポート2200での通信が許可されている

手順はこちらにあるので、これに沿って設定していきます。

https://kb.databricks.com/clusters/azure-ssh-cluster-driver-node

いつもはデフォルト設定でワークスペースを作成していましたが、SSH接続をする際には設定を変えなくてはなりません。[マニュアル](https://learn.microsoft.com/ja-jp/azure/databricks/compute/configure#--ssh-access-to-compute
)にあるように、SSH接続を有効にするには、ワークスペースが独自の [Azure 仮想ネットワーク](https://learn.microsoft.com/ja-jp/azure/databricks/security/network/classic/vnet-inject)にデプロイされている場合にのみ有効にできます。すなわち、VNetインジェクションを用いてワークスペースをデプロイしなくてはなりません。知りませんでした。

作成時のネットワーク設定に関してはこちらが詳しかったです。ありがとうございます。

https://qiita.com/samskeyti/items/08985ba910fae726124e

# VNetの作成

上の記事とこちらを参考に仮想ネットワークを作成します。

https://learn.microsoft.com/ja-jp/azure/databricks/security/network/classic/vnet-inject

リソースグループ、リージョン、名前をつけて、IPアドレスを設定します。CIDRは`10.0.0.0/24`の最小構成にします。defaultサブネットは削除します。
![Screenshot 2024-08-21 at 14.01.52.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/95a509d1-5ccc-0ee2-64a4-fdda18fd9f32.jpeg)

# Azure Databricksワークスペースのデプロイ

名前とリソースグループ、リージョンを設定した後にネットワークの設定を行いますが、ここで**自分の仮想ネットワーク(VNet)にAzure Databricksワークスペースをデプロイします**で**はい**に変更します。これでVNetインジェクションを用いたデプロイメントを選択したことになります。一方で、**Secure Cluster Connectivity による Azure Databricks ワークスペースのデプロイ (パブリック IP なし)**は**いいえ**のままとします。そうしないと、パブリックIPがクラスターに割り振られないので、ローカルマシンからSSH接続できません。

![Screenshot 2024-08-21 at 14.21.01.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/581c9060-2527-512a-2706-a43654660880.jpeg)

上のステップで作成したVirtual Networkを選択し、パブリックサブネットとプライベートサブネットの名前とCIDRを指定します。VNetのCIDRを2分割します。アドレス空間と作成できるクラスターのノード数の関係は[こちら](https://learn.microsoft.com/ja-jp/azure/databricks/security/network/classic/vnet-inject#--address-space-and-maximum-cluster-nodes)をご覧ください。

# SSHの設定

## ネットワークセキュリティグループの設定

デフォルトでは、クラスターへのSSH接続に用いるポート2200への通信が許可されていませんので、[こちらの手順](https://kb.databricks.com/clusters/azure-ssh-cluster-driver-node)に従ってネットワークセキュリティグループで許可します。

1. 作成したVNetにアクセスし、**サブネット**を開きます。
![Screenshot 2024-08-21 at 15.01.07.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/1a93d115-332f-d3b3-4482-cc33c05a90d3.jpeg)
1. パブリックサブネットを選択し、ネットワークセキュリティグループの名前をメモしておきます。
1. Azure Portalから**ネットワークセキュリティグループ**にアクセスし、上でメモしたネットワークセキュリティグループにアクセスします。
1. **設定 > 受信セキュリティ規則**にアクセスし、ポート2200の通信を許可する規則を追加します。
![Screenshot 2024-08-21 at 14.44.45.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/e04e8278-90d9-4adb-9e6e-5c15e0ecb926.jpeg)
![Screenshot 2024-08-21 at 14.45.00.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/897d1c56-977d-ea97-c8fa-8af79d7b3f0d.jpeg)

## SSHキーペアの作成

SSHでアクセスするローカルマシンで、ターミナルから以下を実行します。パスフレーズは設定していません。

```sh
ssh-keygen -t rsa -b 4096 -C "コメント(メールアドレスなど)"
```
```
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/yayoi/.ssh/id_rsa): 
```
```
Your identification has been saved in /Users/yayoi/.ssh/id_rsa
Your public key has been saved in /Users/yayoi/.ssh/id_rsa.pub
```

## クラスターに公開キーを設定

1. アクセスするクラスターの**高度なオプション > SSH**にアクセスします。なお、VNetインジェクションを使っていることと、Secure Cluster Connectivityを使っていないという2つの条件を満たさない限り、こちらのSSHタブは表示されません。
1. 上で作成した公開キー(public key)をボックスに貼り付けます。
![Screenshot 2024-08-21 at 15.07.51.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/8cbe7f0b-7fd0-5ad5-1c1b-0ecf7073c761.jpeg)
1. 上に表示されている**ドライバーのホスト名**をコピーしておきます。

# SSH接続

ローカルマシンのターミナルで以下を実行します。

```sh
ssh ubuntu@<ドライバーのホスト名> -p 2200 -i <秘密キーのファイルへのパス>
```
私の場合は以下のようになりました。

```sh
ssh ubuntu@48.218.72.175 -p 2200 -i /Users/yayoi/.ssh/id_rsa
```

うまくいけば以下のようになり、ドライバーノードのシェルにアクセスできます。
![Screenshot 2024-08-21 at 14.45.52.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/f94baeee-d8f3-1f52-f09e-8b045e453c45.jpeg)

### はじめてのDatabricks

[はじめてのDatabricks](https://qiita.com/taka_yayoi/items/8dc72d083edb879a5e5d)

### Databricks無料トライアル

[Databricks無料トライアル](https://databricks.com/jp/try-databricks)