Databricks アセット バンドルの開発

この記事では、Databricks アセット バンドルの開発とライフサイクルについて説明します。 Databricks アセット バンドルの一般的な情報については、「Databricks アセット バンドルとは」を参照してください。

バンドルのライフサイクル

バンドルを効果的に使用する方法を理解するには、バンドルの基本的なライフサイクルを理解する必要があります。

  1. バンドル スケルトンがプロジェクトに基づいて作成されます。
  2. バンドル プロジェクトがローカルに開発されます。 バンドルには、インフラストラクチャとワークスペースの設定 (デプロイ ターゲットなど)、Databricks リソースの設定 (ジョブやパイプラインなど)、さらにソース ファイルやその他の成果物を定義する構成ファイルが含まれています。
  3. バンドル プロジェクトが検証されます。 検証では、バンドル構成の設定とリソース定義を対応するオブジェクト スキーマに照らして検証し、バンドルが Databricks にデプロイ可能であることを確認します。
  4. バンドルがターゲット ワークスペースにデプロイされます。 バンドルがまずテストのためにユーザーの個人用開発ワークスペースにデプロイされるのが、最も一般的です。 バンドルのテストが完了したら、バンドルをステージング、次に運用ターゲットにデプロイできます。
  5. デプロイされたバンドルで定義されているワークフロー リソースを実行できます。 たとえば、ジョブを実行できます。
  6. バンドルが使用されなくなったら、完全に破棄できます。

この後のセクションで説明するように、バンドルを作成、検証、デプロイ、実行、破棄するには Databricks CLI バンドル コマンドを使用します。

手順 1: バンドルを作成する

バンドルの作成を始めるには、次の 3 つの方法があります。

  1. 既定のバンドル テンプレートを使用する。
  2. カスタム バンドル テンプレートを使用する。
  3. バンドルを手動で作成します。

既定のバンドル テンプレートを使用する

Azure Databricks の既定のバンドル テンプレートを使用して、さらにカスタマイズできるスターター バンドルを作成するには、Databricks CLI バージョン 0.218.0 以降を使用して bundle init コマンドを実行します。これにより、使用可能なテンプレートの一覧から選択できます。 「プロジェクト テンプレートからバンドルを作成する」を参照してください。

databricks bundle init

databricks/cli および databricks/mlops-stacks Github パブリック リポジトリで、既定のバンドル テンプレートのソースを表示できます。

手順 2: バンドル構成ファイルの内容を指定する」に進みます。

カスタム バンドル テンプレートを使用する

Azure Databricks の既定のバンドル テンプレート以外のバンドル テンプレートを使用するには、ローカル パスまたはリモート バンドル テンプレートの場所への URL がわかっている必要があります。 Databricks CLI バージョン 0.218.0 以降を使って、次のように bundle init コマンドを実行します。

databricks bundle init <project-template-local-path-or-url>

このコマンドについて詳しくは、「Databricks アセット バンドル プロジェクト テンプレート」をご覧ください。 特定のバンドル テンプレートについては、バンドル テンプレート プロバイダーのドキュメントをご覧ください。

手順 2: バンドル構成ファイルの内容を指定する」に進みます。

バンドルを手動で作成する

バンドル テンプレートを使用せずに手動でバンドルを作成するには、ローカル コンピューター上にプロジェクト ディレクトリ、またはサード パーティの Git プロバイダーを使用して空のリポジトリを作成します。

ディレクトリまたはリポジトリで、入力として 1 つ以上のバンドル構成ファイルを作成します。 これらのファイルは YAML 形式で表されます。 databricks.yml という名前のバンドル構成ファイルが少なくとも 1 つ (唯一のファイルでもある) 含まれている必要があります。 追加のバンドル構成ファイルは、databricks.yml ファイルの include マッピングで参照する必要があります。

Databricks のアセット バンドル構成構文に準拠した YAML ファイルをもっと簡単に速く作成するには、次のように YAML ファイルおよび JSON スキーマ ファイルのサポートを提供する Visual Studio CodePyCharm Professional、またはIntelliJ IDEA Ultimate などのツールを使用できます:

Visual Studio Code

  1. Visual Studio Code Marketplace から YAML 拡張機能をインストールするなどして、Visual Studio Code に YAML 言語サーバーのサポートを追加します。

  2. Databricks CLI バージョン 0.218.0 以降を使用して bundle schema コマンドを実行し、出力を JSON ファイルにリダイレクトして、Databricks アセット バンドル構成 JSON スキーマ ファイルを生成します。 たとえば、次のように、現在のディレクトリ内で bundle_config_schema.json という名前のファイルを生成します。

    databricks bundle schema > bundle_config_schema.json
    
  3. Visual Studio Code を使用し、現在のディレクトリ内にバンドル構成ファイルを作成するか、開きます。 このファイルの名前は databricks.yml である必要があります。

  4. バンドル構成ファイルの先頭に次のコメントを追加します:

    # yaml-language-server: $schema=bundle_config_schema.json
    

    Note

    前のコメントで、Databricks アセット バンドル構成 JSON スキーマ ファイルが別のパスにある場合は、bundle_config_schema.json をスキーマ ファイルへの完全パスに置き換えます。

  5. 前に追加した YAML 言語サーバー機能を使用します。 詳細については、YAML 言語サーバーのドキュメントを参照してください。

