次の方法で共有


Databricks SSH トンネル

Important

Databricks SSH トンネルは ベータ版です

Databricks SSH トンネルを使用すると、IDE を Databricks コンピューティングに接続できます。 セットアップは簡単で、クラスターで対話形式でコードを実行およびデバッグし、環境の不一致を減らし、Databricks ワークスペース内のすべてのコードとデータをセキュリティで保護します。

Requirements

SSH トンネルを使用するには、次のものが必要です。

  • Databricks CLI バージョン 0.269 以降がローカル コンピューターにインストールされ、認証が構成されています。 「 インストール」を参照してください。
  • 専用 (シングル ユーザー) アクセス モードで Databricks ワークスペースで計算します。 専用コンピューティングの概要を参照してください。
    • コンピューティングでは、Databricks Runtime 17.0 以降を使用している必要があります。
    • Unity カタログを有効にする必要があります。
    • コンピューティング ポリシーが存在する場合は、ジョブの実行を禁止してはなりません。

SSH トンネルを設定する

まず、 databricks ssh setup コマンドを使用して SSH トンネルを設定します。 <connection-name>をトンネルの名前 (例: my-tunnel) に置き換えます。

databricks ssh setup --name <connection-name>

CLI でクラスターの選択を求めるメッセージが表示されるか、 --cluster <cluster-id>渡してクラスター ID を指定できます。

IntelliJ の場合、Databricks では、セットアップ コマンドに –-auto-start-cluster=false を含める必要があります。 JetBrains IDE を起動すると、すべてのクラスターが自動的に起動され、意図しないコンピューティング コストが発生する可能性があります。 このオプションを設定した場合、SSH トンネルを開始するには、ワークスペースでクラスターを開始する必要があります。

Databricks に接続する

次に、IDE またはターミナルを使用して Databricks に接続します。

Visual Studio Code または Cursor を使用して接続する

  1. Visual Studio Code の場合は、 リモート SSH 拡張機能をインストールします。 カーソルにはリモート SSH 拡張機能が含まれています。

  2. IDE のメイン メニューで、[表示]>[コマンド パレット]をクリックします。 [Remote-SSH: Settings]\(リモート SSH: 設定\) を選択します。 または、[ Preferences: Open User Settings (JSON)] を選択して、 settings.json を直接変更します。

  3. Remote.SSH: 既定の拡張機能 (またはremote.SSH.defaultExtensionssettings.json) で、ms-Python.Pythonms-toolsai.jupyterを追加します。

    settings.jsonを変更する場合:

    "remote.SSH.defaultExtensions": [
        "ms-Python.Python",
        "ms-toolsai.jupyter"
    ]
    

    必要に応じて、Remote.SSH: Connect Timeout (または remote.SSH.connectTimeoutsettings.json) の値を大きくして、タイムアウト エラーの可能性をさらに減らします。 既定のタイムアウトは 360 です。

  4. コマンド パレットで、[ Remote-SSH: Connect to Host]\(リモート SSH: ホストに接続\) を選択します。

  5. ドロップダウンから、最初の手順で設定したトンネルを選択します。 IDE は新しいウィンドウで接続を続行します。

    コンピュートが実行されていない場合は、起動されます。 ただし、コンピューティングの開始にタイムアウトより長い時間がかかる場合、SSH 接続の試行は失敗します。

  6. サーバーの種類の入力を求められたら 、Linux を選択します。

IntelliJ IDE を使用して接続する

  1. リモート開発チュートリアルに従ってセットアップします。

  2. 新しい接続画面で、次のように入力します。

    Username: rootHost:<connection-name>

ターミナルを使用して接続する

コマンド ラインから Databricks に接続するには、 ssh コマンドに接続の名前を指定します。次に例を示します。

ssh my-tunnel

プロジェクトを開く

  1. 最初の接続では、フォルダーを開かずに空の IDE ウィンドウが開きます。 Visual Studio Code で、コマンド パレットから [フォルダーを開く] コマンドを使用して、目的のプロジェクトを開きます。
  2. 永続ストレージにはワークスペース マウント (/Workspace/Users/<your-username>) を使用します。

