メインコンテンツへジャンプ
Engineering blog

Databricks ワークスペースは、1 つの独立した Databricks 環境を提供します。 そのため、要件によっては複数のワークスペースを同時に作成・運用するケースもあります。 こうした状況では、Databricks ワークスペースを Code として管理(IaC)し、自動化することで運用がスムーズになります。

Databricks では、運用現場で求められる機能をツールとして提供する Labs Project の一環で、Databricks Terraform Provider を公開しています。 このドキュメントでは、Terraform を用いて AWS 上に Databricks ワークスペースを構築する方法を説明します。

AWS の Databricks デプロイメントの構成

AWS 上での Databricks は、以下の 2 つのレイヤで構成されます。

  • Control Plane: クラスタ管理、ノートブック、ジョブ管理、Hive メタストアなど管理系のリソースが含まれる。Databricks 管理の AWS アカウント内に配置。
  • Data Plane:クラスタ実体(EC2 インスタンス)、処理実行結果、Spark/Delta の処理対象データストレージ(S3 バケツ)等のリソースが含まれる。ユーザー管理の AWS アカウント内に配置。

ワークスペースを作成・デプロイするには、

  1. ユーザーの AWS アカウントでクロスアカウント IAM Role を作成
  2. 上記の IAM role を Databricks 側に登録(委譲)
  3. ユーザー AWS アカウント内に VPC/Subnet などのネットワークを構成
  4. DBFS ルートとして使用する S3 バケツの作成・ポリシーの作成

などが必要になります。

詳細は、Databricks architecture overview をご参照ください。
これらの設定を Terraform でコード化して運用・管理することが可能です。

必要な環境

  • AWS CLI の実行環境
  • AWS Credential(通常は ~/.aws/credentials に作成される。上記の AWS CLI の実行のため)
  • Databricks Owner Account:
    Databricks Console(accounts.cloud.databricks.com)にログインできるユーザー名/パスワード
  • Terraform 実行環境

使用方法

Terraform テンプレートのダウンロード

Terraform のテンプレートをダウンロードします。

$ curl -O https://sajpstorage.blob.core.windows.net/
demo-assetworkshop2021/snippet/db_terraform_example.zip

$ unzip db_terraform_example.zip
$ cd db_terraform_example
$ cd aws
$ ls

README.md		variable.tf
main.tf			secret.tfvars.template

デプロイに関するパラメータの設定

Variable.tf にデプロイする際の設定値を変数として定義してあります。

Variable.tf

  • aws_connection_profile:AWS CLI を使用する際の Credetial の profile 名
  • >aws_region:構築する AWS Region
  • cidr_block:構築する際の VPC に使用するネットワーク CIDR
  • read_write_s3_buckets:Databricks と連携させる S3 バケツのリスト(Read、Write)
  • read_only_s3_buckets:Databricks と連携させる S3 バケツのリスト(Read オンリー
  • user_prefix:ワークスペースのリソース名で使うプレフィックス文字列

ファイルを編集して、適宜設定していきます。

$ vim variable.tf  (もしくはお使いのテキストエディタで編集)

variable "aws_connection_profile" {
  description  = "The name of the AWS connection profile to use."
  type         = string
  default      = "default"
}

variable "aws_region" {
  description = "The code of the AWS Region to use."
  type        = string
  default     = "ap-northeast-1"
}
...
...

クレデンシャルファイルの準備

続いて、secret.tfavrs のテンプレートから以下の Databricks のアカウント情報を設定ファイルを作成していきます。 パスワードなどを含むファイルになりますので、取り扱いには注意してください。

  • databricks_account_username:Databricks Console にログインする際のメールアドレス
  • databricks_account_password:Databricks Console にログインする際のパスワード
  • databricks_account_id:Databircks アカウントの ID(Databricks Console から確認できます)

Databricks のアカウント ID は下記のように Console 画面の左下メニューから確認できます。

$ cp secret.tfvars.template secret.tfvars
$ vim secret.tfvars  (もしくはお使いのテキストエディタで編集)

databricks_account_username = "[email protected]"
databricks_account_password = "xxxxxxxxxxxxxxxxxxx"
databricks_account_id       = "xxxxxxxx-xxxx-xxxxx-xxxxx-xxxxxxxxxxx"

ワークスペースの作成

以上が設定が必要な項目になりますので、移行は Terraform を実行していきます。
Terraform の初期化(初回のみ)

$ terraform init

 

問題なければ Terraform を実行して環境を構築します。 この実行によって AWS 上にDatabricks のワークスペースが構築されます。

 

$ terraform apply -var-file="secret.tfvars"

...
...
Apply complete! Resources: 36 added, 0 changed, 0 destroyed.

Outputs:

databricks_host = "https://xxxxxxxxx-demo08jmll.cloud.databricks.com"
databricks_instance_profile = "arn:aws:iam::134567891234:instance-profile/
shared-instance-profile"
databricks_token = <sensitive>

 

ここで作成した各種リソースは Databrciks Console や AWS Console の UI 上からも確認可能です。

 

ワークスペースの削除

環境を削除するには以下を実行します(実行には注意してください)。

$ terraform destroy -var-file="secret.tfvars"

...
...
Destroy complete! Resources: 36 destroyed.

説明

リソース

以下のリソースを構築します(手動でデプロイする場合の順に記載しています)。

  1. Cross Account IAM Role
  2. S3 Root Bucket
  3. Custom VPC
  4. Workspace
  5. Bucket for Data writing
  6. Instance Profile for S3 Access from Clusters

詳細はコードをご参照ください。

参考資料

Databricks 無料トライアル
チュートリアル一覧へ