はじめに
Unity Catalogは素晴らしい機能ですが新たにIAM Roleを作成したり、S3 Bucketを作成したりWorkspaceへのMetastore追加や、Metastoreへの管理グループ設定など初期設定が正直少し面倒です。
DatabricksではTerraform providerを提供しており構築の自動化がサポートされております。もちろんUnity Catalogもサポートされているということで今回利用してみました。
今回使用したオリジナルのテンプレートはこちらです。ユーザー作成箇所など少しカスタマイズして利用しております。
テンプレートで自動化される内容
今回のterraform templateを使って以下の環境を構築できます。
- [AWS] S3 Bucket for metastore
- [AWS] IAM role and policy for metastore
- [Databricks Account Console] Metastore管理グループ作成
- [Databricks Account Console] Metastore の登録
- [Databricks Account Console] WorkspaceへのMetastore Assign
- [Workspace] Storage Credentialの登録
- [Workspace] Catalog作成
- [Workspace] Schema作成
0.事前準備
以下の環境をあらかじめセットアップしておきます。
また今回はすでにDatabricks Workspace環境がある前提を想定しております。
- Databricks Account User (Admin権限あり)
- Workspace (Unity Catalogを利用するWorkspaceを予め準備しておく)
今回は上記環境が揃った状態からスタートということで。。
1. テンプレートのダウンロード
今回利用するterraformテンプレートはこちらです。
git clone https://github.com/maroon-spec/unity_setup_aws.git
2. 変数パラメーターの設定
今回の環境を構築するにあたり、以下の情報が必要になります。
unity_catalog.auto.tfvars
を開いて、以下のパラメータを指定して上書きします。
パラメータ | 例 | 説明 |
---|---|---|
aws_region | "ap-northeast-1" | AWS Region |
aws_profile | "default" | AWS CLI profile |
create_aws_resources | true | trueのみ |
unity_metastore_bucket | "databricks-uc-tf-metastore" | metastore用S3bucket名 |
unity_metastore_iam | "uc-tf-role" | metastore用IAM Role名 |
databricks_workspace_ids | ["19710001324","17899832448"] | WorkspaceIDリスト |
unity_admin_group | "tf_admin_group" | metastore Ownerグループ名 |
databricks_account_id | "xxx-xxxxx-xxxx-xxx" | |
databricks_workspace_host | "https://dbc-xxdfdes.cloud.databricks.com" | Workspace name |
databricks_account_username | "hoge.hoge@databricks.com" | Admin権限をもつユーザ |
3. terraformの実行
あとは、以下の3ステップでterraformを実行するだけです。
a) terraform init
初回のみですが、対象のディレクトリー上で上記コマンドを実行します。
terraform init
b) terraform plan
initが成功したら続いてplanを実行して、デプロイ計画に問題がないかチェックします。
terraform plan
Databricks Accountのユーザーパスワードがプロンプトで聞かれるので、パスワードを入力します。
記述に問題がなければ以下のようにデプロイ計画が表示されますので、中身をチェックしておきます。
c) terraform apply
最後にデプロイ計画に問題が無ければapplyします。
terraform apply
以下のようなメッセージが出た場合は、AWS側のIAM作成タイミングとDatabricks側での設定タイミングが合わずエラーになっているだけなので、再度applyを実行してみてください。
最後にApply Complete とメッセージが出れば成功です。
ちなみに環境を元に戻すにはterraform destroy
を実行すると、作成されたオブジェクトをクリーンナップしてくれます。非常に便利ですね。
確認してみよう
S3 Bucket名は指定した名前の後ろに6文字のランダム値が付きます。(嫌な人はテンプレートを修正してください)
IAM Roleには、2つのポリシーが付与されます。(上記S3 Bucket用とサンプルデータなどがあるDatabricks-dataset用)
Databrick Account Consoleにてmetastoreを確認(今回はus-west-2に作成しました)
Metastore Adminには作成したグループ(tf_admin_gropu)がオーナーとして登録されます。
こちらのグループメンバーにならないと新規カタログなどは作成できません。
Workspaceにログインすると、新規のカタログやスキーマが作成されているのを確認できます。
ストレージクレデンシャルを確認するとちゃんと登録されております。
ということで、事前準備部分は除いてですが。。10分以内で構築することができました。AWS Console行ったり、Databricks Console行ったり、Workspaceにログインしたりせずに済むので楽ですね。
参考情報
公式マニュアルや参考にしたファイルはこちらです。
UnityCatalogセットアップについてはこちらもご覧ください。
https://qiita.com/maroon-db/items/57cee03cef202c839b94