クラウドストレージをDatabricksに接続するための外部ロケーションを作成する
この記事では、 Unity Catalog で外部ロケーションを設定してクラウド ストレージを Databricksに接続する方法について説明します。
外部ロケーション Unity Catalog ストレージの資格情報をクラウドオブジェクトストレージ コンテナーに関連付けます。 外部ロケーションは、カタログおよびスキーマのマネージドストレージ・ロケーションの定義、外部テーブル・外部ボリュームのロケーションの定義に使用されます。
AWS S3 または Cloudflare R2 バケット内のストレージを参照する外部ロケーションを作成できます。
外部ロケーションを作成するには、Catalog Explorer、ノートブックまたはDatabricksCLI SQLクエリの コマンド、 コマンド、またはDatabricks SQL Terraformを使用します。
外部ロケーションの使用と、ストレージの認証情報と外部ロケーションの関係の詳細については、「Unity Catalogを使用してクラウドストレージへのアクセスを管理する」を参照してください。
始める前に
前提条件 :
-
Databricks で外部ロケーションオブジェクトを作成する前に、外部ロケーションとして使用する AWS S3 または Cloudflare R2 バケットを作成する必要があります。
- AWS CloudFormation テンプレートは S3 バケットのみをサポートします。
- ユーザーが読み取りおよび書き込みできる S3 バケットの名前には、ドット表記を使用できません (例:
incorrect.bucket.name.notation
)。 バケットの命名ガイドの詳細については、AWSバケットの命名規則を参照してください。 - S3別の メタストアで外部ロケーションとして既に定義されているパスをUnity Catalog で使用しないでください。1 つの外部 S3 場所にあるデータを複数のメタストアから安全に読み取ることができますが、複数のメタストアから同じ S3 場所への並列書き込みは、一貫性の問題が発生する可能性があります。
-
AWS CloudFormation テンプレートを使用して外部ロケーションを作成しない場合は、まず、クラウドストレージロケーションパスへのアクセス権を付与するストレージ認証情報を Databricks で作成する必要があります。「 AWS S3に接続するためのストレージ認証情報を作成する 」および「 Cloudflare R2に接続するためのストレージ認証情報を作成する」を参照してください。
AWS CloudFormation フローを使用すると、そのストレージ認証情報が作成されます。
権限の要件 :
-
メタストアと、外部ロケーションで参照されるストレージ資格情報の両方に対する
CREATE EXTERNAL LOCATION
権限が必要です。 メタストア管理者は、デフォルトでメタストアにCREATE EXTERNAL LOCATION
を持っています。 -
DBFSルート ストレージの場所の外部ロケーションを作成する場合は、システムによってストレージ資格情報を作成できますが、ワークスペース管理者である必要があります。詳細については、「DBFSルート内のデータの外部ロケーションの作成」を参照してください
-
AWS CloudFormation テンプレートを使用している場合は、メタストアに対する
CREATE STORAGE CREDENTIAL
権限も必要です。 メタストア管理者は、デフォルトでメタストアにCREATE STORAGE CREDENTIAL
を持っています。
AWS CloudFormation テンプレートを使用して S3 バケットの外部ロケーションを作成する
AWS CloudFormation テンプレートを使用して外部ロケーションを作成すると、Databricks は外部ロケーションを設定し、ストレージ認証情報を作成します。 また、外部ロケーションを手動で作成 することもできますが、そのためには、最初に、外部ロケーションによって参照される IAMS3バケットへのアクセス権を付与する ロールと、そのIAM ロールを参照するストレージ認証情報を作成する必要があります。既存のDBFSマウントポイント、 DBFSルート、またはボリュームから外部ロケーションを作成する場合は、手動のアプローチが必要です。
ストレージの認証情報については、「 AWS S3 に接続するためのストレージ認証情報を作成する」を参照してください。
AWS CloudFormation テンプレートを使用して Cloudflare R2 バケットの外部ロケーションを作成することはできません。 代わりに、 カタログ エクスプローラーの手動フロー を使用するか、 Databricks ノートブックまたは SQL クエリ エディターの SQL ステートメントを使用します。
権限と前提条件: 「始める前に」を参照してください。
外部ロケーションを作成するには:
-
メタストアにアタッチされているワークスペースにログインします。
-
「カタログ 」(Catalog) をクリックしてカタログエクスプローラーを開きます。
-
クイック アクセス ページで、 外部データ > ボタンをクリックし、 外部ロケーション タブに移動して、 ロケーションの作成 をクリックします。
-
[ 新しい外部ロケーションを作成 ] ダイアログで、[ AWSクイックスタート(推奨) ]を選択し、[ 次のページ ] をクリックします。
AWS クイックスタートでは、外部ロケーションが構成され、ストレージ資格情報が作成されます。 手動 オプションを使用する場合は、IAMロールを手動で作成し、Databricksで S3バケットへのアクセス権を付与する ストレージ認証情報を自分で作成する必要があります。
-
クイックスタートで外部ロケーションを作成 ダイアログで、 バケット名 フィールドにS3バケットへのパスを入力します。
-
Generate new token をクリックして、 Databricks と AWS アカウント間の認証に使用する個人用アクセストークンを生成します。
-
トークンをコピーし、 クイックスタートで起動 をクリックします。
-
起動する AWS CloudFormation テンプレート ( クイック作成スタック というラベル) で、トークンを Databricksアカウント資格情報 フィールドに貼り付けます。
-
ページ下部の利用規約に同意します ( AWS CloudFormation がカスタム名で IAM リソースを作成する可能性があることを認めます )。
-
スタックを作成 をクリックします。
CloudFormation テンプレートが Databricksで外部ロケーションオブジェクトの作成を完了するまでに数分かかる場合があります。
-
Databricks ワークスペースに戻り、[ カタログ ]をクリックして カタログエクスプローラー を開きます。
-
[クイック アクセス ] ページで、[ 外部データ > ] ボタンをクリックして外部 ロケーション タブに移動します。
-
新しい外部ロケーションが作成されたことを確認します。
自動的に生成される外部ロケーションは、
db_s3_external_databricks-S3-ingest-<id>
という命名構文を使用します。 -
(オプション)外部ロケーションを特定のワークスペースにバインドします。
デフォルトにより、特権ユーザーは、メタストアにアタッチされた任意のワークスペース上の外部ロケーションを使用できます。 特定のワークスペースからのアクセスのみを許可する場合は、 ワークスペース タブに移動してワークスペースを割り当てます。 (オプション)特定のワークスペースに外部ロケーションを割り当てるを参照してください。
-
外部ロケーションの使用を許可します。
外部ロケーションを誰でも使用できるようにするには、次の権限を付与する必要があります。
- 外部ロケーションを使用して、メタストア、カタログ、またはスキーマにマネージドストレージロケーションを追加するには、
CREATE MANAGED LOCATION
特権を付与します。 - 外部テーブルまたはボリュームを作成するには、
CREATE EXTERNAL TABLE
またはCREATE EXTERNAL VOLUME
を付与します。
カタログエクスプローラーを使用してアクセス権を付与するには
- 外部ロケーション名をクリックして、詳細ペインを開きます。
- アクセス許可 タブで、 許可 をクリックします。
- 「
<external location>
に付与 」ダイアログで、[ プリンシパル ]フィールドでユーザー、グループ、またはサービスプリンシパルを選択し、付与する権限を選択します。 - 付与 をクリックします。
- 外部ロケーションを使用して、メタストア、カタログ、またはスキーマにマネージドストレージロケーションを追加するには、
Catalog Explorer を使用した外部ロケーションの手動作成
カタログエクスプローラを使用して、外部ロケーションを手動で作成できます。
権限と前提条件: 「始める前に」を参照してください。
S3 バケットの外部ロケーションを作成する場合、Databricks では、ここで説明する手順ではなく、 AWS CloudFormation テンプレート を使用することをお勧めします。 AWS CloudFormation テンプレートを使用する場合、ストレージ認証情報を作成する必要はありません。 それはあなたのために作られています。
既存の DBFS マウントポイント、 DBFSルート、またはボリュームから外部ロケーションを作成する場合は、手動のアプローチが必要です。
外部ロケーションを作成するには:
-
メタストアにアタッチされているワークスペースにログインします。
-
サイドバーで、「
カタログ 」をクリックします。
-
クイック アクセス ページで、 外部データ > ボタンをクリックし、 外部ロケーション タブに移動して、 ロケーションの作成 をクリックします。
-
[ 新しい外部ロケーションの作成 ]ダイアログで、[ 手動 ]をクリックし、[ 次へ ]をクリックします。
AWS クイックスタートオプションの詳細については、「 AWS CloudFormation テンプレートを使用して S3 バケットの外部ロケーションを作成する」を参照してください。
-
「 新規外部ロケーションを手動で作成 」ダイアログで、 外部ロケーション名 を入力します。
-
[URL ] で、外部ロケーションへのパスを入力または選択します。次の 3 つのオプションがあります。
-
既存の DBFS マウント・ポイントからコンテナ・パスをコピーするには、「 DBFS からコピー 」をクリックします。
-
サブパスをDBFSルート・ストレージの場所にコピーするには、「 DBFSからコピー 」をクリックし、「 DBFSルートからコピー 」を選択します。 ワークスペース管理者の場合は、システムによってストレージ資格情報も作成されます。
「DBFSルート内のデータ用の外部ロケーションの作成」を参照してください。
-
既存のマウントポイントまたは DBFSルートからコピーしない場合は、[ URL ] フィールドを使用して、外部ロケーションとして使用する S3 または R2 バケットパスを入力します。
たとえば、
S3://mybucket/<path>
やr2://mybucket@my-account-id.r2.cloudflarestorage.com/<path>
などです。
-
-
外部ロケーションへのアクセスを許可するストレージ認証情報を選択します。
外部ロケーションが DBFSルート用で、ワークスペース管理者である場合は、システムによってストレージ資格情報が作成されるため、1 つを選択する必要はありません。
ストレージ認証情報をお持ちでない場合は、次の方法で作成できます。
-
[ ストレージ資格情報 ] ドロップダウン リストで、 [+ 新しいストレージ資格情報の作成 ] を選択します。
-
[資格情報の種類 ] ドロップダウン リストで、ストレージ資格情報オブジェクトで使用する資格情報の種類 (AWS IAMロールまたは Cloudflare API トークン) を選択します。
-
IAMロールには、ストレージの場所へのアクセスを許可するIAMロールARNを指定します。Cloudflare API トークンの場合は、Cloudflare アカウント、アクセスキーID、シークレットアクセスキーを入力します。
詳細については、「 AWS S3 に接続するためのストレージ認証情報を作成する 」または「 Cloudflare R2 に接続するためのストレージ認証情報を作成する」を参照してください。
-
(オプション)ユーザーに外部ロケーションへの読み取り専用アクセスを許可する場合は、[ 詳細オプション ] をクリックし、[ 読み取り専用 ] を選択します。 詳細については、「 外部ロケーションを読み取り専用としてマークする」を参照してください。
-
(オプション)外部ロケーションが従来のワークロードの移行を対象としている場合は、 [詳細オプション ] をクリックし、 フォールバック モード を有効にします。
「 外部ロケーションでフォールバックモードを有効にする」を参照してください。
-
(オプション)S3 バケットで SSE 暗号化が必要な場合は、Unity Catalog の外部テーブルとボリュームが S3 バケット内のデータにアクセスできるように、暗号化アルゴリズムを構成できます。
手順については、「 外部ロケーションでの暗号化アルゴリズムの構成」を参照してください。
-
作成 をクリックします。
-
(オプション)外部ロケーションを特定のワークスペースにバインドします。
デフォルトにより、特権ユーザーは、メタストアにアタッチされた任意のワークスペース上の外部ロケーションを使用できます。 特定のワークスペースからのアクセスのみを許可する場合は、 ワークスペース タブに移動してワークスペースを割り当てます。 (オプション)特定のワークスペースに外部ロケーションを割り当てるを参照してください。
-
[ 権限 ]タブに移動して、外部ロケーションの使用権限を付与します。
外部ロケーションを使用するには、次の権限を付与する必要があります。
-
外部ロケーションを使用して、メタストア、カタログ、またはスキーマにマネージドストレージロケーションを追加するには、
CREATE MANAGED LOCATION
特権を付与します。 -
外部テーブルまたはボリュームを作成するには、
CREATE EXTERNAL TABLE
またはCREATE EXTERNAL VOLUME
を付与します。
- 付与 をクリックします。
- 「
<external location>
に付与 」ダイアログで、[ プリンシパル ]フィールドでユーザー、グループ、またはサービスプリンシパルを選択し、付与する権限を選択します。 - 付与 をクリックします。
-
SQLを使用して外部ロケーションを作成する
SQLを使用して外部ロケーションを作成するには、ノートブックまたはSQLクエリ エディターで次のコマンドを実行します。プレースホルダーの値を置き換えます。 必要な権限と前提条件については、 開始する前にを参照してください。
-
<location-name>
: 外部ロケーションの名前。location_name
にハイフン(-
)などの特殊文字が含まれている場合は、バッククォート( -
<bucket-path>
: この外部ロケーションがアクセスを許可するクラウド テナント内のパス。 たとえば、S3://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 's3://bucket/path/to/table'
を発行して外部テーブルを作成する場合、通常のユーザー権限チェックに加えて、次のワークスペースバインディングチェックが実行されます。
- 外部ロケーションカバー
's3://bucket/path/to/table'``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ボリュームとはを参照してください。