コードの実行 (Visual Studio Code)

  • Python プロジェクトを開くと、Python 拡張機能は仮想環境を自動的に検出できますが、適切な環境を手動でアクティブ化する必要があります。 コマンド パレットからインタープリター コマンドを選択し、環境pythonEnv-xxxを選択します。 これにより、すべての組み込みの Databricks ランタイム ライブラリ、または クラスターにグローバルにインストールしたものにアクセスできます。
  • Python 拡張機能では、Python プロジェクトとして認識できないフォルダーを開いた場合など、仮想環境 (venv) を自動的に検出できない場合があります。 この問題を解決するには、ターミナルを開いて echo $DATABRICKS_VIRTUAL_ENVを実行し、パスをコピーして Python の [インタープリターの選択 ] コマンドで使用します。

venv を選択すると、Python または Jupyter 拡張機能によって提供される通常の実行またはデバッグ アクションを使用して、Python ファイルまたはノートブックを実行できます。

Python の依存関係を管理する

必要な依存関係をインストールする最も簡単な方法は、ワークスペース UI を使用することです。 コンピュート範囲ライブラリを参照してください。 この方法では、クラスターの依存関係をグローバルにインストールします。 クラスターが再起動されるたびにライブラリを再インストールする必要はありません。

ただし、特定のプロジェクトにスコープを設定するプログラムを使用する場合は、 ノートブック スコープのインストールを使用します。

プロジェクト専用のセットアップ用ノートブック

特定のプロジェクトの依存関係を管理するには:

  1. プロジェクトに setup.ipynb ファイルを作成します。

  2. ssh CLI は Python 環境 (pythonEnv-xxx) を作成します。この環境には、Databricks ランタイム ライブラリまたは コンピューティング スコープ ライブラリが既に組み込まれています。 ノートブックをこの pythonEnv-xxx 環境にアタッチします。

  3. %pip install コマンドを使用して依存関係をインストールします。

    • %pip install . pyproject.tomlがある場合 (%pip install .<group>を使ってスコープを絞る場合)
    • %pip install -r dependencies.txt お持ちの場合 dependencies.txt
    • カスタム ライブラリをホイールとして作成してアップロードした場合、%pip install /Volumes/your/wheel.whl (または /Workspace パス)

    %pip コマンドには、追加のガードレールを備えた Databricks 固有のロジックがあります。 また、このロジックにより、接続先のドライバー ノードだけでなく、すべての Spark Executor ノードで依存関係を使用できるようになります。 これにより、カスタム依存関係を持つユーザー定義関数 (UDF) が有効になります。

    その他の使用例については、「%pip コマンドを使用したライブラリの管理」を参照してください。

新しい ssh セッションを確立するたびに、このノートブックを実行します。 既存の SSH セッションが削除され、10 分以内にクラスターに再接続された場合、依存関係を再インストールする必要はありません。 (時間は、ローカル ssh 構成の -shutdown-delay=10m オプションを使用して構成できます)。

複数の ssh セッションが同じクラスターに同時に接続されている場合は、同じ仮想環境が使用されます。

制限事項

Databricks SSH トンネルには、次の制限があります。

  • Visual Studio Code 用の Databricks 拡張機能と Databricks SSH トンネルはまだ互換性がありません。また、一緒に使用しないでください。
  • Databricks ワークスペース UI を使用してワークスペースに作成した Git フォルダー は、Git CLI と IDE Git 統合によって Git リポジトリとして認識されません。これらのフォルダーには .git メタデータがないためです。 この問題を回避するには、「 SSH トンネルで Git を使用する方法」を参照してください。
  • 接続先のクラスター上のホームマウントとルートマウントはエフェメラルです。 クラスターの再起動時に、クラスター上のコンテンツは保持されません。

Databricks Notebook の違い

