Azure Databricksワークスペースを移行したいと思ったとき、具体的な手順がよくわからなかったので調べてみました。
本記事では、ワークスペースの移行手順と注意点についてまとめます。
移行手順
Databricks Terraform Provider インストール
AzureでCloud Shellを開き、以下のコマンドで「Databricks Terraform Provider」のインストールを行います。
mkdir databricks-migration && cd databricks-migration
curl -OL https://github.com/databricks/terraform-provider-databricks/releases/download/v1.84.0/terraform-provider-databricks_1.84.0_linux_amd64.zip
unzip terraform-provider-databricks_1.84.0_linux_amd64.zip
※今回は検証のためCloud Shellを利用しましたが、Cloud Shellはストレージが永続化されない(現在のセッションのみ)ため、本格的に実行する場合はローカル環境等にAzure CLIをインストールして実行してください。
以下のコマンドを実行し、バージョン情報が表示されればOKです。
./terraform-provider-databricks_v1.84.0
アクセストークン生成
「Settings」→「Developer」→「Access tokens」から PAT(Personal Access Token)を取得します。
エクスポート
以下のコマンドでワークスペースのエクスポートを実行します。
./terraform-provider-databricks_v1.84.0 exporter
Databricks のワークスペースURLとPATの入力を求められるため、それぞれ入力します。
作成対象のリソースを確認されるため、必要なものは「y」、不要なものは「n」を入力します。
エクスポートが完了すると、各リソースに対応する.tfファイルが作成されます。
サービスプリンシパル作成
移行作業用のサービスプリンシパルを作成します。
Azure Databricksを開き、右上のユーザアイコンから「Settings」→「Identity and access」で「Service principals」の「Manage」をクリックします。
「Add service principal」→「Add new」をクリックし、サービスプリンシパルの新規作成を行います。Management は「Databricks managed」とし、適切な名前を設定して「Add」をクリックします。
サービスプリンシパルが作成されたら、「Secrets」で「Generate secret」をクリックし、シークレットを作成します。
表示されたポップアップに記載のシークレットとクライアントIDを控えておきます。
※シークレットはこの一回しか表示されないためご注意ください。
Terraformファイル修正
エクスポートしたままでは認証情報が設定されていなかったり、不備があったりするため修正を行います。
はじめに、databricks.tf の中身を以下のように修正します。
terraform {
required_providers {
azurerm = {
source = "hashicorp/azurerm"
}
databricks = {
source = "databricks/databricks"
}
}
}
provider "databricks" {
host = "https://adb-xxxxxxxxxxxxxxxx.x.azuredatabricks.net"
client_id = "<CLIENT_ID>"
client_secret = "<CLIENT_SECRET>"
}
CLIENT_ID
とCLIENT_SECRET
は上記で取得した値を入れます。
以下のコマンドを実行し、terraform構成を初期化します。
terraform init
各.tfファイルの修正を行い、問題がないか確認します。
terraform plan
問題がなければ、以下のコマンドで変更を適用します。
terraform apply
Unity Catalog について
Unity Catalog は特定のワークスペースに依存しない形で存在しているリソースであるため、移行先のワークスペースを新たに割り当てることで既存の Unity Catalog を引き続き利用することができます。
アカウントコンソールにアクセスし、「カタログ」を開きます。対象の Unity Catalog のリンクをクリックし、「ワークスペース」タブで「ワークスペースに割り当てる」をクリックします。
移行先のワークスペースを選択し、「割り当てる」をクリックして有効化します。
移行先ワークスペースを開くと、「自組織」に Unity Catalog が追加されており、以前のワークスペースと同様にテーブル等にアクセスすることができます。
うまくエクスポートできない場合
移行ツールでうまくエクスポートできない場合、ワークスペースの機能でフォルダ単位やユーザ単位でデータをダウンロードし、移行先ワークスペースにインポートすることが可能です。
以下のように「Share」の左側にあるメニューボタンを押し、「Download as」→「DBC archive」をクリックすると「DBC archive」形式でユーザのデータをまとめてダウンロードすることができます。
ただし、ダウンロードの対象となるデータはフォルダとノートブックのみであり、SQLエディタで保存したクエリやその他のファイルは含まれないためご注意ください。
注意点
Databricks Terraform Provider のエクスポートは「Experimental」と表示されている通り、必ずしも思い通りにエクスポートされるわけではないため注意が必要です。
実際、今回のエクスポートではノートブックとフォルダが1人分の一部だけしか.tfファイルに記載されておらず、自分で追加しなければなりませんでした。あくまで補助ツールとして捉え、Terraform をちゃんと理解したうえで使う必要があります。
まとめ
Azure Databricksワークスペースの移行方法についてご紹介しました。
ワークスペースの移行はボタンやコマンド1つで実行することはできず、移行ツールを利用する必要がありますが、機能が完全ではないため注意する必要があります。
ノートブックとフォルダのみのエクスポートであれば簡単に行うことができ、同じAzure Databricksの同一リージョン内であれば、Unity Catalogの移行も必要ありません。単に本番ワークスペースのコピーを作りたい、ワークスペースを作り直したいという場合であれば、移行ツールを利用して最小限のリソースだけ移行するか、必要な分だけ手動で作成するのが良さそうです。