DatabricksのWorkspaceを作成してみた(Private Linkなし)

## 前提
・利用環境：Databricks、AWS
・カスタムAWS構成（顧客管理VPC）を使用
・参考アーキテクチャ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/26e13c0d-1eef-4ff4-8817-0c374b57b8d5.png)

https://www.databricks.com/jp/try-databricks?scid=7018Y000001Fi15QAC&utm_medium=paid+search&utm_source=google&utm_campaign=17377047998&utm_adgroup=138148229998&utm_content=trial&utm_offer=try-databricks&utm_ad=732035937815&utm_term=databricks%20%E3%83%88%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%AB&gad_source=1&gclid=CjwKCAiA8Lu9BhA8EiwAag16b8b3zbkIb3V7gp-8VUwKukXnhtVZRQ-1RY8SbETmGVgNT4bQramYmRoCX5wQAvD_BwE#account

https://aws.amazon.com/jp/free/?gclid=CjwKCAiA8Lu9BhA8EiwAag16bz9ymovIOJzlwFFMfg75NQxxY8FJPB4Hslg7RheD7ipZ5gbvOWCd1RoCyP0QAvD_BwE&trk=8a8e7906-914d-4577-93a2-d09e75ae5941&sc_channel=ps&ef_id=CjwKCAiA8Lu9BhA8EiwAag16bz9ymovIOJzlwFFMfg75NQxxY8FJPB4Hslg7RheD7ipZ5gbvOWCd1RoCyP0QAvD_BwE:G:s&s_kwcid=AL!4422!3!487544183224!e!!g!!aws%20%E7%84%A1%E6%96%99%E5%88%A9%E7%94%A8%E6%9E%A0!11772965715!117413644991&all-free-tier.sort-by=item.additionalFields.SortRank&all-free-tier.sort-order=asc&awsf.Free%20Tier%20Types=*all&awsf.Free%20Tier%20Categories=*all

## 参考ヘルプ
https://docs.databricks.com/ja/admin/workspace/create-uc-workspace.html
## 目次
1. 顧客管理VPCを作成
2. Databricksのメタストアを作成
3. Databricksの資格情報を作成
4. Databricksのワークスペースを作成  
5. トラブルシューティング 
## 手順
### 1.顧客管理VPCを作成
参考手順のブログ：

https://qiita.com/heanzza/items/a8a6bf9d38159ccd3cca

### 2.Databricksのメタストアを作成
参考手順のブログ

https://qiita.com/heanzza/items/6aff607877b2bfda65fc

### 3.Databricksの資格情報を作成
参考手順のブログ

https://qiita.com/heanzza/items/1ae74dcb317d629aa268

### 4.Databricksのワークスペースを作成
##### 1)「ワークスペース」をクリック
##### 2)「ワークスペースを作成」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/0d47a118-331a-46c5-b49d-9b2ec7137f76.png)
##### 3)「手動」→「次のページ」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/242eff4f-e664-4797-a4d6-880277fc65bb.png)
##### 4)下記の内容を設定し、「次のページ」をクリック
- 例
    - ワークスペース名：ho-ws
    - リージョン：ap-northeast-1
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/0d491160-69e9-4bf6-a1e0-e1b06642823c.png)
##### 5)「ストレージ構成の作成」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/19a72fbf-7f67-4faa-8e50-ab10862b8d09.png)
##### 6)右側の手順を参考にAWS上で、S3とIAMロールを作成する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/209e88b8-0b54-4548-915e-4c36aabbc6f7.png)
###### 6-1)S3を作成
###### 6-1-1)AWS上で、S3を作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/a7962cbc-7031-4a2c-92ac-16cb669a2e5d.png)
###### 6-1-2)「バケットを作成」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/b271878c-bef2-4c6a-b164-2a5aaa33ddd6.png)
###### 6-1-3)下記の内容を参考にバケットを作成
- 例：
    - AWSリージョン：ap-northeast-1
    - バケットタイプ：汎用
    - バケット名：ho-db-s3
    - その他：デフォルトのまま
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/5412f053-fb70-44de-b20b-ead17ea28e9c.png)
###### 6-2)IAMロールを作成
https://docs.databricks.com/ja/connect/unity-catalog/cloud-storage/storage-credentials.html#create-storage-credentials-1
###### 6-2-1)AWS上で、IAMロールをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/3be572cf-aa3a-4444-930e-d7b356c2c8e3.png)
###### 6-2-2)「ロール」→「ロールを作成」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/d5c4cb65-dc87-48de-93f7-aaa9b735e065.png)
###### 6-2-3)「カスタム信頼ポリシー」を選択し、カスタム信頼ポリシーに以下の内容を貼り付ける
- 次の内容を置き換える
    - "0000"：DatabricksのアカウントID