PyCharm Professional

  1. Databricks CLI バージョン 0.218.0 以降を使用して bundle schema コマンドを実行し、出力を JSON ファイルにリダイレクトして、Databricks アセット バンドル構成 JSON スキーマ ファイルを生成します。 たとえば、次のように、現在のディレクトリ内で bundle_config_schema.json という名前のファイルを生成します。

    databricks bundle schema > bundle_config_schema.json
    
  2. バンドル構成 JSON スキーマ ファイルが認識されるように PyCharm を構成し、「Configure a custom JSON schema (カスタム JSON スキーマを構成する)」の手順に従って、JSON スキーマ マッピングを完了します。

  3. PyCharm を使用してバンドル構成ファイルを作成かるか、開きます。 このファイルの名前は databricks.yml である必要があります。 入力すると、PyCharm により JSON スキーマの構文と書式設定がチェックされ、コード補完のヒントが提供されます。

IntelliJ IDEA Ultimate

  1. Databricks CLI バージョン 0.218.0 以降を使用して bundle schema コマンドを実行し、出力を JSON ファイルにリダイレクトして、Databricks アセット バンドル構成 JSON スキーマ ファイルを生成します。 たとえば、次のように、現在のディレクトリ内で bundle_config_schema.json という名前のファイルを生成します。

    databricks bundle schema > bundle_config_schema.json
    
  2. バンドル構成 JSON スキーマ ファイルが認識されるように IntelliJ IDEA を構成し、「カスタム JSON スキーマを構成する」の手順に従って、JSON スキーマ マッピングを完了します。

  3. IntelliJ IDEA を使用してバンドル構成ファイルを作成かるか、開きます。 このファイルの名前は databricks.yml である必要があります。 入力すると、IntelliJ IDEA により JSON スキーマの構文と書式設定がチェックされ、コード補完のヒントが提供されます。

手順 2: バンドル構成ファイルを設定する

バンドル構成ファイルでは、ワークスペースの詳細、成果物の名前、ファイルの場所、ジョブの詳細、パイプラインの詳細などの設定を指定して、Azure Databricks ワークフローを定義します。 通常、バンドル構成には、開発、ステージング、運用のデプロイ ターゲットも含まれます。 バンドル構成ファイルの詳細については、「Databricks アセット バンドルの構成」を参照してください。

bundle generate コマンドを使ってワークスペース内の既存のリソースのバンドル構成を自動生成し、その後、bundle deployment bind を使ってそのバンドル構成をワークスペース内のリソースにリンクして、それらを同期状態に維持できます。「バンドル構成ファイルを生成する」および「バンドル リソースをバインドする」を参照してください。

手順 3: バンドル構成ファイルを検証する

成果物のデプロイ、またはジョブまたはパイプラインの実行の前に、バンドル構成ファイル内の定義が有効であるか検証する必要があります。 これを行うには、バンドル プロジェクトのルート ディレクトリから bundle validate コマンドを実行します。 「バンドルを検証する」を参照してください。

databricks bundle validate

検証が成功すると、バンドル ID のサマリーと確認メッセージが返されます。 スキーマを出力するには、databricks bundle schema コマンドを使用します。 「バンドル構成スキーマを表示する」を参照してください。

手順 4: バンドルをデプロイする

バンドルをデプロイする前に、リモート ワークスペースでワークスペース ファイルが有効になっていることを確認します。 「ワークスペース ファイルとは」を参照してください。

バンドルをリモート ワークスペースにデプロイするには、「バンドルをデプロイする」に説明されているように、バンドル ルートから bundle deploy コマンドを実行します。 Databricks CLI では、バンドル構成ファイル内で宣言されているターゲット ワークスペースにデプロイします。 「targets」を参照してください。

databricks bundle deploy

バンドルの一意の ID は、その名前、ターゲット、デプロイ元の ID によって定義されます。 これらの属性が異なるバンドル間で同一である場合、これらのバンドルのデプロイは相互に干渉します。 詳細については、「バンドルをデプロイする」を参照してください。

ヒント

BUNDLE_ROOT 環境変数を設定すると、バンドル ルートの外部で databricks bundle コマンドを実行できます。 この環境変数が設定されていない場合、databricks bundle コマンドは現在の作業ディレクトリ内を検索してバンドル ルートを見つけようとします。

手順 5: バンドルを実行する

特定のジョブまたはパイプラインを実行するには、「バンドルを実行する」に説明されているように、バンドル構成ファイル内で宣言されているジョブまたはパイプライン キーを指定して、バンドル ルートから bundle run コマンドを実行します。 リソース キーは、リソースの YAML ブロックの最上位レベルの要素です。 ジョブまたはパイプライン キーを指定しない場合は、使用可能なリソースの一覧から、実行するリソースを選択するように求められます。 -t オプションを指定しないと、バンドル構成ファイル内で宣言されている既定のターゲットが使われます。 たとえば、既定のターゲットのコンテキスト内でキー hello_job を指定してジョブを実行するには、次のようにします。

databricks bundle run hello_job

dev という名前で宣言されたターゲットのコンテキスト内で、キー hello_job を指定してジョブを実行するには、次のようにします。

databricks bundle run -t dev hello_job

手順 6: バンドルを破棄する

バンドルを使い終えて、以前にデプロイされたジョブ、パイプライン、成果物を削除する場合は、バンドル ルートから bundle destroy コマンドを実行します。 このコマンドで、バンドル構成ファイルに定義されている、以前にデプロイされたジョブ、パイプライン、成果物をすべて削除します。 「バンドルを破棄する」を参照してください。

databricks bundle destroy

既定では、以前にデプロイされたジョブ、パイプライン、成果物の完全な削除を確認するメッセージが表示されます。 これらのプロンプトをスキップし、自動的に完全削除を実行するには、--auto-approve オプションを bundle destroy コマンドに追加します。