Databricksにおける顧客管理VPC(ワークスペースのデプロイ編)

# はじめに

AWS上でDatabricksのワークスペースをデプロイするには、以下の2つの方法があります。

1. AWSリソースを自動生成(背後ではCloudFormationを使用)し、ワークスペースを自動でデプロイする(メニューでは`Create Workpace > Quickstart`)
1. AWSリソースをユーザー側でマニュアルで準備して、それらを用いてワークスペースをデプロイする(メニューでは`Create Workpace > Custom AWS configuration`)

この記事では、後者の方法におけるDatabricksアカウントコンソール上の操作方法について説明します。

なお、後者の方法におけるAWSリソースの準備の方法は、以下の記事で説明されております。

#### [Credential] IAMロール・ポリシー

https://docs.databricks.com/administration-guide/account-api/iam-role.html

#### [Storage] DBFSルートのS3バケツ 
https://docs.databricks.com/administration-guide/account-api/aws-storage.html

#### [Network] ネットワーク関連 (VPC/サブネット/セキュリティグループなど)
https://qiita.com/taka_yayoi/items/9e04f78ff025f77e52a6




本記事では、上記の記事で説明されているAWSリソース(VPC, Subnet, IAMロール、S3バケツなど)の作成が既に完了していることを前提に、Databricksアカウントコンソールを用いて、上記で作成AWSリソースを登録し、ワークスペースをデプロイする方法について見ていきます。

# Databricksコンソールへのログイン

登録した情報に基づいてDatabricksコンソールへログインします。問題なくログインできますと、以下のようなページが開きます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62653/a32c15a1-bb2f-8ab5-157f-8785dbc3e49c.png)

ただし、初回ログイン時は、強制的に`Quickstart`モードが立ち上がるため、以下の方法で回避してください。

参照: [Databricksアカウントのセットアップとワークスペースの作成](https://qiita.com/taka_yayoi/items/c53beee557ae4a9643ac)

>訳者注
2022/1/7時点では、初回Databricksアカウントコンソールにログインした際は、本書で説明されているクイックスタートによる構築がデフォルトとなっています。顧客管理VPCを用いたデプロイを行う場合には、一旦以下の方法で本手法をスキップしてください。
>
>1. AWSアカウントコンソールからログアウトしておきます。
>2. Databricksアカウントコンソールにログインし、2つのメッセージ画面を経た後で、Workspace Nameに適当な名前を入力し、一旦`Start quickstart`をクリックします。上でログアウトしておかないとCloud Formationのスタックを作成してしまうので注意してください。
> 3. AWSアカウントコンソールが別タブで開きますがこちらは閉じます。
> 4. アカウントコンソールに戻るとワークスペース一覧が表示されます。
> 5. こちらで`Create workspace > Custom AWS configuration`を選択してください。


# AWSリソースを登録する

以下の3つのAWSリソースを登録します。

## IAMロール(Credential)

Databricksアカウントコンソール上から以下を実施する。

* 左メニュー`Cloud resources`を選択
* 上部の`Credential configuration`を選択
* `Add credential configuration`をクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62653/11df8ca7-e8f4-2ae8-ec29-56caccfe7d9d.png)

表示されたポップアップ画面上で以下を実施する。

* `Credential configuration name` => 任意の名前(Databricksコンソール上での名前ラベルとして使用)
* `Role ARN` => AWS上に作成したIAMロールのARNを入力
* `Add`をクリック


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62653/0ee2de31-1ccd-1ef9-7af0-4e205c633184.png)

以上で、AWSのIAMロールがCredentialとして登録されました。ここで登録した名前は後ほど使用します。


## DBFSルート用S3バケツ (Storage)

Databricksアカウントコンソール上から以下を実施する。

* 左メニュー`Cloud resources`を選択
* 上部の`Storage configuration`を選択
* `Add storage configuration`をクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62653/934044bd-579b-5f42-efcb-47c985e853fd.png)

表示されたポップアップ画面上で以下を実施する。

* `Storage configuration name` => 任意の名前(Databricksコンソール上での名前ラベルとして使用)
* `Bucket name` => AWS上に作成したS3のバケツ名を入力(先頭に`s3://`は **不要** )
* `Add`をクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62653/488f2713-31c9-06d2-d975-c28368a0febc.png)

以上で、AWSのS3バケツがStorage設定として登録されました。ここで登録した名前は後ほど使用します。


## VPC, Subnet, Securty Group (Network)

Databricksアカウントコンソール上から以下を実施する。

