次の方法で共有


ワークスペース データをエクスポートする

このページでは、Azure Databricks ワークスペースからデータと構成をエクスポートするためのツールとアプローチの概要を示します。 コンプライアンス要件、データの移植性、バックアップの目的、またはワークスペースの移行のために、ワークスペース資産をエクスポートできます。

概要

Azure Databricks ワークスペースには、ワークスペースの構成、マネージド テーブル、AI オブジェクトと ML オブジェクト、クラウド ストレージに格納されているデータなど、さまざまな資産が含まれています。 ワークスペース データをエクスポートする必要がある場合は、組み込みのツールと API の組み合わせを使用して、これらの資産を体系的に抽出できます。

ワークスペース データをエクスポートする一般的な理由は次のとおりです。

  • コンプライアンス要件: GDPR や CCPA などの規制に基づくデータの移植性の義務を満たします。
  • バックアップとディザスター リカバリー: ビジネス継続性のために重要なワークスペース資産のコピーを作成します。
  • ワークスペースの移行: ワークスペースまたはクラウド プロバイダー間での資産の移動。
  • 監査とアーカイブ: ワークスペースの構成とデータの履歴レコードを保持します。

エクスポートを計画する

ワークスペース データのエクスポートを開始する前に、エクスポートする必要がある資産のインベントリを作成し、それらの間の依存関係を理解します。

ワークスペース資産について

Azure Databricks ワークスペースには、エクスポートできるいくつかのカテゴリの資産が含まれています。

  • ワークスペースの構成: ノートブック、フォルダー、リポジトリ、シークレット、ユーザー、グループ、アクセス制御リスト (ACL)、クラスター構成、ジョブ定義。
  • データ資産: マネージド テーブル、データベース、Databricks ファイル システム ファイル、クラウド ストレージに格納されているデータ。
  • コンピューティング リソース: クラスターの構成、ポリシー、インスタンス プールの定義。
  • AI と ML アセット: MLflow の実験、実行、モデル、Feature Store テーブル、ベクター検索インデックス、Unity カタログ モデル。
  • Unity カタログ オブジェクト: メタストアの構成、カタログ、スキーマ、テーブル、ボリューム、アクセス許可。

エクスポートのスコープを設定する

要件に基づいてエクスポートする資産のチェックリストを作成します。 次の質問を考慮してください。

  • すべての資産または特定のカテゴリのみをエクスポートする必要がありますか?
  • エクスポートする必要がある資産を決定するコンプライアンスまたはセキュリティ要件はありますか。
  • 資産間のリレーションシップ (ノートブックを参照するジョブなど) を保持する必要がありますか?
  • 別の環境でワークスペース構成を再作成する必要がありますか?

エクスポート スコープを計画すると、適切なツールを選択し、重要な依存関係が見つからないのを回避できます。

ワークスペースの構成をエクスポートする

Terraform エクスポーターは、ワークスペース構成をエクスポートするための主要なツールです。 ワークスペース資産をコードとして表す Terraform 構成ファイルが生成されます。

Terraform エクスポーターを使用する

Terraform エクスポーターは Azure Databricks Terraform プロバイダーに組み込まれており、ノートブック、ジョブ、クラスター、ユーザー、グループ、シークレット、アクセス制御リストなどのワークスペース リソース用の Terraform 構成ファイルを生成します。 エクスポーターは、ワークスペースごとに個別に実行する必要があります。 Databricks Terraform プロバイダーを参照してください。

前提条件:

  • コンピューターにインストールされている Terraform
  • Azure Databricks 認証が構成されました
  • エクスポートするワークスペースの管理者特権

