メインコンテンツまでスキップ

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

この記事では、 Unity Catalog で外部ロケーション オブジェクトを設定して、 Databricksからクラウド ストレージへのアクセスを制御する方法について説明します。

外部ロケーションの概要

外部ロケーションは、 ストレージ資格情報 を Cloud Object Storage コンテナに関連付けます。 外部ロケーションは、次の定義に使用されます。

  • マネージドテーブルとボリュームの管理されたストレージの場所。 管理されたストレージの場所は、メタストア、カタログ、またはスキーマ レベルで存在できます。「Unity Catalog で管理されたストレージの場所を指定する」を参照してください。

  • 外部テーブルと外部ボリュームの場所。

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

次の図は、1 つのクラウド ストレージ バケットまたはコンテナのファイルシステム階層を表しており、4 つの外部ロケーションが 1 つのストレージ認証情報を共有しています。

外部ロケーション

外部ロケーション作成の概要

次のいずれかのインターフェイスを使用して、外部ロケーションを作成できます。

  1. カタログエクスプローラー

    このオプションは、グラフィカル UI を提供します。Catalog Explorer を使用して、 GCS バケット、 S3 バケット (読み取り専用)、Cloudflare R2 バケット、 DBFSルート (レガシー) を参照する外部ロケーションを作成できます

  2. ノートブック内の SQL コマンドまたは Databricks SQL クエリ

  3. Databricks CLI の

この記事では、オプション 1 と 2 について説明します。

注記

DBFSルートのストレージ場所にデータを格納することは従来の方法であり、Databricks では推奨していません。ただし、ワークスペースが DBFSルートにデータを格納している場合は、 Unity Catalogを使用して外部ロケーションを作成し、そのデータへのアクセスを制御できます。 詳細については、「DBFSルート (レガシ) でデータの外部ロケーションを作成する」を参照してください。

外部ロケーションの使用、およびストレージ資格情報と外部ロケーションの関係の詳細については、「Unity Catalogを使用したクラウド オブジェクト ストレージへの接続」を参照してください。

始める前に

前提条件 :

権限の要件 :

  • メタストアと、外部ロケーションで参照されるストレージ資格情報の両方に対する CREATE EXTERNAL LOCATION 権限が必要です。 メタストア管理者は、デフォルトでメタストアに CREATE EXTERNAL LOCATION を持っています。
  • DBFSルート ストレージの場所の外部ロケーションを作成する場合は、システムによってストレージ資格情報を作成できますが、ワークスペース管理者である必要があります。詳細については、「DBFSルートのデータ用の外部ロケーションの作成 (レガシ)」を参照してください。

オプション 1: Catalog Explorer を使用して外部ロケーションを作成する

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

権限と前提条件: 「始める前に」を参照してください。

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

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

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

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

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

  5. ストレージタイプ ( GCSS3(読み取り専用)、 R2またはDBFSルート )を選択します。

    DBFSルートにデータを格納することは、推奨されない従来の方法です。詳細については、「DBFSルート (レガシ) でデータの外部ロケーションを作成する」を参照してください。

  6. [URL ] で、外部ロケーションへのパスを入力または選択します。

    GCS、S3、および R2 には、次のオプションがあります。

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

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

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

    DBFSルートの場合:

    • システムは、 DBFSルート ストレージの場所へのサブパスを設定します。 ワークスペース管理者の場合は、システムによってストレージ資格情報も作成されます。

    「DBFSルート (レガシ) でデータ用の外部ロケーションを作成する」を参照してください。

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

注記

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

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

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

  2. 入力する認証情報は、ストレージタイプによって異なります。

    GCSの場合、外部ロケーションを保存すると、GCP サービス アカウントが自動的に作成されます。GCS にアクセスするストレージ資格情報の作成を参照してください。

    Cloudflare API トークンの場合は、Cloudflare アカウント、アクセスキーID、シークレットアクセスキーを入力します。 「Cloudflare R2 に接続するためのストレージ資格情報を作成する」を参照してください。

    AWSS3IAMARN[] には、ストレージの場所へのアクセス権を付与するロール を入力します。「AWS S3 に接続するためのストレージ認証情報を作成する(読み取り専用)」を参照してください。

  3. (オプション)ユーザーに外部ロケーションへの読み取り専用アクセスを許可する場合は、[ 詳細オプション ] をクリックし、[ 読み取り専用 ] を選択します。 詳細については、「 外部ロケーションを読み取り専用としてマークする」を参照してください。

    AWS S3パスを参照する外部ロケーションは、本質的に読み取り専用です。

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

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

  5. (オプション、AWS S3 ロケーションのみ)S3 バケットで SSE 暗号化が必要な場合は、Unity Catalog の外部テーブルとボリュームが S3 バケット内のデータにアクセスできるように、暗号化アルゴリズムを構成できます。

    手順については、「 外部ロケーションでの暗号化アルゴリズムの構成 (AWS S3 のみ)」を参照してください。

  6. (オプション)外部ロケーションで変更通知をサブスクライブする機能を有効にするには、[ 詳細オプション ] をクリックし、[ ファイル イベントを有効にする ] を選択します。

    詳細については、「 (推奨) 外部ロケーションのファイル イベントを有効にする」を参照してください。

  7. 作成 をクリックします。

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

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

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

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

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

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

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

オプション 2: SQL を使用して外部ロケーションを作成する

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

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

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

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

SQL
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 権限を持つデータエンジニアが、特定のワークスペースのみを使用してそのデータにアクセスできるようにします。

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

important

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

  • 外部ロケーションカバー'gs://mybucket/<path>'``myWorkspaceにバインドされていますか?
  • カタログmyCatアクセス・レベルが Read & WritemyWorkspaceにバインドされていますか?

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

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

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

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

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

注記

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

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

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

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

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

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

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

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

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

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

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

次のステップ