Databricksのサーバーレスコンピュート

[Serverless compute \| Databricks on AWS](https://docs.databricks.com/serverless-compute/index.html) [2022/8/26時点]の翻訳です。

:::note warn
本書は抄訳であり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
:::

:::note
**プレビュー**
本機能は[パブリックプレビュー](https://docs.databricks.com/release-notes/release-types.html)です。
:::

Databricksプラットフォームアーキテクチャのサーバーレスコンピュートバージョンを用いると、計算機レイヤーは、お客様のAWSクラウドアカウントではなくDatabricksのAWSクラウドアカウントに存在することになります。

現状のリリースにおいては、サーバーレスコンピュートは[Databricks SQL](https://docs.databricks.com/sql/get-started/index.html)での利用をサポートしています。管理者は、Databricksによって管理される即時利用可能な計算資源を利用するサーバーレスSQLウェアハウス(以前のSQLエンドポイント)を有効化することができます。サーバーレスSQLウェアハウスは、DatabricksのAWSアカウントの計算機クラスターを使用します。従来のお客様がホスティングするSQLウェアハウスと同様にDatabricks SQLのクエリーを処理することができ、従来のお客様がホスティングするSQLエンドポイントは、クラシックSQLウェアハウスと呼称されます。

Databricksでは、SQLエンドポイントからSQLウェアハウスへと名前を変更しました。これは、業界においてエンドポイントは接続するネットワークとコミュニケーションするリモートの計算デバイスやクラウドサービスへのエントリーポイントを意味するためです。データウェアハウスは、容易に洞察を導き出したり、レポートを行うためにビジネスフレンドリーな方法で複数のソースにある現在あるいは過去のデータを格納するデータ管理システムです。SQLウェアハウスは、この計算資源の全ての機能を正確に述べています。

サーバーレスSQLウェアハウスを作成する前に、[ワークスペースでサーバーレスDatabricks SQLウェアハウスを有効化](https://docs.databricks.com/sql/admin/serverless.html)する必要があります。ワークスペースでサーバーレスSQLウェアハウスを有効化すると、以下のことを実施できるようになります。

- [UI](https://qiita.com/taka_yayoi/items/23d7789198c2dcd66381#sql%E3%82%A6%E3%82%A7%E3%82%A2%E3%83%8F%E3%82%A6%E3%82%B9%E3%81%AE%E4%BD%9C%E6%88%90)あるいは[API](https://docs.databricks.com/sql/api/sql-endpoints.html#create-warehouse)で新規SQLウェアハウスを作成する際、デフォルトでサーバーレスとなりますが、新規クラシックSQLウェアハウスを作成することも可能です。
- [クラシックSQLウェアハウスをサーバーレスSQLウェアハウスに変換](https://qiita.com/taka_yayoi/items/23d7789198c2dcd66381#%E3%82%AF%E3%83%A9%E3%82%B7%E3%83%83%E3%82%AFsql%E3%82%A6%E3%82%A7%E3%82%A2%E3%83%8F%E3%82%A6%E3%82%B9%E3%82%92%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%83%AC%E3%82%B9sql%E3%82%A6%E3%82%A7%E3%82%A2%E3%83%8F%E3%82%A6%E3%82%B9%E3%81%AB%E5%A4%89%E6%9B%B4)したり、サーバーレスをクラシックに変換できます。
- この機能はDatabricks SQLにのみ影響します。Data Science & EngineeringやDatabricks Machine Learningワークスペース環境におけるノートブック、ジョブと連携するDatabricksランタイムクラスターには影響しません。Databricksランタイムクラスターは常にお客様のAWSアカウントのクラシックデータプレーンで動作します。[他のDatabricksアーキテクチャに対するサーバレスコンピュートの比較](#他のdatabricksアーキテクチャに対するサーバレスコンピュートの比較)を参照ください。

Databricksでは、サーバレスSQウェアハウスは、AWSのリージョン`eu-west-1`、`ap-southeast-2`、`us-east-1`、`us-west-2`でサポートされています。[Supported Databricks regions](https://docs.databricks.com/administration-guide/cloud-configurations/aws/regions.html)を参照ください。

# 他のDatabricksアーキテクチャに対するサーバレスコンピュートの比較

Databricksは*コントロールプレーン*と*データプレーン*で処理を行います。

- コントロールプレーンには、DatabricksのAWSアカウントで管理されるバックエンドサービスが含まれます。Databricks SQLのクエリー、ノートブックのコマンド、その他ワークスペースの設定がコントロールプレーンに暗号化された状態で保持されます。
- データプレーンでは、計算リソースのクラスターで処理されるデータが保持されます。

*クラシックデータプレーン*(従来のDatabricksプラットフォームアーキテクチャ)と*サーバーレスデータプレーン*の間には重要な違いが存在します。

- クラシックデータプレーンにおいては、Databricksの計算リソースはお客様のクラウドアカウントで実行されます。クラスターはクエリー(Databricks SQL)やノートブック(Data Science & EngineeringあるいはDatabricks Machine Learning環境)を用いて分散データ分析を実行します。
    - 新規クラスターはお客様のクラウドアカウントのワークスペース用仮想ネットワークの中に作成されます。
    - クラシックデータプレーンはお客様のクラウドアカウントで処理を行うために、生来の分離性を有しています。クラシックデータプレーンは複数のお客様で共有されません。
- サーバーレスデータプレーンにおいては、Databricksの計算リソースはDatabricksのクラウドアカウント内の特別な計算機レイヤーで実行されます。
    - 現時点のリリースにおいては、サーバーレスデータプレーンはサーバーレスSQLウェアハウスでのみ使用されます。この機能の有効化によって、DatabricksランタイムクラスターのData Science & EngineeringあるいはDatabricks Machine Learning環境における挙動は変わりません。
    - サーバーレスデータプレーンはDatabricksのクラウドアカウントにおいて、複数のお客様で共有されます。
    - サーバーレスデータプレーンのお客様データを保護するために、サーバーレスコンピュートはワークスペースごとのネットワーク境界内で実行され、異なるお客様のDatabricksワークスペースを分離するための様々なセキュリティレイヤーや、同じお客間における複数クラスター間における追加のネットワーク制御を適用します。

Databricksは、サーバーレスデータプレーンをお客様のクラシックデータプレーンと同じAWSリージョンに作成します。お使いのワークスペースのコントロールプレーンのインスタンスは通常同じAWSリージョンに存在しますが、同じリージョンであることが保証される訳ではありません。

以下の図では、サーバーレスデータプレーンとクラシックデータプレーンの重要な違いを示しています。
![](https://docs.databricks.com/_images/serverless-compute-data-plane-comparison-aws.png)

図で触れられているセキュアクラスター接続の詳細に関しては、[Databricksにおけるセキュアクラスター接続](https://qiita.com/taka_yayoi/items/f2db6631b264b0956413)を参照ください。

以下の表では、製品セキュリティにフォーカスして、サーバーレスコンピュートと他のDatabricksのバージョンとの違いをまとめています。これらはセキュリティ機能の完全かつ詳細な説明ではありません。サーバーレスコンピュートのセキュリティの詳細や、以下の表に対する質問がある場合には、Databricks担当にお問い合わせください。

| 項目 | サーバーレスデータプレーン(AWSのみ) | クラシックデータプレーン(AWSおよびAzure) |
|:--|:--|:--|
|コントロールプレーンのリソースの場所   |Databricksクラウドアカウント   |Databricksクラウドアカウント   |
|データプレーンの計算リソースの場所   |サーバーレスデータプレーン(Databricks AWSアカウントのVPC)   | クラシックデータプレーン(お客様のクラウドプロバイダーアカウントのVPC)  |
|データプレーンの計算リソース   |Databricks管理のKubernetes (EKS)クラスター   |Databricks管理のスタンドアローンVM   |
|データプレーンに対するお客様アクセス   |Databricksコントロールプレーン経由のアクセス   |**AWS:** お客様AWSアカウント内での直接アクセス。Databricksコントロールプレーン経由での追加の間接的アクセス。<br>**Azure:** VNetインジェクション(顧客管理VNet)の場合でもクラスターに対する読み取り専用の直接アクセス。Databricksコントロールプレーン経由での追加の間接的アクセス  |
|Databricks SQLにおいて割り当てられていないVMの支払い   |Databricks   |適用されません。クラシックSQLエンドポイントにおいては、割り当てられないVMという概念が存在しません。Databricks SQLにおいては、ノートブック、ジョブに対するウォームアップされたインスタンスプールに該当するものは存在しません。|
|エンドポイントの起動後、Databricks SQLのクエリーを実行する際のVMに対する支払い   |オートストップがSQLエンドポイントを停止するまでは、DBUに基づくお客様の支払い。     |VMに関してはお客様がAWSに支払い。加えて、DBUに基づくDatabricksへの支払い。  |
|データプレーンにおけるバーチャルプライベートネットワーク(VPC)  | DatabricksアカウントのVPCはお客様間で共有され、ワークスペース間、クラスター間に追加のネットワーク境界が存在します。  |**AWS:** 占有。お客様アカウントのVPCとなります。<br>**Azure:** 占有。お客様アカウントのVNetとなります。 |
|OSイメージ   |Databricksが修正を加えたクラウド管理のAmazon-linux2   |Databricks管理のUbuntuあるいはCentOS   |
|VPCのデフォルトの外向き通信を管理するテクノロジー   |Databricksが作成するAWSインターネットゲートウェイ   |デフォルトのインターネットゲートウェイあるいはクラウドから提供されるロードバランサー   |
|VPC、ファイアウォールのカスタマイズ   |いいえ   |はい   |
|CIDRレンジのカスタマイズ   |いいえ   |はい   |
|パブリックIP   |はい   |セキュアクラスター接続<ul><li>無効化されている場合、VMごとに一つのパブリックIP<li>有効化されている場合(デフォルト)、VMにパブリックIPは存在しません。</ul>   |
|Databricksランタイムクラスターにおけるコンテナレベルのネットワーク分離   |  Kubernetesのネットワークポリシーを使用 |Databricks管理の`iptable`ルールを使用   |
|DatabricksランタイムクラスターにおけるVMレベルのネットワーク分離   |セキュリティグループによる分離   |セキュリティグループおよびVPC(AWS)あるいはVNet(Azure)による分離   |
|VM分離   |クラスターにおけるVMはVM同士の通信は許可されますが、他のクラスターからの内部向け通信は許可されません。   | クラスターにおけるVMはVM同士の通信は許可されますが、他のクラスターからの内部向け通信は許可されません。  |
|コントロールプレーンとデータプレーンの通信   |コントロールプレーンから開始された接続を用いて、パブリックIPを用いたDatabricks管理によるTLS暗号化されたコミュニケーション   |セキュアクラスター接続<ul><li>有効化された場合(AWS E2とAzureではデフォルト): 個々のVMはクラスター作成時にコントロールプレーンのSCCリレーに接続<li>無効化された場合: コントロールプレーンはパブリックIPを用いて個々のVMに接続</ul>   |
|初期デプロイメントにおけるクレディンシャル   |Databricks内部のIAMロール   | <ul><li>**AWS:** お客様提供のIAMロール<li>**Azure:** 不要</ul>  |
|通常のデータプレーンのオペレーションにおけるクレディンシャル   |Databricksがお客様提供のIAMロールの`sts:AssumeRole`を呼び出し   | <ul><li>**AWS:** お客様提供のインスタンスプロファイルを用いてVMを実行(`sts:PassRole`)<li>**Azure:** ファーストパーティアプリケーショントークン</ul>  |
|DBFSルート、ワークスペースシステムデータに対するストレージの場所   | ワークスペース作成時にお客様が自身のアカウントでS3バケットを作成  |<ul><li>**AWS:** ワークスペース作成時にお客様がS3バケットを作成<li>**Azure:** ワークスペース作成時にDatabricksがお客様アカウントにblobストレージを作成</ul>   |

### Databricks 無料トライアル

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