クラウドストレージを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
-
Log in to a workspace that is linked to the metastore.
-
In the sidebar, click
Catalog.
-
On the Quick access page, click the External data > button to go to the External Locations tab.
-
Select the external location and go to the Workspaces tab.
-
On the Workspaces tab, clear the All workspaces have access checkbox.
If your external location is already bound to one or more workspaces, this checkbox is already cleared.
-
Click Assign to workspaces and enter or find the workspaces you want to assign.
To revoke access, go to the Workspaces tab, select the workspace, and click Revoke. To allow access from all workspaces, select the All workspaces have access checkbox.
There are two Databricks CLI command groups and two steps required to assign an external location to a workspace.
In the following examples, replace <profile-name>
with the name of your Databricks authentication configuration profile. It should include the value of a personal access token, in addition to the workspace instance name and workspace ID of the workspace where you generated the personal access token. See Databricks personal access token authentication.
-
Use the
external-locations
command group’supdate
command to set the external location’sisolation mode
toISOLATED
:Bashdatabricks external-locations update <my-location> \
--isolation-mode ISOLATED \
--profile <profile-name>The default
isolation-mode
isOPEN
to all workspaces attached to the metastore. -
Use the
workspace-bindings
command group’supdate-bindings
command to assign the workspaces to the external location:Bashdatabricks workspace-bindings update-bindings external-location <my-location> \
--json '{
"add": [{"workspace_id": <workspace-id>}...],
"remove": [{"workspace_id": <workspace-id>}...]
}' --profile <profile-name>Use the
"add"
and"remove"
properties to add or remove workspace bindings.
Read-only binding (BINDING_TYPE_READ_ONLY
) is not available for external locations. Therefore there is no reason to set binding_type
for the external locations binding.
To list all workspace assignments for an external location, use the workspace-bindings
command group’s get-bindings
command:
databricks workspace-bindings get-bindings external-location <my-location> \
--profile <profile-name>
See also Workspace Bindings in the REST API reference.
ワークスペースからの外部ロケーションのバインド解除
Catalog Explorer または workspace-bindings
CLI コマンド グループを使用して、ワークスペースから外部ロケーションへのアクセスを取り消す手順については、「 外部ロケーションを 1 つ以上のワークスペースにバインドする」を参照してください。
次のステップ
- 他のユーザーに外部ロケーションの使用権限を付与します。 「 外部ロケーションの管理」を参照してください。
- 外部ロケーションを使用して、管理されたストレージの場所を定義します。 「Unity Catalog で管理されたストレージの場所を指定する」を参照してください。
- 外部ロケーションを使用して外部テーブルを定義します。 外部テーブルの操作を参照してください。
- 外部ロケーションを使用して外部ボリュームを定義します。 Unity Catalogボリュームとはを参照してください。