クラウドストレージを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 バケットを作成する必要があります。
-
Databricks で定義され、クラウド ストレージの場所のパスにアクセスできるストレージ資格情報が必要です。 「 Google Cloud Storage に接続するためのストレージ認証情報を作成する 」および「 Cloudflare R2 に接続するためのストレージ認証情報を作成する」を参照してください。
権限の要件 :
- メタストアと、外部ロケーションで参照されるストレージ資格情報の両方に対する
CREATE EXTERNAL LOCATION
権限が必要です。 メタストア管理者は、デフォルトでメタストアにCREATE EXTERNAL LOCATION
を持っています。 - DBFSルート ストレージの場所の外部ロケーションを作成する場合は、システムによってストレージ資格情報を作成できますが、ワークスペース管理者である必要があります。詳細については、「DBFSルート内のデータの外部ロケーションの作成」を参照してください
Catalog Explorer を使用した外部ロケーションの手動作成
カタログエクスプローラを使用して、外部ロケーションを手動で作成できます。
権限と前提条件: 「始める前に」を参照してください。
外部ロケーションを作成するには:
-
メタストアにアタッチされているワークスペースにログインします。
-
サイドバーで、「
カタログ 」をクリックします。
-
クイック アクセス ページで、 外部データ > ボタンをクリックし、 外部ロケーション タブに移動して、 ロケーションの作成 をクリックします。
-
外部ロケーション名 を入力します。
-
[URL ] で、外部ロケーションへのパスを入力または選択します。次の 3 つのオプションがあります。
-
既存の DBFS マウント・ポイントからコンテナ・パスをコピーするには、「 DBFS からコピー 」をクリックします。
-
サブパスをDBFSルート・ストレージの場所にコピーするには、「 DBFSからコピー 」をクリックし、「 DBFSルートからコピー 」を選択します。 ワークスペース管理者の場合は、システムによってストレージ資格情報も作成されます。
「DBFSルート内のデータ用の外部ロケーションの作成」を参照してください。
-
既存のマウントポイントまたは DBFSルートからコピーしない場合は、[ URL ] フィールドを使用して、外部ロケーションとして使用する GCS または R2 バケットパスを入力します。
たとえば、
gs://mybucket/<path>
やr2://mybucket@my-account-id.r2.cloudflarestorage.com/<path>
などです。 -
-
外部ロケーションへのアクセスを許可するストレージ認証情報を選択します。
外部ロケーションが DBFSルート用で、ワークスペース管理者である場合は、システムによってストレージ資格情報が作成されるため、1 つを選択する必要はありません。
ストレージ認証情報をお持ちでない場合は、次の方法で作成できます。
-
[ ストレージ資格情報 ] ドロップダウン リストで、 [+ 新しいストレージ資格情報の作成 ] を選択します。
-
[資格情報の種類 ] ドロップダウン リストで、ストレージ資格情報オブジェクトで使用する資格情報の種類 (GCP サービス アカウントまたは Cloudflare API トークン) を選択します。
-
GCP サービス アカウントは、外部ロケーションを保存するときに自動的に作成されます。Cloudflare API トークンの場合は、Cloudflare アカウント、アクセスキーID、シークレットアクセスキーを入力します。
詳細については、「 Google Cloud Storage に接続するためのストレージ資格情報を作成する 」または「 Cloudflare R2 に接続するためのストレージ資格情報を作成する」を参照してください。
-
(オプション)ユーザーに外部ロケーションへの読み取り専用アクセスを許可する場合は、[ 詳細オプション ] をクリックし、[ 読み取り専用 ] を選択します。 詳細については、「 外部ロケーションを読み取り専用としてマークする」を参照してください。
-
(オプション)外部ロケーションが Hive metastore 統合カタログを対象としている場合は、「 拡張オプション 」をクリックし、「 フォールバック・モード 」を使用可能にします。
「 外部ロケーションでフォールバックモードを有効にする」を参照してください。
-
作成 をクリックします。
-
(オプション)外部ロケーションを特定のワークスペースにバインドします。
デフォルトにより、特権ユーザーは、メタストアにアタッチされた任意のワークスペース上の外部ロケーションを使用できます。 特定のワークスペースからのアクセスのみを許可する場合は、 ワークスペース タブに移動してワークスペースを割り当てます。 (オプション)特定のワークスペースに外部ロケーションを割り当てるを参照してください。
-
[ 権限 ]タブに移動して、外部ロケーションの使用権限を付与します。
外部ロケーションを使用するには、次の権限を付与する必要があります。
-
外部ロケーションを使用して、メタストア、カタログ、またはスキーマにマネージドストレージロケーションを追加するには、
CREATE MANAGED LOCATION
特権を付与します。 -
外部テーブルまたはボリュームを作成するには、
CREATE EXTERNAL TABLE
またはCREATE EXTERNAL VOLUME
を付与します。
- 付与 をクリックします。
- 「
<external location>
に付与 」ダイアログで、[ プリンシパル ]フィールドでユーザー、グループ、またはサービスプリンシパルを選択し、付与する権限を選択します。 - 付与 をクリックします。
-
SQLを使用して外部ロケーションを作成する
SQLを使用して外部ロケーションを作成するには、ノートブックまたはSQLクエリ エディターで次のコマンドを実行します。プレースホルダーの値を置き換えます。 必要な権限と前提条件については、 開始する前にを参照してください。
-
<location-name>
: 外部ロケーションの名前。location_name
にハイフン(-
)などの特殊文字が含まれている場合は、バッククォート( -
<bucket-path>
: この外部ロケーションがアクセスを許可するクラウド テナント内のパス。 たとえば、gs://mybucket
やr2://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 & Write
のmyWorkspace
にバインドされていますか?
その後、外部ロケーションが myWorkspace
からバインド解除された場合、外部テーブルは引き続き機能します。
また、この機能を使用すると、中央のワークスペースからカタログを取り込み、カタログ バインドを使用して他のワークスペースでカタログを使用できるようにすることもできます。また、外部ロケーションを他のワークスペースで使用できるようにする必要はありません。
外部ロケーションを 1 つ以上のワークスペースにバインドする
外部ロケーションを特定のワークスペースに割り当てるには、Catalog Explorer または Databricks CLIを使用します。
必要なアクセス許可 : Metastore 管理者、外部ロケーションの所有者、または外部ロケーションの MANAGE
。
メタストアの管理者は、Catalog Explorer を使用してメタストア内のすべての外部ロケーションを表示でき、外部ロケーションの所有者は、外部ロケーションが現在のワークスペースに割り当てられているかどうかに関係なく、メタストア内で所有するすべての外部ロケーションを表示できます。 ワークスペースに割り当てられていない外部ロケーションはグレー表示されます。
- Catalog Explorer
- CLI
-
メタストアにリンクされているワークスペースにログインします。
-
サイドバーで、「
カタログ 」をクリックします。
-
[クイック アクセス ] ページで、[ 外部データ > ] ボタンをクリックして外部 ロケーション タブに移動します。
-
外部ロケーションを選択し、 ワークスペース タブに移動します。
-
[ ワークスペース ] タブで、[ すべてのワークスペースがアクセス可能] チェックボックスをオフにします。
外部ロケーションがすでに 1 つ以上のワークスペースにバインドされている場合、このチェックボックスはすでにオフになっています。
-
[ ワークスペースに割り当てる ] をクリックし、割り当てるワークスペースを入力または検索します。
アクセス権を取り消すには、[ ワークスペース ] タブに移動し、ワークスペースを選択して、[ 取り消し ] をクリックします。すべてのワークスペースからのアクセスを許可するには、[ すべてのワークスペースがアクセス可能 ] チェックボックスをオンにします。
ワークスペースに外部ロケーションを割り当てるには、2 つの Databricks CLI コマンド グループと 2 つの手順が必要です。
次の例では、 <profile-name>
を Databricks 認証構成プロファイルの名前に置き換えます。これには、個人用アクセス トークンを生成したワークスペースのワークスペース インスタンス名とワークスペース ID に加えて、個人用アクセス トークンの値を含める必要があります。「Databricks 個人用アクセス トークン認証」を参照してください。
-
external-locations
コマンド グループのupdate
コマンドを使用して、外部ロケーションのisolation mode
をISOLATED
に設定します。Bashdatabricks external-locations update <my-location> \
--isolation-mode ISOLATED \
--profile <profile-name>デフォルトの
isolation-mode
は、メタストアにアタッチされているすべてのワークスペースに対してOPEN
です。 -
workspace-bindings
コマンド グループのupdate-bindings
コマンドを使用して、ワークスペースを外部ロケーションに割り当てます。Bashdatabricks 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 つ以上のワークスペースにバインドする」を参照してください。
次のステップ
- 他のユーザーに外部ロケーションの使用権限を付与します。 「 外部ロケーションの管理」を参照してください。
- 外部ロケーションを使用して、管理されたストレージの場所を定義します。 「Unity Catalog で管理されたストレージの場所を指定する」を参照してください。
- 外部ロケーションを使用して外部テーブルを定義します。 外部テーブルの操作を参照してください。
- 外部ロケーションを使用して外部ボリュームを定義します。 Unity Catalogボリュームとはを参照してください。