ドライバーノードのシェルにアクセスするには、こちらに紹介されているWebターミナルを使うのが簡単ですが、ローカルマシンからSSH接続したいというケースもあるかと思います。
今回初めてやってみたら意外に難しかったのでまとめます。以下の前提をクリアしなくてはなりません。
- ワークスペースのデプロイでVNetインジェクションが使用されている
- ワークスペースのデプロイでSecure Cluster Connectivityを使ってはいけない(パブリックIPが必要)
- 接続元マシンからクラスターへのポート2200での通信が許可されている
手順はこちらにあるので、これに沿って設定していきます。
いつもはデフォルト設定でワークスペースを作成していましたが、SSH接続をする際には設定を変えなくてはなりません。マニュアルにあるように、SSH接続を有効にするには、ワークスペースが独自の Azure 仮想ネットワークにデプロイされている場合にのみ有効にできます。すなわち、VNetインジェクションを用いてワークスペースをデプロイしなくてはなりません。知りませんでした。
作成時のネットワーク設定に関してはこちらが詳しかったです。ありがとうございます。
VNetの作成
上の記事とこちらを参考に仮想ネットワークを作成します。
リソースグループ、リージョン、名前をつけて、IPアドレスを設定します。CIDRは10.0.0.0/24
の最小構成にします。defaultサブネットは削除します。
Azure Databricksワークスペースのデプロイ
名前とリソースグループ、リージョンを設定した後にネットワークの設定を行いますが、ここで自分の仮想ネットワーク(VNet)にAzure Databricksワークスペースをデプロイしますではいに変更します。これでVNetインジェクションを用いたデプロイメントを選択したことになります。一方で、Secure Cluster Connectivity による Azure Databricks ワークスペースのデプロイ (パブリック IP なし)はいいえのままとします。そうしないと、パブリックIPがクラスターに割り振られないので、ローカルマシンからSSH接続できません。
上のステップで作成したVirtual Networkを選択し、パブリックサブネットとプライベートサブネットの名前とCIDRを指定します。VNetのCIDRを2分割します。アドレス空間と作成できるクラスターのノード数の関係はこちらをご覧ください。
SSHの設定
ネットワークセキュリティグループの設定
デフォルトでは、クラスターへのSSH接続に用いるポート2200への通信が許可されていませんので、こちらの手順に従ってネットワークセキュリティグループで許可します。
- 作成したVNetにアクセスし、サブネットを開きます。
- パブリックサブネットを選択し、ネットワークセキュリティグループの名前をメモしておきます。
- Azure Portalからネットワークセキュリティグループにアクセスし、上でメモしたネットワークセキュリティグループにアクセスします。
-
設定 > 受信セキュリティ規則にアクセスし、ポート2200の通信を許可する規則を追加します。
SSHキーペアの作成
SSHでアクセスするローカルマシンで、ターミナルから以下を実行します。パスフレーズは設定していません。
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
クラスターに公開キーを設定
- アクセスするクラスターの高度なオプション > SSHにアクセスします。なお、VNetインジェクションを使っていることと、Secure Cluster Connectivityを使っていないという2つの条件を満たさない限り、こちらのSSHタブは表示されません。
- 上で作成した公開キー(public key)をボックスに貼り付けます。
- 上に表示されているドライバーのホスト名をコピーしておきます。
SSH接続
ローカルマシンのターミナルで以下を実行します。
ssh ubuntu@<ドライバーのホスト名> -p 2200 -i <秘密キーのファイルへのパス>
私の場合は以下のようになりました。
ssh ubuntu@48.218.72.175 -p 2200 -i /Users/yayoi/.ssh/id_rsa
うまくいけば以下のようになり、ドライバーノードのシェルにアクセスできます。