```
{
  "Version": "2012-10-17",
  "Statement": [{
    "Effect": "Allow",
    "Principal": {
      "AWS": [
        "arn:aws:iam::414351767826:role/unity-catalog-prod-UCMasterRole-14S5ZJVKOTYTL"
      ]
    },
    "Action": "sts:AssumeRole",
    "Condition": {
      "StringEquals": {
        "sts:ExternalId": "0000"
      }
    }
  }]
}
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/ec19fa11-caeb-4989-b029-91049ad9fb60.png)
###### 6-2-4)「次へ」→「次へ」→ロール名を入力し、「ロールを作成」をクリック
- 例：
    - ロール名：ho-iam-s3
###### 6-2-5)「ポリシー」→「ポリシーの作成」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/35e91e4e-aaa4-40a2-a07d-8e928e4b8dfb.png)
###### 6-2-6)「JSON」タブをクリックし、以下の内容を貼り付ける
```
{
  "Version": "2012-10-17",
  "Statement": [
      {
          "Action": [
              "s3:GetObject",
              "s3:PutObject",
              "s3:DeleteObject",
              "s3:ListBucket",
              "s3:GetBucketLocation"
          ],
          "Resource": [
              "arn:aws:s3:::<BUCKET>/*",
              "arn:aws:s3:::<BUCKET>"
          ],
          "Effect": "Allow"
      },
      {
          "Action": [
              "kms:Decrypt",
              "kms:Encrypt",
              "kms:GenerateDataKey*"
          ],
          "Resource": [
              "arn:aws:kms:<KMS-KEY>"
          ],
          "Effect": "Allow"
      },
      {
          "Action": [
              "sts:AssumeRole"
          ],
          "Resource": [
              "arn:aws:iam::<AWS-ACCOUNT-ID>:role/<AWS-IAM-ROLE-NAME>"
          ],
          "Effect": "Allow"
      }
    ]
}
```
- 次の内容を置き換える
    - ＜BUCKET＞：上の手順で作成した、S3バケットの名前
    - ＜KMS-KEY＞：オプション。暗号化が有効になっている場合は、S3バケットの内容を暗号化するKMSキーの名前を指定。暗号化が無効になっている場合は、IAMポリシーのKMSセクション全体を削除。
    - ＜AWS-ACCOUNT-ID＞：AWSアカウントのアカウントID
    - ＜AWS-IAM-ROLE-NAME＞：上のステップで作成したAWS IAMロールの名前
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/0241c64b-2099-4908-a9c3-76e490afa28b.png)
###### 6-2-7)「次へ」をクリック
###### 6-2-8)ポリシー名を入力し、「ポリシーの作成」をクリック
- 例：
    - ho-db-policy1
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/81561893-c03f-4e49-af1b-a21d7a286908.png)
###### 6-2-9)「ポリシー」→「ポリシーの作成」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/35e91e4e-aaa4-40a2-a07d-8e928e4b8dfb.png)
###### 6-2-10)「JSON」タブをクリックし、以下の内容を貼り付ける
```
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "ManagedFileEventsSetupStatement",
      "Effect": "Allow",
      "Action": [
        "s3:GetBucketNotification",
        "s3:PutBucketNotification",
        "sns:ListSubscriptionsByTopic",
        "sns:GetTopicAttributes",
        "sns:SetTopicAttributes",
        "sns:CreateTopic",
        "sns:TagResource",
        "sns:Publish",
        "sns:Subscribe",
        "sqs:CreateQueue",
        "sqs:DeleteMessage",
        "sqs:ReceiveMessage",
        "sqs:SendMessage",
        "sqs:GetQueueUrl",
        "sqs:GetQueueAttributes",
        "sqs:SetQueueAttributes",
        "sqs:TagQueue",
        "sqs:ChangeMessageVisibility",
        "sqs:PurgeQueue"
      ],
      "Resource": [
        "arn:aws:s3:::<BUCKET>",
        "arn:aws:sqs:*:*:*",
        "arn:aws:sns:*:*:*"
      ]
    },
    {
      "Sid": "ManagedFileEventsListStatement",
      "Effect": "Allow",
      "Action": [
        "sqs:ListQueues",
        "sqs:ListQueueTags",
        "sns:ListTopics"
      ],
      "Resource": "*"
    },
    {
      "Sid": "ManagedFileEventsTeardownStatement",
      "Effect": "Allow",
      "Action": [
        "sns:Unsubscribe",
        "sns:DeleteTopic",
        "sqs:DeleteQueue"
      ],
      "Resource": [
        "arn:aws:sqs:*:*:*",
        "arn:aws:sns:*:*:*"
      ]
    }
  ]
}
```
- 次の内容を置き換える
    - ＜BUCKET＞：手順6-1で作成した、S3バケットの名前
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/0241c64b-2099-4908-a9c3-76e490afa28b.png)
###### 6-2-11)「次へ」をクリック
###### 6-2-12)ポリシー名を入力し、「ポリシーの作成」をクリック
- 例：
    - ho-db-policy2
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/4e09db95-f6d2-40b2-9717-07fc33e91074.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/fc90ef66-51d7-486e-b1ee-0ff22885bc72.png)
###### 6-2-13)上で作成したロールを開く→「許可を追加」→「ポリシーをアタッチ」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/ba114f55-f0fe-4b9c-a0b9-eff0bb4c794a.png)
###### 6-2-14)上で作成した二つのポリシーをチェックし、「許可を追加」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/f8b2f4aa-0d9e-40d4-8bb4-749d5cd2dacc.png)
###### 6-2-15)ARNをコピーする
###### 6-2-16)「信頼関係」→「信頼ポリシーを編集」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/b220bb49-c6b6-4360-8dc6-38381cf7ddc1.png)
###### 6-2-17)プリンシパルを追加をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/22d35900-54b6-4a77-a508-22be589af24f.png)
###### 6-2-18)プリンシパルタイプ「IAM Role」、ARNにコピーしたARNを貼り付ける
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/f135f4d5-7165-4e31-94af-a53dbf2ede41.png)
###### 6-2-19)ポリシーを更新をクリック
###### 6-3)IAMロールのARNを設定
###### 6-3-1)AWS画面で作成したIAMロールを開き、ARNをコピーする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/70faa802-21ac-43e7-821e-cdb29416aebb.png)
###### 6-3-2)コピーしたARNをDatabricksの「IAMロールARN」欄に貼り付ける
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/1840ed9a-7573-4758-bb77-0bcaad271429.png)
###### 6-4)S3のバケットポリシーを生成する
###### 6-4-1)下記の内容を入力し、「ポリシーを生成」をクリック
- 例：
    - ストレージ設定名：ho-db-s3
    - バケット名：ho-db-s3
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/10dbfb0b-d270-4d47-a1f2-fddd59f66173.png)
###### 6-4-2)生成されたポリシーをコピーする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/f28f48df-f16c-48ec-bc70-e51839a8221a.png)
###### 6-5)上で作成したS3にポリシーを貼り付ける
###### 6-5-1)AWS画面で、上で作成したS3を開く
###### 6-5-2)「アクセス許可」→バケットポリシーの「編集」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/48539e5b-78bd-40d5-bdfa-ae5086b3d32c.png)
###### 6-5-3)上でコピーしたポリシーをポリシー欄に貼り付けし、「変更の保存」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/c2be0f8f-f6f4-4def-a7a4-8be2604e085c.png)
###### 6-6)「ストレージ設定の作成・続行」をクリック
###### 7)「資格情報を設定」で、手順3で作成した資格情報を選択
###### 8)「高度な設定」をクリックし、メタストアから手順2で作成したメタストアを選択
###### 9)ネットワーク構成から手順1で作成したVPCを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/67defaa5-e355-4492-b2e3-254da8ad6107.png)
###### 10)「次のページ」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/3bc010f3-de92-4549-96e0-548d99fa97c1.png)
###### 11)「ワークスペースを作成」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/6f8863ca-d1b6-4fa4-aa03-f97e617ea388.png)
###### 12)ワークスペースのステータスが「Running」になると成功！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/f7856bb3-cbc4-4824-83b6-d96bad82a615.png)
### 5.トラブルシューティング
#### 1)エラーメッセージ
```
MALFORMED_REQUEST: Failed network validation checks for network xxx-vpc; 
got error:ArrayBuffer(
error_type: "credentials" error_message: "Access denied; need permission for ec2:DescribeNetworkAcls" , 
error_type: "credentials" error_message: "Access denied; need permission for ec2:DescribeVpcAttribute" , 
error_type: "vpc" error_message: "DNS Support not enabled for vpc-0e0eaea756ecedb34." )
```
- 原因：クロスアカウントIAMロールのポリシーの権限が足りない
- 対策：顧客管理PCへデプロイの場合、[オプション2](https://docs.databricks.com/ja/admin/account-settings-e2/credentials.html#option-2-customer-managed-vpc-with-default-restrictions-policy)のポリシーを設定しているかを確認
#### 2)エラーメッセージ
```
Workspace failed to launch.Error: Unknown Error.
```
- 原因：Databricks側のストレージの設定で、異なったIAMロールのARNが貼り付けされた
- 対策：「ワークスペース更新」で、ストレージ用のIAMロールのARNを設定