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

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

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

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

外部ロケーションは、カタログエクスプローラー、Databricks CLI、ノートブックの SQL コマンド、または Databricks SQL クエリーを使用して作成できます。

注:

ボリュームを定義すると、ボリューム パスの下のデータへのクラウド URI アクセスは、ボリュームの権限によって管理されます。

始める前に

前提条件:

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

権限の要件:

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

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

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

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

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

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

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

  3. カタログパネルの上部にある追加アイコンまたはプラスアイコン追加アイコンをクリックし、メニューから外部ロケーションの追加を選択します。

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

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

  5. 必要に応じて、既存のマウント ポイントからバケット パスをコピーします (GCS バケットのみ)。

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

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

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

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

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

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

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

  11. 外部ロケーションの使用権限を付与します。

    すべてのユーザーが外部ロケーションを使用するには、アクセス許可を付与する必要があります。

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

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

    カタログエクスプローラーを使用してアクセス権を付与するには

    1. 外部ロケーション名をクリックして、詳細ウィンドウを開きます。

    2. [ アクセス許可 ] タブで、[ 許可] をクリックします。

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

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

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>'];

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

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

プレビュー

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

デフォルトにより、外部ロケーションはメタストア内のすべてのワークスペースからアクセス可能になります。 つまり、ユーザーにその外部ロケーションに対する権限 ( 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つ以上のワークスペースにバインドする

外部ロケーションを特定のワークスペースに割り当てるには、カタログ エクスプローラーまたはDatabricks CLIを使用できます。

必要な権限: メタストア管理者または外部ロケーションの所有者。

注:

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

  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 つ以上のワークスペースにバインドする」を参照してください。

次のステップ