概要
本記事では、Terraformを使ってカタログを作成し、そのカタログとワークスペースをバインディングする手順を紹介します。
Terraformを利用することで、以下のことが可能となります。
-
databricks_catalog
リソースを利用してカタログを作成し、デフォルトで作成されるスキーマを無効化した状態でデプロイできます -
isolation_mode = 'ISOLATED'
を指定することで、作成したカタログを、作成を行ったワークスペースにのみ関連付け、他のワークスペースに対して権限を付与しないようにできます
また、DatabricksのWeb Terminal機能を利用することで、Databricks環境内でデプロイ作業を完結させる方法も紹介します。
背景
Databricks UIからカタログを作成した場合、デフォルトでは、作成されたカタログが属するメタストアに紐づくすべてのワークスペースがそのカタログの情報にアクセス可能となります。これにより、意図しないデータ公開が発生する可能性があります。そのため、カタログを特定のワークスペースにのみ関連付け、アクセス権限を制限する方法を検討しました。
前提
- 作業はDatabricksのWeb Terminalを使用して行う
- メタストア管理者権限を持っていること
Web Terminalを使用することで、Databricks内で直接Terraformを実行できるため、デプロイ作業をDatabricks環境内で完結させることができます。
手順
1. DatabricksのWeb Terminalを起動する
Web Terminalの起動方法:
- DatabricksのUI上で、メタストア管理者権限を持つユーザーが所有する「All purpose」クラスタを起動します
- 「Apps」タブからWeb Terminalを起動します
2. Terraformのインストール
Terraformの公式サイトを参考に、以下のコマンドでインストールします。
wget -O - https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
sudo apt update && sudo apt install terraform
Web Terminalはセッションがリフレッシュされると、インストールされたライブラリがリセットされるため、毎回インストールコマンドを実行する必要があります。毎回の実行を避けるためには、起動時に自動でTerraformをインストールする処理の導入を検討することをお勧めします。
3. 作業フォルダに移動する
以下のコマンドで、作業用のDatabricksフォルダに移動します。
cd /Workspace/<your_work_folder_path>
ここで記載している「Workspace」はnotebookを保存している場所のことです。(Databricks UIの左パネルに表示されているWorkspace
のこと。)
4. providers.tf
ファイルを作成
作業フォルダ内にproviders.tf
という名前でTerraformのプロバイダー設定ファイルを作成し、以下を記述します。
terraform {
required_providers {
databricks = {
source = "databricks/databricks"
version = "1.59.0"
}
}
}
provider "databricks" {
host = "<Databricks_hostname>"
# tokenは直接記載しません
}
最新のTerraformプロバイダーのバージョンはこちらから確認できます。
5. main.tf
ファイルを作成
作業フォルダ内にmain.tf
というファイルを作成し、以下の内容を記述します。
databricks_catalog
リソースを使ってカタログを作成します。
resource "databricks_catalog" "<catalog_name>" {
name = "<catalog_name>"
comment = "<comment>"
properties = {
owner = "<owner_name>"
}
storage_root = "<managed_location_path>"
isolation_mode = "ISOLATED"
}
output "catalog_name" {
value = databricks_catalog.<catalog_name>.name
}
- storage_root:
managed_location_path
には、カタログデータを保存するロケーションのパスを指定します - isolation_mode:
ISOLATED
を指定することで、カタログを実行したワークスペースにのみ関連付け、他のワークスペースに権限を付与しないようにできます
6. DatabricksでPAT (Personal Access Token)を発行
DatabricksのUI上で、PAT発行手順に従って、Personal Access Token(PAT)を発行します。
7. 環境変数にPATを設定
Web Terminal上で、以下のコマンドを実行し、環境変数DATABRICKS_TOKEN
に先ほど取得したPATを設定します。
export DATABRICKS_TOKEN=<PAT>
Databricksには環境変数が用意されており、直接値を設定することができます。
参考リンク
8.Terraformの初期化
次に、Terraformの初期化を実行します。
terraform init
9.Terraformプランの作成
作成したカタログのリソースを確認するために、以下のコマンドでTerraformプランを作成します。
terraform plan
10. Terraformの適用
プランが問題なければ、以下のコマンドでTerraformを適用し、カタログを作成します。
terraform apply
適用後、isolation_mode = "ISOLATED"
を指定したため、カタログは実行したワークスペースにのみ関連付けられます。
11. 他のワークスペースへのカタログ紐付け
作成したカタログを他のワークスペースに紐付ける場合は、databricks_workspace_binding
リソースを利用します。詳細は、公式ドキュメントを参照してください。
まとめ
本記事では、Terraformを使用してDatabricksでカタログを作成し、そのカタログを特定のワークスペースにのみ関連付ける方法について紹介しました。
ポイントは以下の通りです。
-
databricks_catalog
リソースを使用することで、Databricks上でカタログを作成できます -
isolation_mode = 'ISOLATED'
を指定することで、カタログを作成したワークスペースにのみ関連付け、他のワークスペースからアクセスできないように制限できます - DatabricksのWeb Terminalを使用すれば、Terraformのインストールからデプロイ作業までDatabricks環境内で完結することができます
- カタログのデプロイ後、必要に応じて
databricks_workspace_binding
リソースを使用して他のワークスペースとの紐付けを行うことが可能です
こちらの手法を利用することで、意図しないデータ公開を防ぎつつ、カタログ作成を行うことができます。