SSH トンネルを使用する場合、ノートブックにはいくつかの違いがあります。

  • Python ファイルでは、Databricks グローバル ( sparkdbutilsなど) は定義されません。 from databricks.sdk.runtime import sparkを使用して明示的にインポートする必要があります。
  • ipynb ノートブックの場合、次の機能を使用できます。
    • Databricks グローバル: displaydisplayHTMLdbutilstablesqludfgetArgumentscsqlContextspark
    • %sql SQL セルを実行するマジック コマンド

Python ソースコード「notebooks」を使用するには:

  • jupyter.interactiveWindow.cellMarker.codeRegexを検索して、それに設定します。

    ^# COMMAND ----------|^# Databricks notebook source|^(#\\s*%%|#\\s*\\<codecell\\>|#\\s*In\\[\\d*?\\]|#\\s*In\\[ \\])
    
  • jupyter.interactiveWindow.cellMarker.defaultを検索して、それに設定します。

    # COMMAND ----------
    

トラブルシューティング

このセクションには、一般的な問題の解決に関する情報が含まれています。

SSH 接続が失敗するかタイムアウトする

  • 停止または開始するだけでなく、クラスターが Databricks UI で実行されていることを確認します。
  • 送信ポート 22 が開き、ラップトップ/ネットワーク/VPN で許可されていることを確認します。
  • IDE で SSH 接続のタイムアウトを増やします。 Visual Studio Code またはカーソルを使用した接続を参照してください。
  • 公開キーまたは秘密キーの不一致エラーが表示された場合は、 ~/.databricks/ssh-tunnel-keys フォルダーを削除してみてください。
  • "リモート ホスト ID が変更されました" というエラーが表示された場合は、 ~/.ssh/known_hosts ファイルを確認し、クラスターに関連するエントリを削除します。
  • SSH セッションが 1 時間後に削除された場合、これは既知の制限です。 制限事項を参照してください。
  • 1 つのクラスターに対して許可される SSH 接続は 10 個以下です。

CLI 認証エラー

  • Databricks CLI プロファイルが有効で認証されていることを確認します (databricks auth login)。
  • CAN MANAGEなど、適切なクラスターアクセス許可があることを確認します。

クラスターの再起動後にファイルが消えたり、環境がリセットされたりする

  • /Workspace/Volumes、および/dbfsマウントのみが永続的です。 再起動後、 /home/rootなどのデータはすべて消去されます。
  • 永続的な依存関係にはクラスター ライブラリ管理を使用します。 必要に応じて、init スクリプトを使用して再インストールを自動化します。 initスクリプトとは何かについては、を参照してください。

IDE で "Git リポジトリではありません" エラーまたは Git 機能が見つからない

Git は、ターミナルを使用して /Workspace/Users/<your-username> に複製する場合にのみ機能します。 Web で作成されたフォルダーには .git メタデータがありません。 SSH トンネルで Git を使用する方法を参照してください。

コードが機能しない

  • すべての Databricks ランタイム依存関係にアクセスできる適切な Python インタープリターを選択してください。
    • Python プロジェクトを開くと、Python 拡張機能は仮想環境を自動的に検出できますが、適切な環境を手動でアクティブ化する必要があります。 Python の実行 : インタープリター コマンドを選択し、 pythonEnv-xxx 環境を 選択します。 すべての組み込みの Databricks ランタイム ライブラリ、または クラスターにグローバルにインストールしたあらゆるものにアクセスできます。
    • Python 拡張機能では、Python プロジェクトとして認識できないフォルダーを開いた場合など、仮想環境を自動的に検出できない場合があります。 ターミナルを開いて echo $DATABRICKS_VIRTUAL_ENV実行し、パスをコピーして Python の [インタープリターの選択 ] コマンドで使用できます。
  • IPYNB ノートブックと *.py Databricks ノートブックは Databricks グローバルにアクセスできますが、Python *.py ファイルにはアクセスできません。 Databricks Notebook の違いを参照してください。

WSL の下のウィンドウで SSH 接続をセットアップできない

Databricks では、Windows で ssh セットアップを直接実行することをお勧めします。 WSL 側で設定した後、Windows バージョンの Visual Studio Code を使用すると、必要な ssh 構成が見つかりません。