ワークスペース リソースをエクスポートするには:

  1. エクスポーターのチュートリアルについては、 使用例 に関するビデオを確認してください。

  2. エクスポーター ツールを使用して Terraform プロバイダーをダウンロードしてインストールします。

    wget -q -O terraform-provider-databricks.zip $(curl -s https://api.github.com/repos/databricks/terraform-provider-databricks/releases/latest|grep browser_download_url|grep linux_amd64|sed -e 's|.*: "\([^"]*\)".*$|\1|')
    unzip -d terraform-provider-databricks terraform-provider-databricks.zip
    
  3. ワークスペースの認証環境変数を設定します。

    export DATABRICKS_HOST=https://your-workspace-url
    export DATABRICKS_TOKEN=your-token
    
  4. エクスポーターを実行して Terraform 構成ファイルを生成します。

    terraform-provider-databricks exporter \
      -directory ./exported-workspace \
      -listing notebooks,jobs,clusters,users,groups,secrets
    

    一般的なエクスポーター オプション:

    • -listing: エクスポートするリソースの種類を指定する (コンマ区切り)
    • -services: リソースをフィルター処理するための一覧に代わる方法
    • -directory: 生成された .tf ファイルの出力ディレクトリ
    • -incremental: 段階的な移行のために増分モードで実行する
  5. 出力ディレクトリに生成された .tf ファイルを確認します。 エクスポーターは、リソースの種類ごとに 1 つのファイルを作成します。

Terraform エクスポーターは、ワークスペースの構成とメタデータに重点を置いています。 テーブルまたは Databricks ファイル システムに格納されている実際のデータはエクスポートされません。 次のセクションで説明する方法を使用して、データを個別にエクスポートする必要があります。

特定の資産の種類をエクスポートする

Terraform エクスポーターによって完全にカバーされていない資産の場合は、次の方法を使用します。

  • ノートブック: ワークスペース UI からノートブックを個別にダウンロードするか、ワークスペース API を使用してプログラムでノートブックをエクスポートします。 ワークスペース オブジェクトの管理を参照してください。
  • シークレット: セキュリティ上の理由から、シークレットを直接エクスポートすることはできません。 ターゲット環境でシークレットを手動で再作成する必要があります。 リファレンス用に記録するシークレット名とスコープ。
  • MLflow オブジェクト: mlflow-export-import ツールを使用して、実験、実行、モデルをエクスポートします。 以下の ML 資産のセクションを 参照してください。

データのエクスポート

顧客データは通常、Azure Databricks ではなく、クラウド アカウント ストレージに存在します。 クラウド ストレージに既に存在するデータをエクスポートする必要はありません。 ただし、Azure Databricks で管理されている場所に格納されているデータをエクスポートする必要があります。

マネージド テーブルのエクスポート

マネージド テーブルはクラウド ストレージ内に存在しますが、解析が困難な UUID ベースの階層に格納されます。 DEEP CLONE コマンドを使用すると、マネージド テーブルを指定した場所の外部テーブルとして書き換え、操作しやすくすることができます。

DEEP CLONEコマンドの例:

CREATE TABLE delta.`abfss://container@storage.dfs.core.windows.net/path/to/storage/`
DEEP CLONE my_catalog.my_schema.my_table

カタログの一覧内のすべてのテーブルを複製する完全なスクリプトについては、以下の サンプル スクリプトを参照してください。

Databricks の既定のストレージをエクスポートする

サーバーレス ワークスペースの場合、Azure Databricks は既定のストレージを提供します。これは、Azure Databricks アカウント内のフル マネージド ストレージ ソリューションです。 既定のストレージ内のデータは、ワークスペースの削除または使用停止の前に、顧客所有のストレージ コンテナーにエクスポートする必要があります。 サーバーレス ワークスペースの詳細については、「 サーバーレス ワークスペースの作成」を参照してください。

既定のストレージ内のテーブルの場合は、 DEEP CLONE を使用して、顧客所有のストレージ コンテナーにデータを書き込みます。 ボリュームと任意のファイルの場合は、以下の 「DBFS ルート エクスポート」セクション で説明されているのと同じパターンに従います。

Databricks ファイル システムのルートをエクスポートする

Databricks ファイル システムルートは、お客様が所有する資産、ユーザーのアップロード、init スクリプト、ライブラリ、テーブルを含む可能性がある、ワークスペース ストレージ アカウント内の従来のストレージの場所です。 Databricks ファイル システムルートは非推奨のストレージ パターンですが、従来のワークスペースには、エクスポートする必要があるデータがこの場所に格納されている可能性があります。 ワークスペース ストレージ アーキテクチャの詳細については、「ワークスペース ストレージ を参照してください。

Databricksファイルシステムルートのエクスポートを行う:

Azure 上のルート バケットはプライベートであるため、 azcopy などの Azure ネイティブ ツールを使用してストレージ アカウント間でデータを移動することはできません。 代わりに、Azure Databricks 内で dbutils fs cp と Delta DEEP CLONE を使用してください。 データの量によっては、実行に時間がかかる場合があります。

# Copy DBFS files to a local path
dbutils.fs.cp("dbfs:/path/to/remote/folder", "/path/to/local/folder", recurse=True)

Databricks ファイル システムのルート ストレージ内のテーブルの場合は、次の DEEP CLONEを使用します。

CREATE TABLE delta.`abfss://container@storage.dfs.core.windows.net/path/to/external/storage/`
DEEP CLONE delta.`dbfs:/path/to/dbfs/location`

Important

クラウド ストレージから大量のデータをエクスポートすると、大量のデータ転送とストレージ コストが発生する可能性があります。 大規模なエクスポートを開始する前に、クラウド プロバイダーの価格を確認します。

エクスポートに関する一般的な課題

秘密:

セキュリティ上の理由から、シークレットを直接エクスポートすることはできません。 -export-secrets オプションで Terraform エクスポーターを使用する場合、エクスポーターはシークレットと同じ名前の変数をvars.tfで生成します。 このファイルを実際のシークレット値で手動で更新するか、 -export-secrets オプションを使用して Terraform エクスポーターを実行する必要があります (Azure Databricks で管理されるシークレットの場合のみ)。

Azure Databricks では、Azure Key Vault に基づくシークレット ストアを使用することをお勧めします。

AI 資産と ML 資産をエクスポートする

一部の AI 資産と ML 資産では、エクスポートにさまざまなツールとアプローチが必要です。 Unity カタログ モデルは、Terraform エクスポーターの一部としてエクスポートされます。

MLflow オブジェクト

MLflow は、API のギャップとシリアル化の難しさにより、Terraform エクスポーターによってカバーされません。 MLflow の実験、実行、モデル、成果物をエクスポートするには、 mlflow-export-import ツールを使用します。 このオープンソース ツールは、MLflow 移行の部分的なサポートを提供します。

MLflow エクスポート インポート ツール。

エクスポートのみのシナリオでは、インポート手順を実行しなくても、顧客所有のバケット内にすべての MLflow 資産を格納できます。 MLflow 管理の詳細については、「 Unity カタログでのモデルライフサイクルの管理」を参照してください。

ベクター検索インデックス: ベクトル検索インデックスは、EU データ エクスポート プロシージャのスコープ内にありません。 引き続きエクスポートする場合は、標準テーブルに書き込み、 DEEP CLONEを使用してエクスポートする必要があります。

フィーチャー ストア テーブル: フィーチャー ストアはベクター検索インデックスと同様に扱う必要があります。 SQL を使用して、関連するデータを選択して標準テーブルに書き込み、 DEEP CLONEを使用してエクスポートします。

エクスポートされたデータを検証する

ワークスペース データをエクスポートした後、古い環境を使用停止にする前に、ジョブ、ユーザー、ノートブック、およびその他のリソースが正しくエクスポートされたことを確認します。 スコーピングと計画フェーズで作成したチェックリストを使用して、エクスポートする予定のすべてが正常にエクスポートされたことを確認します。

検証チェックリスト

エクスポートを確認するには、次のチェックリストを使用します。

  • 生成された構成ファイル: Terraform 構成ファイルは、必要なすべてのワークスペース リソースに対して作成されます。
  • エクスポートされたノートブック: すべてのノートブックは、そのコンテンツとメタデータをそのまま使用してエクスポートされます。
  • 複製されたテーブル: マネージド テーブルはエクスポート場所に正常に複製されます。
  • コピーされたデータ ファイル: クラウド ストレージ データは、エラーなしで完全にコピーされます。
  • エクスポートされた MLflow オブジェクト: 実験、実行、モデルは、成果物と共にエクスポートされます。
  • ドキュメントに記載されているアクセス許可: アクセス制御リストとアクセス許可は、Terraform 構成でキャプチャされます。
  • 識別された依存関係: 資産間のリレーションシップ (ノートブックを参照するジョブなど) はエクスポートに保持されます。

エクスポート後のベスト プラクティス

検証と受け入れテストは、主に要件に基づき、大きく異なる場合があります。 ただし、次の一般的なベスト プラクティスが適用されます。

  • テストベッドの定義: エクスポートされた環境でシークレット、データ、マウント、コネクタ、およびその他の依存関係が正しく動作していることを検証するジョブまたはノートブックのテストベッドを作成します。
  • 開発環境から始める: 段階的に移行する場合は、開発環境から開始し、運用環境に移行します。 これにより、大きな問題が早期に発生し、運用環境への影響を回避できます。
  • Git フォルダーを活用する: 可能な場合は、外部 Git リポジトリに格納されているため、Git フォルダーを使用します。 これにより、手動によるエクスポートが回避され、環境間でコードが同じになります。
  • エクスポート プロセスを文書化する: 使用したツール、実行されたコマンド、発生した問題を記録します。
  • エクスポートされたデータをセキュリティで保護する: エクスポートされたデータが適切なアクセス制御を使用して安全に保存されていることを確認します(特に、機密または個人を特定できる情報が含まれている場合)。
  • コンプライアンスを維持する: コンプライアンスのためにエクスポートする場合は、エクスポートが規制要件と保持ポリシーを満たしていることを確認します。

スクリプトと自動化の例

スクリプトとスケジュールされたジョブを使用して、ワークスペースのエクスポートを自動化できます。

ディープ クローン エクスポート スクリプト

次のスクリプトでは、 DEEP CLONEを使用して Unity カタログのマネージド テーブルをエクスポートします。 このコードは、特定のカタログを中間バケットにエクスポートするために、ソース ワークスペースで実行する必要があります。 catalogs_to_copy変数とdest_bucket変数を更新します。

import pandas as pd

# define catalogs and destination bucket
catalogs_to_copy = ["my_catalog_name"]
dest_bucket = "<cloud-storage-path>://my-intermediate-bucket"
manifest_name = "manifest"

# initialize vars
system_info = sql("SELECT * FROM system.information_schema.tables")
copied_table_names = []
copied_table_types = []
copied_table_schemas = []
copied_table_catalogs = []
copied_table_locations = []

# loop through all catalogs to copy, then copy all non-system tables
# note: this would likely be parallelized using thread pooling in prod
for catalog in catalogs_to_copy:
  filtered_tables = system_info.filter((system_info.table_catalog == catalog) & (system_info.table_schema != "information_schema"))
  for table in filtered_tables.collect():
    schema = table['table_schema']
    table_name = table['table_name']
    table_type = table['table_type']
    print(f"Copying table {schema}.{table_name}...")
    target_location = f"{dest_bucket}/{catalog}_{schema}_{table_name}"
    sqlstring = f"CREATE TABLE delta.`{target_location}` DEEP CLONE {catalog}.{schema}.{table_name}"
    sql(sqlstring)

    # lists used to create manifest table DF
    copied_table_names.append(table_name)
    copied_table_types.append(table_type)
    copied_table_schemas.append(schema)
    copied_table_catalogs.append(catalog)
    copied_table_locations.append(target_location)

# create the manifest as a df and write to a table in dr target
# this contains catalog, schema, table and location
manifest_df = pd.DataFrame({"catalog": copied_table_catalogs,
                            "schema": copied_table_schemas,
                            "table": copied_table_names,
                            "location": copied_table_locations,
    "type": copied_table_types})

spark.createDataFrame(manifest_df).write.mode("overwrite").format("delta").save(f"{dest_bucket}/{manifest_name}")
display(manifest_df)

自動化に関する考慮事項

エクスポートを自動化する場合:

  • スケジュールされたジョブを使用する: 通常のスケジュールでエクスポート スクリプトを実行する Azure Databricks ジョブを作成します。
  • エクスポート ジョブの監視: エクスポートが失敗した場合や予想よりも時間がかかる場合に通知するようにアラートを構成します。
  • 資格情報の管理: Azure Databricks シークレットを使用して、クラウド ストレージの資格情報と API トークンを安全に格納します。 シークレット管理 を参照してください。
  • バージョンのエクスポート: エクスポート パスでタイムスタンプまたはバージョン番号を使用して、エクスポート履歴を維持します。
  • 古いエクスポートをクリーンアップする: アイテム保持ポリシーを実装して、古いエクスポートを削除し、ストレージ コストを管理します。
  • 増分エクスポート: 大規模なワークスペースの場合は、前回のエクスポート以降に変更されたデータのみをエクスポートする増分エクスポートを実装することを検討してください。