Databricks PrivateLink構成における設定確認

Databricksの[PrivateLink構成](https://qiita.com/taka_yayoi/items/1ca54463469df05dd3ee)を組む際、自分でもよく「ワークスペースは構築できたけど、クラスターが起動しない」状況に遭遇するので、その際の確認手順をまとめます。

# 設定の確認

## セキュリティグループ

許可するポートが間違っているケースがあるので[こちら](https://qiita.com/taka_yayoi/items/1ca54463469df05dd3ee#%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97)を参考に適切にインバウンドルール、アウトバウンドルールが設定されていることを確認します。

送信先に自分自身のセキュリティグループを指定した際に警告が出ることがあります。この場合は、一度ルールが空の状態でセキュリティグループを作成してから、再度編集を行なってみてください。

## エンドポイント

エンドポイントにはサブネットとセキュリティグループを関連づける必要があります。S3エンドポイントはメインルートテーブルと関連づけます。

| エンドポイント | サブネット | セキュリティグループ |ルートテーブル|
|:--|:--|:--|:--|
|VPCエンドポイントサービス(Workspace VPC endpoint service)   | VPCエンドポイント向けサブネット  | VPCエンドポイント向けサブネット用セキュリティグループ  |-|
|VPCエンドポイントサービス(Back-end SCC relay service)   |VPCエンドポイント向けサブネット   | VPCエンドポイント向けサブネット用セキュリティグループ  |-|
|S3 VPCゲートウェイエンドポイント   |ワークスペース向けサブネット1、ワークスペース向けサブネット2   |  ワークスペース向けサブネット用セキュリティグループ |メインルートテーブル|
|STS VPCインタフェースエンドポイント   | ワークスペース向けサブネット1、ワークスペース向けサブネット2  |  ワークスペース向けサブネット用セキュリティグループ |-|
|Kinesis VPCインタフェースエンドポイント  | ワークスペース向けサブネット1、ワークスペース向けサブネット2  |  ワークスペース向けサブネット用セキュリティグループ |-|
|Glue VPCインタフェースエンドポイント  | ワークスペース向けサブネット1、ワークスペース向けサブネット2  |  ワークスペース向けサブネット用セキュリティグループ |-|

VPCエンドポイントサービスを[登録](https://qiita.com/taka_yayoi/items/1ca54463469df05dd3ee#workspace-vpc-endpoint-service%E3%81%AE%E7%99%BB%E9%8C%B2)した後に[プライベートDNS名が有効](https://qiita.com/taka_yayoi/items/1ca54463469df05dd3ee#vpc%E3%82%A8%E3%83%B3%E3%83%89%E3%83%9D%E3%82%A4%E3%83%B3%E3%83%88%E3%81%AE%E3%83%97%E3%83%A9%E3%82%A4%E3%83%99%E3%83%BC%E3%83%88dns%E5%90%8D%E3%82%92%E6%9C%89%E5%8A%B9%E5%8C%96%E3%81%99%E3%82%8B)になっていることを確認します。

## ネットワークオブジェクト

[コマンド実行時](https://qiita.com/taka_yayoi/items/1ca54463469df05dd3ee#%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%81%AE%E4%BD%9C%E6%88%90)に以下の設定を適切にしていることを確認してください。

```shell
curl -X POST -u <アカウントオーナーのメールアドレス>:<アカウントオーナーのパスワード> \
'https://accounts.cloud.databricks.com/api/2.0/accounts/<DatabricksアカウントID>/networks' \
-d '{
"network_name": "databricks-privatelink",
"vpc_id": "<VPC privatelink-testのid>",
"subnet_ids": [
"<サブネットdatabricks-ws-1のid>",
"<サブネットdatabricks-ws-2のid>"
],
"security_group_ids": [
"<セキュリティグループpl-sg-1のid>"
],
"vpc_endpoints": {
"dataplane_relay": [
"<Back-end SCC relay serviceの登録時に取得したvpc_endpoint_id>"
],
"rest_api": [
"<Workspace VPC endpoint serviceの登録時に取得したvpc_endpoint_id>"
]
}
}' | jq
```

| パラメーター | 説明 |
|:--|:--|
| vpc_id  |VPCのID   |
| subnet_ids  | 2つのワークスペース向けサブネットのID  |
| security_group_ids  | ワークスペース向けサブネット用セキュリティグループのID  |
| dataplane_relayvpc_endpoint_id  | Back-end SCC relay serviceの登録時に取得したVPCエンドポイントID。AWSのVPCエンドポイントIDではなく、登録時の結果に出力される`vpc_endpoint_id`です。  |
| rest_api   | Workspace VPC endpoint serviceの登録時に取得したVPCエンドポイントID。AWSのVPCエンドポイントIDではなく、登録時の結果に出力される`vpc_endpoint_id`です。  |

## Glueメタストアへの接続

[こちら](https://qiita.com/taka_yayoi/items/1ca54463469df05dd3ee#glue%E3%82%AB%E3%82%BF%E3%83%AD%E3%82%B0%E3%82%A8%E3%83%B3%E3%83%89%E3%83%9D%E3%82%A4%E3%83%B3%E3%83%88%E3%81%AE%E4%BD%9C%E6%88%90)を参照いただき、インスタンスプロファイルを設定してもカタログにアクセスできない場合には、クラスターのSpark設定に`spark.databricks.hive.metastore.glueCatalog.enabled true`があることを確認してください。


# 疎通確認

よくあるのがクラスターが稼働するデータプレーンと、コントロールプレーンの通信ができていないケースです。上述の設定を確認することに加え、実際に疎通しているのかを確認することも切り分けに有効です。

https://qiita.com/taka_yayoi/items/483f3392a7b40b89c152#%E6%96%B0%E8%A6%8F%E3%82%AF%E3%83%A9%E3%82%B9%E3%82%BF%E3%83%BC%E3%81%8C%E5%8F%8D%E5%BF%9C%E3%81%97%E3%81%AA%E3%81%84%E3%81%82%E3%82%8B%E3%81%84%E3%81%AF%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%83%AD%E3%82%B0%E3%81%ABdata-plane-network-is-misconfigured%E3%82%A8%E3%83%A9%E3%83%BC

Reachability Analyzerを使う手もありますが、ここではSageMakerノートブックを使います。

1. SageMakerにアクセスし、**ノートブックインスタンス**をクリックします。
![Screen Shot 2022-05-21 at 10.11.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/e28955f2-63fe-de58-0b8c-8f4f70c8bacb.png)
1. インスタンスを作成します。
    - ネットワーク: 上で作成したVPC
    - サブネット: ワークスペース向けサブネット
    - セキュリティグループ: ワークスペース向けサブネット用セキュリティグループ
    - 直接インターネットアクセス: 無効化
![Screen Shot 2022-05-21 at 8.36.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/211f35be-1441-6046-c4d3-dc2dad79bc66.png)
1. インスタンスが起動したらJupyterにアクセスします。
1. 右上の**New**から一番下の**Terminal**を選択してターミナルを開きます。これでDatabrikcsクラスターが稼働するサブネットからの疎通確認を行うことができます。
![Screen Shot 2022-05-21 at 10.14.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/3db33a2f-f492-8d0f-b2b2-f5ec61fe898b.png)
1. 以下のコマンドを実行してSuccessが帰ってくることを確認します。疎通できていない場合には関連するエンドポイント、サブネットなどの設定を確認します。

```shell
# Verify access to the web application
nc -zv tokyo.cloud.databricks.com 443

# Verify access to the secure cluster connectivity relay
nc -zv tunnel.ap-northeast-1.cloud.databricks.com 443

# Verify S3 regional access
nc -zv s3.ap-northeast-1.amazonaws.com 443

# Verify STS regional access
nc -zv sts.ap-northeast-1.amazonaws.com 443

# Verify regional Kinesis access
nc -zv kinesis.ap-northeast-1.amazonaws.com 443
```

![Screen Shot 2022-05-21 at 10.22.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/d6602ed4-7f28-0414-f4c0-f070adfb89e3.png)


:::note info
**注意**
上の接続先は東京リージョンの場合です。他のリージョンでの接続先に関しては[こちら](https://docs.databricks.com/administration-guide/cloud-configurations/aws/customer-managed-vpc.html#required-data-plane-addresses)を参照ください。
:::


### Databricks 無料トライアル

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