Terraformを使ってPrivateLink構成のDatabricksワークスペースをデプロイしてみる

機能の記事は、こちらの前振りでした。これまでは[手作業で構築](https://qiita.com/taka_yayoi/items/1ca54463469df05dd3ee)していましたが、手順の多さにムキーとなってました。

https://qiita.com/taka_yayoi/items/cfd853a9859586c26477

:::note
**注意**
- こちらの記事ではMacを使用しています。
- AWSへのデプロイです。[顧客管理VPC](https://qiita.com/taka_yayoi/items/f23bd799e1960e2eccbe)を用いた[PrivateLink構成](https://qiita.com/taka_yayoi/items/c6bdbb6452f6a0895961)のデプロイとなります。[パックエンド接続](https://qiita.com/taka_yayoi/items/1ca54463469df05dd3ee)のみです。
:::

色々サンプルが公開されています。最初はこれをベースに自分で設定ファイルを作成しようとしましたが早々に挫折しました。

https://registry.terraform.io/providers/databricks/databricks/latest/docs/guides/aws-private-link-workspace

https://github.com/hwang-db/tf_aws_deployment/tree/main/aws_databricks_modular_privatelink#input_cmk_admin

結局、私のニーズに合ったのがこちらでした。

https://github.com/LeoneGarage/terraform

シェルスクリプト化されていますが、オプションでリージョンやインターネットゲートウェイの有無を制御することができて便利です。以下のようなアーキテクチャとなります。

![](https://raw.githubusercontent.com/LeoneGarage/terraform/master/E2%20%2B%20PL.png)

# 準備

## Terraformのインストール

https://developer.hashicorp.com/terraform/downloads

Terminalで以下のコマンドを実行します。

```terminal
brew tap hashicorp/tap
brew install hashicorp/tap/terraform
```

上のコマンドを実行した際に、

```
==> Installing terraform from hashicorp/tap
Error: Your Command Line Tools are too outdated.
Update them from Software Update in System Preferences.

If that doesn't show you any updates, run:
  sudo rm -rf /Library/Developer/CommandLineTools
  sudo xcode-select --install

Alternatively, manually download them from:
  https://developer.apple.com/download/all/.
You should download the Command Line Tools for Xcode 13.4.
```

と言うエラーが出る場合には、以下を実行してCommand Line Toolsをアップデートします。

```
sudo rm -rf /Library/Developer/CommandLineTools
sudo xcode-select --install
```

## AWS CLIのインストールおよび設定

こちらのGUIインストーラでインストールします。

https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html

こちらを参考に設定を行います。AWSアクセスキーを取得して`aws configure`を実行した際に指定します。

https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-config

# Terraformの設定

1. こちらの[リポジトリ](https://github.com/LeoneGarage/terraform)をローカルにクローンします。
1. `configure.sh`があるディレクトリに`secrets.tfvars`というファイルを作成し、以下の内容を記述します。

    ```:secrets.tfvars
    databricks_account_id = "<databricks account id>"
    databricks_account_name = "<databricks account name>"
    databricks_account_username = "<databricks account owner username>"
    databricks_account_password = "<databricks account owner password>"
    ```

    - databricks_account_id: DatabricksのアカウントID。
    - databricks_account_name: S3バケット名のプレフィクスになります。
    - databricks_account_username: Databricksアカウントオーナーのメールアドレス。
    - databricks_account_password: Databricksアカウントオーナーのパスワード。

1. `configure.sh`を実行することでワークスペースがデプロイされるのですが、オプションで挙動を変更することができます。ここでは、`-nocmk all`を指定して、カスタマーマネージドキーによる暗号化を抑制し、`-w pl-tf-test-workspace`でDatabricksワークスペース名を指定し、`-r ap-northeast-1`でAWSリージョンを指定しています。それ以外のオプションは[こちら](https://github.com/LeoneGarage/terraform#usage)で説明されています。以下を実行することでワークスペースがデプロイされます。

    ```sh
    ./configure.sh -nocmk all -w pl-tf-test-workspace -r ap-northeast-1
    ```

![Screenshot 2023-01-21 at 20.57.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/e1f38fc8-e946-7fd8-0003-7987bba8cb3a.png)

こちらのテンプレート、このほかにも公衆回線からのアクセスの許可やインターネットゲートウェイの導入、そもそものPrivateLinkの構成としない等、非常に柔軟なコントロールが可能となっています。これまでAWSマネジメントコンソールとDatabricksアカウントコンソールを行ったり来たりしていたのはなんだったのか...。仕組みを学べることは意味ありますし、あとはこのテンプレートを自分でカスタマイズできるようにならなくては。

### Databricks 無料トライアル

[Databricks 無料トライアル](https://databricks.com/jp/try-databricks)