このドキュメントでは、クロスクラウド レイクハウスを設定して、Google Cloud内から Databricks Unity Catalog カタログのデータを直接クエリする方法について説明します。この機能により、外部データソースを既存のGoogle Cloud 環境と統合して、データ分析を統合できます。
その後、Lakehouse for Apache Iceberg を使用して、フェデレーション データへのアクセスを管理できます。
始める前に
- Lakehouse の概要を確認して、Lakehouse がデータへのアクセスを管理する方法を理解します。
- その仕組みについては、クロスクラウド Lakehouse についてをご覧ください。
- サポートされているカタログを確認して、外部ロケーションの要件とサポートされている構成を確認します。
- リージョン Secret Manager シークレットの使用方法を理解する。これは、Databricks Unity Catalog を使用してクロスクラウド Lakehouse を設定するために必要です。
- ターゲット カタログへの読み取りアクセス権を持つ OAuth サービス プリンシパル(クライアント ID とクライアント シークレット)をリモート カタログ プロバイダ内に生成します。このプロセスはこのドキュメントの対象外です。
- 省略可: Google Cloud VPC とリモート クラウド プロバイダの VPC(AWS など)間のプライベート相互接続を介してクエリをルーティングする場合は、リモート プロバイダのアカウントが有効であることを確認し、Cross-Cloud InterconnectまたはPartner Interconnectをプロビジョニングし、Cloud Router との BGP セッションを確立し、両方のクラウド環境に必要な IAM 権限があることを確認します。
- Google Cloud アカウントにログインします。 Google Cloudを初めて使用する場合は、 アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
-
Verify that billing is enabled for your Google Cloud project.
Enable the BigLake, Secret Manager APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
Verify that billing is enabled for your Google Cloud project.
Enable the BigLake, Secret Manager APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.
必要なロール
クロスクラウド Lakehouse の設定に必要な権限を取得するには、プロジェクトに対する次の IAM ロールを付与するよう管理者に依頼してください。
-
Lakehouse カタログを管理する: BigLake 管理者 (
roles/biglake.admin) - シークレットを管理する: Secret Manager 管理者 (
roles/secretmanager.admin) -
プライベート相互接続でトラフィックをルーティングする: Compute ネットワーク管理者(
roles/compute.networkAdmin)、Service Directory 閲覧者(roles/servicedirectory.viewer)、Service Directory PSC 承認済みサービス(roles/servicedirectory.pscAuthorizedService)
ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。
必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。
サポートされているカタログの詳細
このガイドでは、Amazon Web Services(AWS)または Google Cloudで Databricks Unity Catalog カタログを使用して、クロスクラウド Lakehouse を設定する手順について説明します。外部ロケーションの要件とサポートされている構成の詳細については、サポートされているカタログをご覧ください。
制限事項と考慮事項
このセクションでは、クロスクラウド Lakehouse の使用に関する制限事項と考慮事項について説明します。
- サポートされているクラウド プロバイダ: クロスクラウド Lakehouse でのプライベート相互接続の使用は、次のリモート クラウド プロバイダでサポートされています。Amazon Web Services(AWS)。Cross-Cloud InterconnectまたはPartner Interconnectのいずれかを使用できます。
- AWS の外部ロケーションまたは Google Cloudの外部ロケーションを使用する Databricks Unity Catalog カタログのみがサポートされています。AWS のデフォルト ストレージまたは Google Cloudのデフォルト ストレージを使用する Unity Catalog カタログは対象外です。
- Unity Catalog で使用されるメタストアで外部データアクセスを有効にする必要があります。これはデフォルトで無効になっています。
- ネットワーク ルーティング: プライベート相互接続(お客様所有の CCI や Partner Interconnect など)が構成されていない場合、クエリは公共のインターネット経由でルーティングされます。これにより、リモート クラウド プロバイダからの下り(外向き)料金が増加し、パフォーマンスの予測が難しくなる可能性があります。
- データの更新速度: フェデレーション カタログの
--refresh-intervalフラグは、メタデータの同期頻度を決定します。間隔を短くすると、より新しいデータが提供されますが、リモート カタログ プロバイダから追加の API 費用が発生する可能性があります。 Iceberg 指標レポート: Iceberg 指標レポートは、フェデレーション カタログでは使用できません。連携カタログにアクセスするときに、Iceberg クライアントで
rest-metrics-reporting-enabledプロパティをfalseに設定します。
全般的なワークフロー
クロスクラウド Lakehouse を設定して使用する一般的な手順は次のとおりです。
- Cross-Cloud Interconnect を設定する(省略可): Google Cloud VPC とリモート クラウド プロバイダの間にプライベート接続を構成します。
- 連携を設定する: リモート カタログの認証情報を使用して、Secret Manager に Secret を作成します。次に、Lakehouse にフェデレーション カタログを作成し、シークレットへのアクセス権を付与します。
- 接続を確認する: Lakehouse がリモート カタログに正常に接続できることを確認します。
- データをクエリする: BigQuery または Managed Service for Apache Spark を使用して、連携データに対してクエリを実行します。詳細については、クロスクラウド Lakehouse を使用するをご覧ください。
- 権限を構成する: Identity and Access Management(IAM)を使用して、フェデレーション データを表示してクエリできるユーザーを管理します。
Cross-Cloud Interconnect を設定する(省略可)
リモート カタログへのクエリは、デフォルトで公共のインターネットを経由します。セキュリティとコンプライアンスの強化、予測可能なパフォーマンスの提供、データ転送費用の削減に役立つプライベート相互接続を使用します。これにより、 Google CloudVirtual Private Cloud(VPC)とリモート クラウド プロバイダのネットワーク(AWS など)の間に専用のプライベート ネットワーク接続が確立されます。
Google Cloud VPC とリモート クラウド プロバイダの VPC(AWS など)の間に、次のいずれかのプライベート相互接続オプションをプロビジョニングして構成できます。
- Cross-Cloud Interconnect: 専用の物理接続。
- Partner Interconnect: サポートされているサービス プロバイダを介した接続。
Google Cloud の Cloud Router とリモート クラウド プロバイダの VPC の間に BGP セッションを確立し、ルート交換を確保します。
プライベート クエリを有効にするには、プライベート相互接続を介して、Lakehouse からリモート ストレージ バケット(AWS Amazon S3 バケットなど)へのパスを構成する必要があります。このルーティングを構成するには、次の 2 つのアーキテクチャ フローがあります。
- 内部リージョン プロキシ ネットワーク ロードバランサのルーティング: このフローでは、Google Cloud 内部リージョン プロキシ ネットワーク ロードバランサを使用して、複数の AWS Elastic Network Interface(ENI)を指すハイブリッド接続ネットワーク エンドポイント グループ(NEG)間でリクエストを分散します。このフローは、ロード バランシング、スケーラビリティ、高可用性に不可欠です。Partner Interconnect には必須であり、ロード バランシング、スケーラビリティ、高可用性を実現するために Cross-Cloud Interconnect に推奨されます。
- 直接エンドポイント ルーティング: このフローは、Service Directory を単一の AWS インターフェース VPC エンドポイントの IP アドレスに直接接続します。このフローは Cross-Cloud Interconnect でのみ機能し、Partner Interconnect ではサポートされていません。
アーキテクチャ要件に合った構成フローを選択します。
内部リージョン プロキシ ネットワーク ロードバランサ
高可用性とロード バランシングのために、複数の AWS ENI にリクエストを分散するように内部リージョン プロキシ ネットワーク ロードバランサを構成する手順は次のとおりです。
AWS ネットワーキングを構成する
まず、Amazon S3 VPC インターフェース エンドポイント(AWS PrivateLink)を作成します。
- AWS VPC コンソールで、Amazon S3 のインターフェース エンドポイントを作成します。
- サービス名に「
com.amazonaws.<var>AWS_REGION</var>.s3」と指定します。 - Direct Connect を介して Google Cloud VPC に接続されている VPC とサブネットを選択します。
- セキュリティ グループをエンドポイントに接続して、インバウンド アクセスを制御します。
- これにより、選択した各サブネットに Elastic Network Interface(ENI)がプロビジョニングされます。これらの ENI のプライベート IP アドレスをメモします。
次に、セキュリティ グループを構成します。
- Amazon S3 エンドポイント ENI に関連付けられているセキュリティ グループで、 Google Cloud VPC の関連する IP 範囲からのポート
443での上り(内向き)TCP トラフィックが許可されていることを確認します。
Google Cloud ネットワーキングを構成する
ハイブリッド エンドポイント用に内部リージョン プロキシ ネットワーク ロードバランサを設定するの手順に沿って操作します。
手順に沿って操作する際は、次の点に注意してください。
- ハイブリッド接続 NEG(
NON_GCP_PRIVATE_IP_PORT)を作成し、前に作成した AWS ENI のプライベート IP アドレスを追加します。 - NEG、ヘルスチェック、転送ルールに TCP ポート
443を使用します。 - フェデレーション カタログと同じ Google Cloud リージョンにロードバランサを設定します。
ロードバランサの転送ルールを作成したら、割り当てられた内部 IP アドレスをメモします。これが ILB_IP_ADDRESS です。
Service Directory を構成する
Lakehouse が検出できるように、ILB の IP アドレスを Service Directory に登録します。
リモート クラウドの Namespace を作成します。
gcloud service-directory namespaces create NAMESPACE \ --project=PROJECT_ID \ --location=REGION
次のように置き換えます。
NAMESPACE: 名前空間の一意の識別子。PROJECT_ID: 実際の Google Cloud プロジェクト ID。REGION: Google Cloud のリージョン。例:us-east4これは、フェデレーション カタログと同じリージョンにする必要があります。
Service Directory 名前空間にサービスを作成します。
gcloud service-directory services create SERVICE_NAME \ --namespace=NAMESPACE \ --project=PROJECT_ID \ --location=REGION
次のように置き換えます。
SERVICE_NAME: サービスの一意の識別子。
サービスで ILB のエンドポイントを作成します。
gcloud service-directory endpoints create ENDPOINT_NAME \ --project=PROJECT_ID \ --namespace=NAMESPACE \ --service=SERVICE_NAME \ --location=REGION \ --network=projects/PROJECT_NUMBER/global/networks/VPC_NETWORK \ --address=ILB_IP_ADDRESS \ --port=443
次のように置き換えます。
ENDPOINT_NAME: エンドポイントの一意の識別子。PROJECT_NUMBER: Google Cloudプロジェクト番号。--networkフラグでプロジェクト番号を使用します。ILB_IP_ADDRESS: ILB 転送ルールの内部 IP アドレス。
直接エンドポイント
トラフィックを単一の AWS インターフェース VPC エンドポイントの IP アドレスに直接転送するようにサービス ディレクトリを構成するには、次の操作を行います。
- AWS VPC 内の Amazon S3 用にインターフェース VPC エンドポイントを作成します。このエンドポイントの IP アドレスとポートをメモします。
リモート クラウドの Namespace を作成します。
gcloud service-directory namespaces create NAMESPACE \ --project=PROJECT_ID \ --location=REGION
次のように置き換えます。
NAMESPACE: 名前空間の一意の識別子。PROJECT_ID: 実際の Google Cloud プロジェクト ID。REGION: Google Cloud のリージョン。例:us-east4これは、フェデレーション カタログと同じリージョンにする必要があります。
Service Directory 名前空間にサービスを作成します。
gcloud service-directory services create SERVICE_NAME \ --namespace=NAMESPACE \ --project=PROJECT_ID \ --location=REGION
次のように置き換えます。
SERVICE_NAME: サービスの一意の識別子。
Amazon S3 インターフェース VPC エンドポイントのルーティング情報を含むエンドポイントをサービスに作成します。
gcloud service-directory endpoints create ENDPOINT_NAME \ --service=SERVICE_NAME \ --namespace=NAMESPACE \ --project=PROJECT_ID \ --location=REGION \ --address=S3_VPCE_IP_ADDRESS \ --port=S3_VPCE_PORT \ --network=projects/PROJECT_NUMBER/global/networks/VPC_NETWORK
次のように置き換えます。
ENDPOINT_NAME: エンドポイントの一意の識別子。S3_VPCE_IP_ADDRESS: Amazon S3 インターフェース VPC エンドポイントの IP アドレス。例:10.0.1.45S3_VPCE_PORT: Amazon S3 インターフェース VPC エンドポイントのポート番号。例:443PROJECT_NUMBER: Google Cloudプロジェクト番号。--networkフラグでプロジェクト番号を使用します。VPC_NETWORK: プライベート相互接続に関連付けられている Google Cloud VPC ネットワーク名。
連携を設定する
データをクエリするには、リモート カタログに接続する Lakehouse フェデレーション カタログを設定する必要があります。
リージョン シークレットを作成する
連携では、リモート カタログにアクセスするための認証情報が必要です。Lakehouse は、リージョン Secret Manager シークレットを使用して、これらの認証情報を安全に保存して取得し、リモート プロバイダで認証します。
Databricks の場合は、Databricks アカウントにサービス プリンシパルを作成し、OAuth クライアント ID とクライアント シークレットを生成する必要があります。このサービス プリンシパルに、移行先の Unity Catalog カタログに対する読み取りアクセス権があることを確認します。次に、これらの認証情報を JSON ペイロードとしてフォーマットし、Secret Manager に保存します。
ペイロードを含む
credentials.jsonという名前の JSON ファイルを作成します。{ "client_id": "CLIENT_ID", "client_secret": "CLIENT_SECRET" }
次のように置き換えます。
CLIENT_ID: Databricks サービス プリンシパルの OAuth クライアント ID。CLIENT_SECRET: Databricks サービス プリンシパルの OAuth クライアント シークレット。
Secret Manager のリージョン エンドポイントを構成します。
デフォルトでは、Secret Manager はグローバル エンドポイントを使用します。ただし、クロスクラウド Lakehouse では、シークレットが Lakehouse カタログと同じリージョンに保存されている必要があります。
gcloudCLI を使用してリージョン シークレットを操作するには、現在のセッションまたはプロファイルのデフォルトの API エンドポイントをオーバーライドする必要があります。接続の問題を回避するには、シークレットとカタログを同じリージョンに作成する必要があります。例:secretmanager.us-east4.rep.googleapis.comgcloud config set api_endpoint_overrides/secretmanager https://secretmanager.REGION.rep.googleapis.com/
次のように置き換えます。
REGION: Secret Manager のシークレットが保存されている Google Cloud リージョン。例:us-east4接続の問題を回避するには、シークレットとカタログを同じリージョンに作成する必要があります。例:secretmanager.us-east4.rep.googleapis.com
ペイロードを Secret Manager にアップロードします。
gcloud secrets create DATABRICKS_SECRET_NAME \ --location="REGION" \ --project="PROJECT_ID" \ --data-file=credentials.json
次のように置き換えます。
DATABRICKS_SECRET_NAME: Databricks Secret の名前。
連携カタログを作成する
gcloud biglake iceberg catalogs
create コマンドを使用して、フェデレーション カタログを作成します。
コンソール
Google Cloud コンソールで、[Lakehouse] に移動します。
[ カタログを作成] をクリックします。
[連携カタログ] をクリックします。
[カタログ構成] の詳細が表示されます。
[連携カタログのソース] で、[Unity(Databricks)] を選択します。
[データのロケーション] で、フェデレーション カタログを作成する Lakehouse リージョンを選択します。例:
us-east4レイテンシを最小限に抑える(パブリック インターネット経由でも)には、リージョンを選択する際に次の操作を行います。- Unity Catalog カタログが AWS にある場合は、AWS リージョンに最も近いGoogle Cloud リージョンを選択します。
- Unity Catalog カタログが Google Cloudにある場合は、まったく同じリージョンを選択します。
[続行] をクリックします。
[接続の詳細] の詳細が表示されます。
[リモート カタログの詳細] セクションの [Unity インスタンス名] フィールドに、ターゲットの Databricks インスタンス名を入力します。例:
abcd.cloud.databricks.com。[Unity Catalog 名] フィールドに、連携するターゲット Databricks Unity Catalog カタログの名前を入力します。
[認証とネットワーク] セクションの [シークレット] フィールドに、Databricks シークレットの名前を入力します。次の形式
projects/PROJECT_ID/locations/REGION/secrets/DATABRICKS_SECRET_NAMEを使用します。省略可: [サービス ディレクトリ名] フィールドに、Service Directory サービスへのパスを入力します。例:
projects/PROJECT_ID/locations/REGION/namespaces/NAMESPACE/services/SERVICE_NAMEこれは、Cross-Cloud Interconnect を構成する場合にのみ必要です。[作成] をクリックします。
gcloud CLI
公共のインターネット(CCI なし)
CCI を構成しない場合、接続は公共のインターネット経由で安全に転送されます。
gcloud biglake iceberg catalogs create FEDERATED_CATALOG_NAME \ --project="PROJECT_ID" \ --primary-location="REGION" \ --catalog-type="federated" \ --federated-catalog-type="unity" \ --secret-name="projects/PROJECT_ID/locations/REGION/secrets/DATABRICKS_SECRET_NAME" \ --unity-instance-name="UNITY_INSTANCE_NAME" \ --unity-catalog-name="UNITY_CATALOG_NAME" \ --refresh-interval="REFRESH_INTERVAL" \ --namespace-filters="NAMESPACE_FILTERS"
次のように置き換えます。
PROJECT_ID: 実際の Google Cloud プロジェクト ID。REGION: 連携カタログが作成される Lakehouse リージョン。例:us-east4レイテンシを最小限に抑えるには、リージョンを選択する際に次の操作を行います。- Unity Catalog カタログが AWS にある場合は、AWS リージョンに最も近いGoogle Cloud リージョンを選択します。
- Unity Catalog カタログが Google Cloudにある場合は、まったく同じリージョンを選択します。
DATABRICKS_SECRET_NAME: Databricks Secret の名前。UNITY_INSTANCE_NAME: ターゲット Databricks インスタンスの名前。例:abcd.cloud.databricks.com。UNITY_CATALOG_NAME: 連携するターゲット Databricks Unity Catalog カタログの名前。REFRESH_INTERVAL: カタログの情報を更新する頻度を指定します。この値を期間として設定します(例:330s、5m30s)。間隔を短くすると、データの更新頻度は高くなりますが、API 呼び出しの費用が増加する可能性があります。間隔を長くすると費用を抑えることができますが、クエリされたデータが最新のデータセットを反映していない可能性があります。省略した場合、または値を0sに設定した場合、更新は無効になります。NAMESPACE_FILTERS: 省略可: フェデレーションする Namespace のカンマ区切りリスト。例:ns1,ns2省略すると、すべての名前空間が含まれます。
お客様所有(CCI)
プライベート インターコネクト(Dedicated CCI や Partner Interconnect など)を構成した場合は、Lakehouse がトラフィックをプライベートにルーティングするように、Service Directory サービス参照を指定します。
gcloud biglake iceberg catalogs create FEDERATED_CATALOG_NAME \ --project="PROJECT_ID" \ --primary-location="REGION" \ --catalog-type="federated" \ --federated-catalog-type="unity" \ --secret-name="projects/PROJECT_ID/locations/REGION/secrets/DATABRICKS_SECRET_NAME" \ --unity-instance-name="UNITY_INSTANCE_NAME" \ --unity-catalog-name="UNITY_CATALOG_NAME" \ --refresh-interval="REFRESH_INTERVAL" \ --namespace-filters="NAMESPACE_FILTERS" \ --service-directory-name="projects/PROJECT_ID/locations/REGION/namespaces/NAMESPACE/services/SERVICE_NAME"
次のように置き換えます。
PROJECT_ID: 実際の Google Cloud プロジェクト ID。PROJECT_NUMBER: Google Cloud プロジェクトの番号。REGION: 連携カタログが作成される Lakehouse リージョン。例:us-east4レイテンシを最小限に抑えるには、リージョンを選択する際に次の操作を行います。- Unity Catalog カタログが AWS にある場合は、AWS リージョンに最も近いGoogle Cloud リージョンを選択します。
- Unity Catalog カタログが Google Cloudにある場合は、まったく同じリージョンを選択します。注: これは、Service Directory 名前空間とリージョン シークレットと同じリージョンにする必要があります。
DATABRICKS_SECRET_NAME: Databricks Secret の名前。UNITY_INSTANCE_NAME: ターゲット Databricks インスタンスの名前。例:abcd.cloud.databricks.com。UNITY_CATALOG_NAME: 連携するターゲット Databricks Unity Catalog カタログの名前。REFRESH_INTERVAL: カタログの情報を更新する頻度を指定します。この値を期間として設定します(例:330s、5m30s)。間隔を短くすると、データの更新頻度は高くなりますが、API 呼び出しの費用が増加する可能性があります。間隔を長くすると費用を抑えることができますが、クエリされたデータが最新のデータセットを反映していない可能性があります。省略した場合、または値を0sに設定した場合、更新は無効になります。NAMESPACE_FILTERS: 省略可: フェデレーションする Namespace のカンマ区切りリスト。例:ns1,ns2省略すると、すべての名前空間が含まれます。NAMESPACE: プライベート相互接続の設定時に作成した Service Directory の名前空間。SERVICE_NAME: プライベート相互接続の設定時に作成した Service Directory サービス名。
連携カタログにシークレットへのアクセス権を付与する
カタログが作成されると、Lakehouse はカタログの一意のサービス アカウントをプロビジョニングします(リソースの説明で biglake-service-account として返されます)。
このサービス アカウントに、このチュートリアルの前半で作成したシークレットにアクセスする権限を付与する必要があります。IAM ポリシーの伝播には数分かかることがあります。
カタログのサービス アカウントにシークレットへのアクセス権を付与します。
# Required to use regional secrets gcloud config set api_endpoint_overrides/secretmanager https://secretmanager.REGION.rep.googleapis.com/ gcloud secrets add-iam-policy-binding DATABRICKS_SECRET_NAME \ --project="PROJECT_ID" \ --location="REGION" \ --member="serviceAccount:$(gcloud biglake iceberg catalogs describe FEDERATED_CATALOG_NAME \ --project="PROJECT_ID" \ --location="REGION" \ --format='value(biglake-service-account)')" \ --role="roles/secretmanager.secretAccessor"
接続を確認する
フェデレーション カタログ サービス アカウントがシークレットにアクセスできることを確認するには、次のコマンドを実行します。
# Required to use regional secrets gcloud config set api_endpoint_overrides/secretmanager https://secretmanager.REGION.rep.googleapis.com/ gcloud secrets get-iam-policy DATABRICKS_SECRET_NAME \ --project="PROJECT_ID" \ --location="REGION"
出力で、biglake-service-account サービス アカウントに roles/secretmanager.secretAccessor ロールが割り当てられていることを確認します。
次に、カタログのバックグラウンド更新サイクルが正常に完了し、Namespace が同期されていることを確認します。
更新ステータスが成功を示していることを確認します。
gcloud biglake iceberg catalogs describe FEDERATED_CATALOG_NAME \ --project="PROJECT_ID" \ --location="REGION"
リモート データベースが同期された Namespace として表示されることを確認します。
gcloud biglake iceberg namespaces list \ --catalog="FEDERATED_CATALOG_NAME" \ --project="PROJECT_ID" \ --location="REGION"