<p><!-- METADATA: ARCHITECTURE_DRAFT_DATABRICKS_SERVERLESS -->
本記事は<strong>Geminiの出力をプロンプト工学で整理した業務ドラフト(未検証)</strong>です。</p>
<h1 class="wp-block-heading">Azure Databricks サーバーレスワークスペースによるインフラ運用レス化とセキュアなデータ統合アーキテクチャ</h1>
<h2 class="wp-block-heading">【導入】</h2>
<p>クラスター管理のオーバーヘッドと起動遅延を解消し、クラウドリソースの過剰プロビジョニングによるコスト最適化の課題を解決します。</p>
<hr/>
<h2 class="wp-block-heading">【アーキテクチャ設計】</h2>
<p>Azure Databricksのサーバーレスアーキテクチャでは、従来の「クラシックデータプレーン(顧客のAzureサブスクリプション内にVMを配置)」とは異なり、コンピュートリソースがDatabricksが管理する安全な「サーバーレスデータプレーン」上で動的に実行されます。</p>
<p>これにより、ユーザーは仮想マシンのプロビジョニング、パッチ適用、スケーリングルールの定義といったインフラ運用から完全に解放されます。データソースへのセキュアなアクセスは、Databricks管理のデータプレーンから顧客テナントのデータソース(Azure Data Lake Storage Gen2など)に対して動的に構築される「Managed Private Endpoint(管理対象プライベートエンドポイント)」を経由して行われます。</p>
<div class="wp-block-merpress-mermaidjs diagram-source-mermaid"><pre class="mermaid">
graph TD
User["データエンジニア / アナリスト"] -->|HTTPS / Microsoft Entra ID| CP["Azure Databricks コントロールプレーン<br>Microsoft管理"]
CP -->|ワークロード指示| SDP["サーバーレス データプレーン<br>Databricks管理サブネット"]
SDP -->|Managed Private Endpoint| ADLS["Azure Data Lake Storage Gen2<br>顧客サブネット / Firewalled"]
SDP -->|Managed Private Endpoint| Synapse["Azure Synapse / SQL DB"]
SDP -->|メタデータ制御| UC["Unity Catalog"]
CP -->|診断ログ転送| LA["Azure Log Analytics"]
</pre></div>
<h3 class="wp-block-heading">コンポーネント解説</h3>
<ul class="wp-block-list">
<li><p><strong>コントロールプレーン</strong>: ワークスペースの管理、ノートブックの保存、ジョブスケジューリング、Entra ID認証などを担当します。</p></li>
<li><p><strong>サーバーレスデータプレーン</strong>: コンピュートリソース(Sparkクラスタ)が動作する環境です。DatabricksのAzureサブスクリプション内で隔離されたコンテナまたはVMとして起動し、秒単位で自動スケールします。</p></li>
<li><p><strong>Managed Private Endpoint</strong>: サーバーレスデータプレーンから顧客のプライベートなAzureリソースへ安全に通信するための専用ネットワーク経路です。</p></li>
</ul>
<hr/>
<h2 class="wp-block-heading">【実装・デプロイ手順】</h2>
<p>以下は、Terraformを使用して、Unity Catalogおよびサーバーレス機能を有効化したAzure Databricksワークスペースをデプロイし、ADLS Gen2へのManaged Private Endpointを構成するコードスニペットです。</p>
<div class="codehilite">
<pre data-enlighter-language="generic"># AzureプロバイダーとDatabricksプロバイダーの定義
terraform {
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "~> 3.90.0"
}
databricks = {
source = "databricks/databricks"
version = "~> 1.35.0"
}
}
}
provider "azurerm" {
features {}
}
variable "prefix" {
default = "adb-serverless-demo"
}
# 1. リソースグループの作成
resource "azurerm_resource_group" "rg" {
name = "${var.prefix}-rg"
location = "japaneast"
}
# 2. Azure Databricks ワークスペースの作成 (Premium SKUが必要)
resource "azurerm_databricks_workspace" "workspace" {
name = "${var.prefix}-workspace"
resource_group_name = azurerm_resource_group.rg.name
location = azurerm_resource_group.rg.location
sku = "premium"
managed_resource_group_name = "${var.prefix}-workspace-managed-rg"
tags = {
Environment = "Production"
Compute = "Serverless"
}
}
# 3. データ保護用のストレージアカウント (ADLS Gen2)
resource "azurerm_storage_account" "storage" {
name = "st${var.prefix}data"
resource_group_name = azurerm_resource_group.rg.name
location = azurerm_resource_group.rg.location
account_tier = "Standard"
account_replication_type = "LRS"
is_hns_enabled = true # hierarchical namespace for ADLS Gen2
network_rules {
default_action = "Deny"
bypass = ["AzureServices"]
ip_rules = []
}
}
# 4. Databricks サーバーレス用 Managed Private Endpoint の構成
# ※注: Databricks Terraformプロバイダを使用して、Databricksコントロールプレーン経由でエンドポイントを申請します。
provider "databricks" {
host = azurerm_databricks_workspace.workspace.workspace_url
}
resource "databricks_mws_vpc_endpoint" "storage_pe" {
provider = databricks
connection_name = "pe-to-adls-gen2"
aws_vpc_endpoint_id = null # Azureでは未使用
gcp_vpc_endpoint_info = [] # Azureでは未使用
# Azure用のプライベートリンク情報
azure_private_endpoint_info {
resource_id = azurerm_storage_account.storage.id
subresource_name = "blob"
}
}
</pre>
</div>
<h3 class="wp-block-heading">デプロイ後の承認プロセス(Azure CLI)</h3>
<p>Managed Private Endpointは作成直後「Pending(保留中)」ステータスになります。データソース側のAzureサブスクリプション所有者が接続を承認する必要があります。</p>
<div class="codehilite">
<pre data-enlighter-language="generic"># プライベートエンドポイント接続のIDを取得
PE_CONNECTION_ID=$(az network private-endpoint-connection list \
--id "/subscriptions/<Subscription_ID>/resourceGroups/adb-serverless-demo-rg/providers/Microsoft.Storage/storageAccounts/stadbserverlessdata" \
--query "[?properties.privateLinkServiceConnectionState.status=='Pending'].id" -o tsv)
# 接続の承認を実行
az network private-endpoint-connection approve \
--id "$PE_CONNECTION_ID" \
--description "Approve connection from Databricks Serverless Data Plane"
</pre>
</div><hr/>
<h2 class="wp-block-heading">【アイデンティティとセキュリティ】</h2>
<p>サーバーレスアーキテクチャにおけるセキュリティ境界は、ネットワーク(インフラ)レイヤーからアイデンティティ(認証・認可)レイヤーへとシフトします。</p>
<h3 class="wp-block-heading">1. 統合アイデンティティと最小特権の原則 (RBAC)</h3>
<ul class="wp-block-list">
<li><p><strong>Microsoft Entra ID 連携</strong>: ワークスペースへのアクセスはEntra IDで一元管理され、MFAや「条件付きアクセス(Conditional Access)」ポリシーを強制します。</p></li>
<li><p><strong>Unity Catalogによるデータガバナンス</strong>: サーバーレスコンピュート上で実行されるクエリは、すべてUnity Catalogのメタデータ権限に従います。テーブル、ビュー、行、列レベルのアクセス制御(Row/Column-level Security)が、サーバーレスSQLおよびサーバーレスノートブック全体に適用されます。</p></li>
</ul>
<h3 class="wp-block-heading">2. ネットワークセキュリティとデータの境界隔離</h3>
<ul class="wp-block-list">
<li><p><strong>Managed Private Endpoints</strong>: サーバーレスコンピュートからのデータ流出(Data Exfiltration)を防ぐため、ターゲットリソースへのアクセスを特定のAzure PaaSに限定します。</p></li>
<li><p><strong>ネットワーク接続構成(NCC)</strong>: Databricks管理画面からNCC(Network Connectivity Config)を設定し、特定のリージョンのサーバーレスコンピュートが使用するパブリックIPまたはプライベート接続ルールを定義・固定化します。</p></li>
</ul>
<hr/>
<h2 class="wp-block-heading">【運用・コスト最適化】</h2>
<h3 class="wp-block-heading">1. コスト最適化(FinOps)</h3>
<p>従来のクラシックデータプレーンでは、クラスターの「自動停止(Auto-Termination)」が作動するまでのアイドリング時間(最小10〜20分推奨)にもVM課金が発生していました。</p>
<ul class="wp-block-list">
<li><p><strong>秒単位課金</strong>: サーバーレスコンピュートはクエリやジョブが開始された瞬間に起動し(実質的なコールドスタート時間は数秒)、処理が終了した瞬間に課金が停止します。</p></li>
<li><p><strong>DBU(Databricks Unit)の可視化</strong>: システムテーブル(<code>system.billing.usage</code>)を使用して、サーバーレスコンピュート別の消費コストをリアルタイムにクエリできます。</p></li>
</ul>
<div class="codehilite">
<pre data-enlighter-language="generic">-- サーバーレスワークロードごとのDBU消費量を集計するSQL例
SELECT
usage_date,
sku_name,
sum(dbus) as total_dbus,
sum(amount_in_usd) as total_estimated_cost
FROM
system.billing.usage
WHERE
sku_name LIKE '%SERVERLESS%'
GROUP BY
usage_date, sku_name
ORDER BY
usage_date DESC;
</pre>
</div>
<h3 class="wp-block-heading">2. 可観測性(Observability)</h3>
<ul class="wp-block-list">
<li><strong>Log Analytics との統合</strong>: Diagnostic Settings(診断設定)を有効化し、<code>DatabricksSQL</code> や <code>DatabricksServerless</code> カテゴリのログをAzure Log Analyticsへ転送します。これにより、誰がどのクエリを実行し、どのデータにアクセスしたかの監査ログを長期保管できます。</li>
</ul>
<hr/>
<h2 class="wp-block-heading">【まとめ】</h2>
<p>Azure Databricks サーバーレスワークスペースを安全かつ効率的に導入するための3つの要点は以下の通りです。</p>
<ol class="wp-block-list">
<li><p><strong>コールドスタートの大幅な短縮とインフラフリーの実現</strong>: クラスターのプロビジョニング待ち時間が数分から数秒へ短縮され、アドホック分析の生産性が劇的に向上します。</p></li>
<li><p><strong>Managed Private Endpointによるセキュリティ設計の必須化</strong>: サーバーレスコンピュートはDatabricks管理のテナントで動作するため、自社データソース(ADLS Gen2等)への接続にはプライベートエンドポイントの構成とAzure側での承認フローが必須となります。</p></li>
<li><p><strong>Unity Catalogによるガバナンスの強制</strong>: サーバーレスワークスペースの能力を最大限に引き出すには、レガシーなHive MetastoreからUnity Catalogへの移行が前提となります。データガバナンスモデルを事前に設計してください。</p></li>
</ol>
本記事はGeminiの出力をプロンプト工学で整理した業務ドラフト(未検証)です。
Azure Databricks サーバーレスワークスペースによるインフラ運用レス化とセキュアなデータ統合アーキテクチャ
【導入】
クラスター管理のオーバーヘッドと起動遅延を解消し、クラウドリソースの過剰プロビジョニングによるコスト最適化の課題を解決します。
【アーキテクチャ設計】
Azure Databricksのサーバーレスアーキテクチャでは、従来の「クラシックデータプレーン(顧客のAzureサブスクリプション内にVMを配置)」とは異なり、コンピュートリソースがDatabricksが管理する安全な「サーバーレスデータプレーン」上で動的に実行されます。
これにより、ユーザーは仮想マシンのプロビジョニング、パッチ適用、スケーリングルールの定義といったインフラ運用から完全に解放されます。データソースへのセキュアなアクセスは、Databricks管理のデータプレーンから顧客テナントのデータソース(Azure Data Lake Storage Gen2など)に対して動的に構築される「Managed Private Endpoint(管理対象プライベートエンドポイント)」を経由して行われます。
graph TD
User["データエンジニア / アナリスト"] -->|HTTPS / Microsoft Entra ID| CP["Azure Databricks コントロールプレーン
Microsoft管理"]
CP -->|ワークロード指示| SDP["サーバーレス データプレーン
Databricks管理サブネット"]
SDP -->|Managed Private Endpoint| ADLS["Azure Data Lake Storage Gen2
顧客サブネット / Firewalled"]
SDP -->|Managed Private Endpoint| Synapse["Azure Synapse / SQL DB"]
SDP -->|メタデータ制御| UC["Unity Catalog"]
CP -->|診断ログ転送| LA["Azure Log Analytics"]
コンポーネント解説
コントロールプレーン: ワークスペースの管理、ノートブックの保存、ジョブスケジューリング、Entra ID認証などを担当します。
サーバーレスデータプレーン: コンピュートリソース(Sparkクラスタ)が動作する環境です。DatabricksのAzureサブスクリプション内で隔離されたコンテナまたはVMとして起動し、秒単位で自動スケールします。
Managed Private Endpoint: サーバーレスデータプレーンから顧客のプライベートなAzureリソースへ安全に通信するための専用ネットワーク経路です。
【実装・デプロイ手順】
以下は、Terraformを使用して、Unity Catalogおよびサーバーレス機能を有効化したAzure Databricksワークスペースをデプロイし、ADLS Gen2へのManaged Private Endpointを構成するコードスニペットです。
# AzureプロバイダーとDatabricksプロバイダーの定義
terraform {
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "~> 3.90.0"
}
databricks = {
source = "databricks/databricks"
version = "~> 1.35.0"
}
}
}
provider "azurerm" {
features {}
}
variable "prefix" {
default = "adb-serverless-demo"
}
# 1. リソースグループの作成
resource "azurerm_resource_group" "rg" {
name = "${var.prefix}-rg"
location = "japaneast"
}
# 2. Azure Databricks ワークスペースの作成 (Premium SKUが必要)
resource "azurerm_databricks_workspace" "workspace" {
name = "${var.prefix}-workspace"
resource_group_name = azurerm_resource_group.rg.name
location = azurerm_resource_group.rg.location
sku = "premium"
managed_resource_group_name = "${var.prefix}-workspace-managed-rg"
tags = {
Environment = "Production"
Compute = "Serverless"
}
}
# 3. データ保護用のストレージアカウント (ADLS Gen2)
resource "azurerm_storage_account" "storage" {
name = "st${var.prefix}data"
resource_group_name = azurerm_resource_group.rg.name
location = azurerm_resource_group.rg.location
account_tier = "Standard"
account_replication_type = "LRS"
is_hns_enabled = true # hierarchical namespace for ADLS Gen2
network_rules {
default_action = "Deny"
bypass = ["AzureServices"]
ip_rules = []
}
}
# 4. Databricks サーバーレス用 Managed Private Endpoint の構成
# ※注: Databricks Terraformプロバイダを使用して、Databricksコントロールプレーン経由でエンドポイントを申請します。
provider "databricks" {
host = azurerm_databricks_workspace.workspace.workspace_url
}
resource "databricks_mws_vpc_endpoint" "storage_pe" {
provider = databricks
connection_name = "pe-to-adls-gen2"
aws_vpc_endpoint_id = null # Azureでは未使用
gcp_vpc_endpoint_info = [] # Azureでは未使用
# Azure用のプライベートリンク情報
azure_private_endpoint_info {
resource_id = azurerm_storage_account.storage.id
subresource_name = "blob"
}
}
デプロイ後の承認プロセス(Azure CLI)
Managed Private Endpointは作成直後「Pending(保留中)」ステータスになります。データソース側のAzureサブスクリプション所有者が接続を承認する必要があります。
# プライベートエンドポイント接続のIDを取得
PE_CONNECTION_ID=$(az network private-endpoint-connection list \
--id "/subscriptions/<Subscription_ID>/resourceGroups/adb-serverless-demo-rg/providers/Microsoft.Storage/storageAccounts/stadbserverlessdata" \
--query "[?properties.privateLinkServiceConnectionState.status=='Pending'].id" -o tsv)
# 接続の承認を実行
az network private-endpoint-connection approve \
--id "$PE_CONNECTION_ID" \
--description "Approve connection from Databricks Serverless Data Plane"
【アイデンティティとセキュリティ】
サーバーレスアーキテクチャにおけるセキュリティ境界は、ネットワーク(インフラ)レイヤーからアイデンティティ(認証・認可)レイヤーへとシフトします。
1. 統合アイデンティティと最小特権の原則 (RBAC)
Microsoft Entra ID 連携: ワークスペースへのアクセスはEntra IDで一元管理され、MFAや「条件付きアクセス(Conditional Access)」ポリシーを強制します。
Unity Catalogによるデータガバナンス: サーバーレスコンピュート上で実行されるクエリは、すべてUnity Catalogのメタデータ権限に従います。テーブル、ビュー、行、列レベルのアクセス制御(Row/Column-level Security)が、サーバーレスSQLおよびサーバーレスノートブック全体に適用されます。
2. ネットワークセキュリティとデータの境界隔離
Managed Private Endpoints: サーバーレスコンピュートからのデータ流出(Data Exfiltration)を防ぐため、ターゲットリソースへのアクセスを特定のAzure PaaSに限定します。
ネットワーク接続構成(NCC): Databricks管理画面からNCC(Network Connectivity Config)を設定し、特定のリージョンのサーバーレスコンピュートが使用するパブリックIPまたはプライベート接続ルールを定義・固定化します。
【運用・コスト最適化】
1. コスト最適化(FinOps)
従来のクラシックデータプレーンでは、クラスターの「自動停止(Auto-Termination)」が作動するまでのアイドリング時間(最小10〜20分推奨)にもVM課金が発生していました。
-- サーバーレスワークロードごとのDBU消費量を集計するSQL例
SELECT
usage_date,
sku_name,
sum(dbus) as total_dbus,
sum(amount_in_usd) as total_estimated_cost
FROM
system.billing.usage
WHERE
sku_name LIKE '%SERVERLESS%'
GROUP BY
usage_date, sku_name
ORDER BY
usage_date DESC;
2. 可観測性(Observability)
- Log Analytics との統合: Diagnostic Settings(診断設定)を有効化し、
DatabricksSQL や DatabricksServerless カテゴリのログをAzure Log Analyticsへ転送します。これにより、誰がどのクエリを実行し、どのデータにアクセスしたかの監査ログを長期保管できます。
【まとめ】
Azure Databricks サーバーレスワークスペースを安全かつ効率的に導入するための3つの要点は以下の通りです。
コールドスタートの大幅な短縮とインフラフリーの実現: クラスターのプロビジョニング待ち時間が数分から数秒へ短縮され、アドホック分析の生産性が劇的に向上します。
Managed Private Endpointによるセキュリティ設計の必須化: サーバーレスコンピュートはDatabricks管理のテナントで動作するため、自社データソース(ADLS Gen2等)への接続にはプライベートエンドポイントの構成とAzure側での承認フローが必須となります。
Unity Catalogによるガバナンスの強制: サーバーレスワークスペースの能力を最大限に引き出すには、レガシーなHive MetastoreからUnity Catalogへの移行が前提となります。データガバナンスモデルを事前に設計してください。
コメント