Unity Catalog 外部ロケーションをTerraformで実装してみる


# はじめに

前回、[Unity Catalogの構築をterraformで実装](https://qiita.com/maroon-db/items/70d8eb95aa9c3b978fca)してみました。ただし考えてみると運用上何度もUnity Catalogを実装することはないと思います。（初回のみ）

しかし、外部ストレージの登録は申請ベースで何度もあるかもしれません。今回はそのようなケースを想定して、外部ロケーション（外部ストレージ）の登録をTerraformで実装してみました。

ちなみにTerraformを使わずにマニュアルで実装すると以下のような手順が必要になります。IAMの作成とS3バケット作成やストレージ資格登録や外部ロケーション登録などちょっとだけ面倒ですね。[Unity Catalog 外部ロケーションの登録 (AWS)](https://qiita.com/maroon-db/items/6f3dee8a8ebd863989a6)


# テンプレートで自動化される内容

・IAM Role作成
・IAM Policy作成
・S3 Bucket作成と設定
・ストレージ資格作成
・ストレージロケーション作成

# 事前準備

以下の環境をあらかじめセットアップしておきます。

- [Terraform CLI](https://www.terraform.io/downloads.html)
- [Databricks CLI](https://learn.microsoft.com/ja-jp/azure/databricks/dev-tools/cli/)
- [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) ---[setup](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-config)
- また今回はすでにDatabricks Workspace & UnityCatalogが利用できる前提を想定しております。

Unity Catalogをまだセットアップできていない場合は[こちら](https://qiita.com/maroon-db/items/70d8eb95aa9c3b978fca)を最初に実行ください。

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

今回利用するterraformテンプレートは[こちら](https://github.com/maroon-spec/unity_catalog_externalstorage.git)です。
```
git clone https://github.com/maroon-spec/unity_catalog_externalstorage.git
```

# 変数パラメーターの設定

今回は２つのパラメーターファイルに分けております。

### auth.auto.tfvars
|パラメータ|例|説明|
|:--|--|-----:|
databricks_connection_profile| default |databricks CLIで設定した、今回対象のWS用プロファイル
aws_connection_profile | default | AWS CLIで設定した今回対象のプロファイル
aws_region| ap-northeast-1| AWS Region

### external-storage.auto.tfvars
|パラメータ|例|説明|
|:--|--|-----:|
s3_bucket_name  |tf-uc-external| S3 bucket name
aws_iam_role_name     |tf-uc-external | IAM Role Name
external_storage_location_label | some | ストレージロケーションに登録するサブディレクトリ名
databricks_account_id  | xxxx-xxxx-xxxxx| Databricks Account ID

# terraformの実行

あとは、Terraformの実行だけです。

### a) terraform init
初回のみですが、対象のディレクトリー上で上記コマンドを実行します。

```
$ terraform init
```

### b) terraform plan 

```
$ terraform plan
```

### c) terraform apply 

```
$ terraform apply
```

ちょっとWarning Messageは出てますが、最後までApplyが成功しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/8ee7846c-142b-282a-8509-bece8ff25684.png)

# 確認してみよう

S3 Bucketができてます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/26564828-9730-6323-f0c8-a3508a58db8f.png)

IAM Roleももちろん作成済み
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/eba2e07d-a1a2-738c-ee6a-ef321faff2a0.png)


Databricks側のストレージロケーションも確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/85a4255b-afba-6e25-eaf3-fd0036018e62.png)

実際に外部テーブルを作成してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/0810bbf3-5c17-00f2-04d0-f71e35509a90.png)


データエクスプローラで確認してみると
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/ae60291f-ed1c-8ab0-bf8a-884d739b5450.png)

詳細タブで確認するとExternal Tableとして認識されてますね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/6ec2fb2f-62ac-a39d-a758-18eb268f2148.png)


# 最後に
今回はこちらのマニュアルを参考にテンプレートを作成しましたが、ご利用は自己責任にてお願いします。
https://docs.databricks.com/data-governance/unity-catalog/automate.html

それにしてもterraform便利ですね。

UnityCatalogセットアップについてはこちらもご覧ください。
https://qiita.com/maroon-db/items/57cee03cef202c839b94