Azure Databricks サーバーレスワークスペースによるインフラ運用レス化とセキュアなデータ統合アーキテクチャ

Tech

本記事は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(Databricks Unit)の可視化: システムテーブル(system.billing.usage)を使用して、サーバーレスコンピュート別の消費コストをリアルタイムにクエリできます。

-- サーバーレスワークロードごとの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(診断設定)を有効化し、DatabricksSQLDatabricksServerless カテゴリのログをAzure Log Analyticsへ転送します。これにより、誰がどのクエリを実行し、どのデータにアクセスしたかの監査ログを長期保管できます。

【まとめ】

Azure Databricks サーバーレスワークスペースを安全かつ効率的に導入するための3つの要点は以下の通りです。

  1. コールドスタートの大幅な短縮とインフラフリーの実現: クラスターのプロビジョニング待ち時間が数分から数秒へ短縮され、アドホック分析の生産性が劇的に向上します。

  2. Managed Private Endpointによるセキュリティ設計の必須化: サーバーレスコンピュートはDatabricks管理のテナントで動作するため、自社データソース(ADLS Gen2等)への接続にはプライベートエンドポイントの構成とAzure側での承認フローが必須となります。

  3. Unity Catalogによるガバナンスの強制: サーバーレスワークスペースの能力を最大限に引き出すには、レガシーなHive MetastoreからUnity Catalogへの移行が前提となります。データガバナンスモデルを事前に設計してください。

ライセンス:本記事のテキスト/コードは特記なき限り CC BY 4.0 です。引用の際は出典URL(本ページ)を明記してください。
利用ポリシー もご参照ください。

コメント

タイトルとURLをコピーしました