FAQ

コードとデータはどのように保護されますか?

すべてのコードは、Databricks クラウド仮想プライベート クラウド (VPC) 内で実行されます。 セキュリティで保護された環境にデータやコードが残っていません。 SSH トラフィックは完全に暗号化されます。

どの IDE がサポートされていますか?

Visual Studio Code と Cursor は正式にサポートされていますが、Databricks SSH トンネルは、SSH 機能を備えた任意の IDE と互換性があります。

すべての Databricks ノートブック機能は IDE から利用できますか?

display()dbutils%sqlなどの一部の機能は、制限付きで、または手動で設定できます。 Databricks Notebook の違いを参照してください。

複数のユーザーが同じクラスターで一度に開発できますか?

No.

SSH Tunnel 経由で接続すると、クラスターは自動的に開始されますか?

はい。ただし、クラスターの起動に接続タイムアウトよりも時間がかかる場合、接続の試行は失敗します。

クラスターが実行されているかどうかを確認するにはどうすればよいですか?

Databricks ワークスペース UI で [コンピューティング ] に移動し、クラスターの状態を確認します。 クラスターには、SSH トンネル接続が機能するために 実行中 と表示されている必要があります。

SSH/IDE セッションを切断するにはどうすればよいですか?

セッションを切断するには、IDE ウィンドウを閉じるか、IDE の [切断 ] オプションを使用するか、SSH ターミナルを閉じるか、ターミナルで exit コマンドを実行します。

SSH を切断すると、クラスターは自動的に停止しますか?

いいえ。ssh サーバーには構成可能なシャットダウン遅延があり、指定された時間 (既定では 10m、ssh config ProxyCommand で -shutdown-delay オプションを変更することで変更できます) のバックグラウンドで実行を続けます。 タイムアウト後にサーバーが終了し、クラスターのアイドル タイムアウトが開始されます (クラスターの作成時に構成します)。

不要な料金を回避するためにクラスターを停止するにはどうすればよいですか?

Databricks ワークスペース UI で [コンピューティング ] に移動し、クラスターを見つけて、[ 終了 ] または [停止] をクリックします。

永続的な依存関係を処理する方法

セッション中にインストールされた依存関係は、クラスターの再起動後に失われます。 要件とセットアップ スクリプトには永続的ストレージ (/Workspace/Users/<your-username>) を使用します。 自動化には、クラスター ライブラリまたは init スクリプトを使用します。

どのような認証方法がサポートされていますか?

認証では、Databricks CLI と ~/.databrickscfg プロファイル ファイルが使用されます。 SSH キーは、Databrick SSH トンネルによって処理されます。

クラスターから外部データベースまたはサービスに接続できますか?

はい。クラスター ネットワークで送信接続が許可され、必要なライブラリがある限りです。

追加の IDE 拡張機能を使用できますか?

ほとんどの拡張機能は、IDE とクラスターに応じて、リモート SSH セッション内にインストールされている場合に機能します。 Visual Studio Code では、既定ではリモート ホストにローカル拡張機能はインストールされません。 拡張機能パネルを開き、リモート ホストでローカル拡張機能を有効にすると、手動でインストールできます。 また、特定の拡張機能を常にリモートでインストールするように Visual Studio Code を構成することもできます。 Databricks への接続を参照してください。

SSH トンネルで Git を使用する方法

現在、Databricks ワークスペース UI を使用して作成された Git フォルダーは、IDE の Git リポジトリとして認識されません。 これを回避するには、GIT CLI を使用して SSH セッションから永続的なワークスペース フォルダーにリポジトリを複製します。

  1. ターミナルを開き、目的の親ディレクトリに移動します (例: cd /Workspace/Users/<your-username>)
  2. そのディレクトリにリポジトリを複製します。
  3. Visual Studio Code で、 code <repo-name> を実行して新しいウィンドウでこのフォルダーを開くか、UI を使用して新しいウィンドウでフォルダーを開きます。