クラウドストレージをDatabricksに接続するための外部ロケーションを作成する

この記事では、 Unity Catalog で外部ロケーションを設定してクラウド ストレージを Databricksに接続する方法について説明します。

外部ロケーション Unity Catalog ストレージの資格情報をクラウドオブジェクトストレージ コンテナーに関連付けます。 外部ロケーションは、カタログおよびスキーマのマネージドストレージ・ロケーションの定義、外部テーブル・外部ボリュームのロケーションの定義に使用されます。

Google Cloud Storage (GCS) または Cloudflare R2 バケット内のストレージを参照する外部ロケーションを作成できます。

外部ロケーションを作成するには、Catalog Explorer、DatabricksCLI SQL、ノートブックまたは クエリーの コマンドを使用します。Databricks SQL

外部ロケーションの使用と、ストレージの認証情報と外部ロケーションの関係の詳細については、「Unity Catalogを使用してクラウド ストレージへのアクセスを管理する」を参照してください。

始める前に

前提条件:

  • Databricks で外部ロケーションオブジェクトを作成する前に、外部ロケーションとして使用する Google Cloud Storage (GCS) または Cloudflare R2 バケットを作成する必要があります。

権限の要件:

  • メタストアと、外部ロケーションで参照されるストレージ資格情報の両方に対する CREATE EXTERNAL LOCATION 権限が必要です。 メタストア管理者は、デフォルトでメタストアに CREATE EXTERNAL LOCATION を持っています。

  • DBFSルート ストレージの場所の外部ロケーションを作成する場合は、システムによってストレージ資格情報を作成できますが、ワークスペース管理者である必要があります。詳細については、「DBFSルート内のデータの外部ロケーションの作成」を参照してください

Catalog Explorer を使用した外部ロケーションの手動作成

カタログエクスプローラを使用して、外部ロケーションを手動で作成できます。

アクセス許可と前提条件:開始する前に」を参照してください。

外部ロケーションを作成するには:

  1. メタストアにアタッチされているワークスペースにログインします。

  2. サイドバーで、「カタログアイコン カタログ 」をクリックします。

  3. クイック アクセス ページで、外部データ > ボタンをクリックし、外部ロケーション タブに移動して、ロケーションの作成 をクリックします。

  4. 外部ロケーション名を入力します。

  5. [URL] で、外部ロケーションへのパスを入力または選択します。次の 3 つのオプションがあります。

    • 既存の DBFS マウント・ポイントからコンテナ・パスをコピーするには、「 DBFS からコピー」をクリックします。

    • サブパスをDBFSルート・ストレージの場所にコピーするには、「 DBFSからコピー 」をクリックし、「 DBFSルートからコピー」を選択します。 ワークスペース管理者の場合は、システムによってストレージ資格情報も作成されます。

      DBFSルート内のデータの外部ロケーションを作成する」を参照してください。

    • 既存のマウントポイントまたは DBFSルートからコピーしない場合は、[ URL ] フィールドを使用して、外部ロケーションとして使用する GCS または R2 バケットパスを入力します。

    たとえば、 gs://mybucket/<path>r2://mybucket@my-account-id.r2.cloudflarestorage.com/<path>などです。

  6. 外部ロケーションへのアクセスを許可するストレージ認証情報を選択します。

    注:

    外部ロケーションが DBFSルート用で、ワークスペース管理者である場合は、システムによってストレージ資格情報が作成されるため、1 つを選択する必要はありません。

    ストレージ認証情報をお持ちでない場合は、次の方法で作成できます。

    1. [ ストレージ資格情報 ] ドロップダウン リストで、 [+ 新しいストレージ資格情報の作成] を選択します。

    2. [資格情報の種類] ドロップダウン リストで、ストレージ資格情報オブジェクトで使用する資格情報の種類 (GCP サービス アカウントまたは Cloudflare API トークン) を選択します。

    3. GCP サービス アカウントは、外部ロケーションを保存するときに自動的に作成されます。Cloudflare API トークンの場合は、Cloudflare アカウント、アクセスキーID、シークレットアクセスキーを入力します。

      詳細については、「 Google Cloud Storage に接続するためのストレージ資格情報を作成する 」または「 Cloudflare R2 に接続するためのストレージ資格情報を作成する」を参照してください。

  7. (オプション)ユーザーに外部ロケーションへの読み取り専用アクセス権を付与する場合は、[詳細オプション] をクリックして[読み取り専用]を選択します。 詳しくは、「外部ロケーションを読み取り専用にする」をご覧ください。

  8. (オプション)外部ロケーションが Hive metastore 統合カタログを対象としている場合は、「 拡張オプション 」をクリックし、「 フォールバック・モード」を使用可能にします。

    外部ロケーションでフォールバックモードを有効にする」を参照してください。

  9. [作成] をクリックします。

  10. (オプション)外部ロケーションを特定のワークスペースにバインドします。

    デフォルトにより、特権ユーザーは、メタストアにアタッチされた任意のワークスペース上の外部ロケーションを使用できます。 特定のワークスペースからのアクセスのみを許可する場合は、 ワークスペース タブに移動してワークスペースを割り当てます。 (オプション)特定のワークスペースに外部ロケーションを割り当てるを参照してください。

  11. [ 権限 ]タブに移動して、外部ロケーションの使用権限を付与します。

    外部ロケーションを使用するには、次の権限を付与する必要があります。

    • 外部ロケーションを使用して、マネージドストレージロケーションをメタストア、カタログ、またはスキーマに追加するには、 CREATE MANAGED LOCATION 特権を付与します。

    • 外部テーブルまたはボリュームを作成するには、 CREATE EXTERNAL TABLE または CREATE EXTERNAL VOLUMEを付与します。

    1. [付与] をクリックします。

    2. <external location>に付与」ダイアログで、[プリンシパル]フィールドでユーザー、グループ、またはサービスプリンシパルを選択し、付与する権限を選択します。

    3. [付与] をクリックします。