* 左メニュー`Cloud resources`を選択
* 上部の`Network`を選択
* 左側の`Network configurations`を選択
* `Add network configuration`をクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62653/ea0611fe-311b-9059-0bff-3b89da0542f6.png)

表示されたポップアップ画面上で以下を実施する。

* `Network configuration name` => 任意の名前(Databricksコンソール上での名前ラベルとして使用)
* `VPC ID, Subnet ID, Secirty group ID` => AWS上に作成したVPC、サブネット、セキュリティグループのリソースIDを記入する
* `Add`をクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62653/4cc02913-4b1a-5bf9-d548-466c5dc24a24.png)

以上で、AWSのネットワークリソースがNetwork設定として登録されました。ここで登録した名前は後ほど使用します。


# ワークスペースをデプロイする

最後に、登録したAWSリソースからDatabricksのワークスペースをデプロイします。

* 左メニュー`Workspaces`を選択
* `Create workspace > Custom AWS configuration`を選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62653/080fd284-cfc7-e1bb-993e-ed1b1a087a53.png)

表示されたポップアップ画面上で以下を実施する。

* 画面上部
  * `Workspace name` => 任意の名前(Databricksコンソール上での名前ラベルとして使用)
  * Region => ワークスペースをデプロイする先のAWSリージョンを指定(例: `ap-northeast-1`)
  * `Credential configuration` => 先ほどIAMロールを登録したCredential設定名を選択
  * `Storage configuration` => 先ほどS3バケツを登録したStorage設定名を選択

* 続いて、`Advanced configurations`ボタンをクリックして、以下を投入する。
  * `Network configuration` => 先ほど登録したNetwork設定名を選択

* 最後にページ最下部にある`Save`をクリックする。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62653/6e7c5aaf-ea9a-8dfc-f661-f706a19d6e3d.png)

以上で、ワークスペースのデプロイが開始され、完了後にワークスペースのログインURLリンクが作成・表示されます。ワークスペースへの初回ログインは、アカウントコンソールログインと同じユーザー名・パスワードでログインできます。


# 動作確認

ワークスペース作成後には以下の2点の動作確認も同時に実施することをお勧めします。

1. クラスタ起動・停止の確認
1. Notebook実行(Spark実行)の確認


## クラスタ起動の確認

ワークスペースにログインした状態から、以下を実施します。

* 左メニューから`コンピューティング`を選択
* 上部に表示される`Create compute`をクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62653/f6990804-ff9e-0447-54f8-7dd61bfde493.png)

クラスタ設定ページへ遷移後、設定項目は全てデフォルト値のまま、最下部にある`クラスターを作成`をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62653/1e4e33bb-982e-0a67-0d1d-ad77dbb1584a.png)

下記のように、クラスタが立ち上がるまで数分待ちます。クラスタが起動すると緑のチェックボックスのアイコンが表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62653/44937124-8ecb-af80-1536-c8b3a85d4b1e.png)

以上でクラスタの起動の確認が完了しました。


## Notebook実行(Spark実行)の確認

続いて、サンプルNotebookを実行して、立ち上げたクラスタ上でSparkコードが実行されることを確認します。

* 画面左上の`Databricks`のロゴをクリックして、トップページに移動
* トップページにある`スタート用チュートリアル`をクリックし、サンプルNotebookをロードする。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62653/60e15572-0699-4f66-7924-230816ca8df1.png)

Notebookが開けたら、以下の通り、使用するクラスタを選択します。

* Notebook UI上部の`接続`をクリック
* ポップアップUIのリスト内から先ほど起動したクラスタを選択する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62653/c93cec48-338f-955b-cbb5-e645d16df682.png)

最後に、Notebookを実行します。

* Notebook上部にある`Run All`をクリック
* Notebook内の全てのセルがエラーなく実行されるか確認する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62653/91cf7bc2-427e-9d7a-39eb-943756ae9dcf.png)


## クラスタ停止の確認

最後にクラスタが停止されるかの確認を実施します。

* 左メニューから`コンピューティング`を選択
* リスト内から先ほどの起動したクラスタを見つけ、一番右にある`停止ボタンアイコン`をクリック
* (可能であれば、10分後に)AWSコンソールから該当のEC2インスタンスがterminateされているか確認する。
  * 注意: 再利用性のため、Databricks上のクラスタを停止してから、一定時間(5-10分程度)はEC2インスタンスはterminateされません。


以上で基本的なクラスタの動作確認が完了しました。