SQLを使用した外部ロケーションの作成

SQLを使用して外部ロケーションを作成するには、ノートブックまたはSQLクエリ エディターで次のコマンドを実行します。プレースホルダーの値を置き換えます。 必要な権限と前提条件については、 開始する前にを参照してください。

  • <location-name>: 外部ロケーションの名前。 location_nameにハイフン(-)などの特殊文字が含まれている場合は、バッククォート( ` ` )で囲む必要があります。「名前」を参照してください。

  • <bucket-path>: この外部ロケーションがアクセスを許可するクラウド テナント内のパス。 たとえば、 gs://mybucketr2://mybucket@my-account-id.r2.cloudflarestorage.comなどです。

  • <storage-credential-name>: バケットからの読み取りとバケットへの書き込みを許可するストレージ認証情報の名前。 ストレージ資格情報の名前にハイフン (-) などの特殊文字が含まれている場合は、バッククォート ( ` ` ) で囲む必要があります。

CREATE EXTERNAL LOCATION [IF NOT EXISTS] `<location-name>`
URL '<bucket-path>'
WITH ([STORAGE] CREDENTIAL `<storage-credential-name>`)
[COMMENT '<comment-string>'];

アカウント内の特定のワークスペースへの外部ロケーションへのアクセスを制限する場合 (ワークスペースバインディングまたは外部ロケーション分離とも呼ばれます) は、「 (オプション) 特定のワークスペースに外部ロケーションを割り当てる」を参照してください。

(オプション)特定のワークスペースに外部ロケーションを割り当てる

プレビュー

この機能はパブリックプレビュー段階です。

By デフォルト, 外部ロケーションは、メタストア内のすべてのワークスペースからアクセスできます。 つまり、ユーザーにその外部ロケーションに対する特権 ( READ FILESなど) が付与されている場合、メタストアにアタッチされた任意のワークスペースからその特権を行使できます。 ワークスペースを使用してユーザーデータへのアクセスを分離する場合は、特定のワークスペースからのみ外部ロケーションへのアクセスを許可することができます。 この機能は、ワークスペース バインディングまたは外部ロケーション分離と呼ばれます。

外部ロケーションを特定のワークスペースにバインドする一般的な使用例には、次のようなものがあります。

  • 本番運用データを含む外部ロケーションに対する CREATE EXTERNAL TABLE 権限を持つデータエンジニアが、本番運用ワークスペースでのみそのロケーションに外部テーブルを作成できるようにします。

  • 機密データを含む外部ロケーションに対する READ FILES 権限を持つデータエンジニアが、特定のワークスペースのみを使用してそのデータにアクセスできるようにします。

ワークスペースによって他の種類のデータアクセスを制限する方法の詳細については、「 カタログアクセスを特定のワークスペースに制限する」を参照してください。

重要

ワークスペース バインディングは、外部ロケーションに対する特権が行使された時点で参照されます。 たとえば、ユーザーがmyWorkspaceワークスペースから文 CREATE TABLE myCat.mySch.myTable LOCATION 'gs://mybucket/<path>' を発行して外部テーブルを作成する場合、通常のユーザー権限チェックに加えて、次のワークスペースバインディングチェックが実行されます。

  • 外部ロケーションカバー'gs://mybucket/<path>'myWorkspaceにバインドされていますか?

  • カタログmyCatアクセス・レベルが Read & WritemyWorkspaceにバインドされていますか?

その後、外部ロケーションが myWorkspaceからバインド解除された場合、外部テーブルは引き続き機能します。

また、この機能を使用すると、中央のワークスペースからカタログを取り込み、カタログ バインドを使用して他のワークスペースでカタログを使用できるようにすることもできます。また、外部ロケーションを他のワークスペースで使用できるようにする必要はありません。

外部ロケーションを 1 つ以上のワークスペースにバインドする

外部ロケーションを特定のワークスペースに割り当てるには、Catalog Explorer または Databricks CLIを使用します。

必要なアクセス許可: Metastore 管理者、外部ロケーションの所有者、または外部ロケーションの MANAGE

注:

メタストアの管理者は、Catalog Explorer を使用してメタストア内のすべての外部ロケーションを表示でき、外部ロケーションの所有者は、外部ロケーションが現在のワークスペースに割り当てられているかどうかに関係なく、メタストア内で所有するすべての外部ロケーションを表示できます。 ワークスペースに割り当てられていない外部ロケーションはグレー表示されます。

  1. メタストアにリンクされているワークスペースにログインします。

  2. サイドバーで、「カタログアイコン カタログ 」をクリックします。

  3. [クイック アクセス] ページで、[外部データ >] ボタンをクリックして外部ロケーション タブに移動します。

  4. 外部ロケーションを選択し、 ワークスペース タブに移動します。

  5. [ワークスペース] タブで、[すべてのワークスペースがアクセス可能] チェックボックスをオフにします。

    外部ロケーションがすでに 1 つ以上のワークスペースにバインドされている場合、このチェックボックスはすでにオフになっています。

  6. [ワークスペースに割り当てる] をクリックし、割り当てるワークスペースを入力または検索します。

アクセス権を取り消すには、[ワークスペース] タブに移動し、ワークスペースを選択して、[取り消し] をクリックします。すべてのワークスペースからのアクセスを許可するには、[すべてのワークスペースがアクセス可能] チェックボックスをオンにします。

ワークスペースに外部ロケーションを割り当てるには、2 つの Databricks CLI コマンド グループと 2 つのステップ が必要です。

次の例では、 <profile-name> をDatabricks認証構成プロファイルの名前に置き換えます。これには、パーソナルアクセストークンを生成したワークスペースのワークスペースインスタンス名とワークスペースIDに加えて、パーソナルアクセストークンの値を含める必要があります。「Databricksパーソナルアクセストークン認証」を参照してください。

  1. external-locations コマンド グループの update コマンドを使用して、外部ロケーションのisolation modeISOLATEDに設定します。

    databricks external-locations update <my-location> \
    --isolation-mode ISOLATED \
    --profile <profile-name>
    

    デフォルトのisolation-modeは、メタストアにアタッチされているすべてのワークスペースに対してOPENです。

  2. workspace-bindings コマンド グループの update-bindings コマンドを使用して、ワークスペースを外部ロケーションに割り当てます。

    databricks workspace-bindings update-bindings external-location <my-location> \
    --json '{
      "add": [{"workspace_id": <workspace-id>}...],
      "remove": [{"workspace_id": <workspace-id>}...]
    }' --profile <profile-name>
    

    ワークスペースのバインドを追加または削除するには、"add"プロパティと"remove"プロパティを使用します。

    注:

    読み取り専用バインディング (BINDING_TYPE_READ_ONLY) は、外部ロケーションでは使用できません。 したがって、外部ロケーションのバインディングに binding_type を設定する理由はありません。

外部ロケーションのすべてのワークスペース割り当てを一覧表示するには、 workspace-bindings コマンド グループの get-bindings コマンドを使用します。

databricks workspace-bindings get-bindings external-location <my-location> \
--profile <profile-name>

REST API リファレンスの 「ワークスペース バインド 」も参照してください。

ワークスペースからの外部ロケーションのバインド解除

Catalog Explorer または workspace-bindings CLI コマンド グループを使用して、ワークスペースから外部ロケーションへのアクセスを取り消す手順については、「 外部ロケーションを 1 つ以上のワークスペースにバインドする」を参照してください。

次のステップ