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

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

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

AWS S3 または Cloudflare R2 バケット内のストレージを参照する外部ロケーションを作成できます。

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

注:

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

始める前に

前提条件:

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

    • AWS CloudFormation テンプレートは S3 バケットのみをサポートします。

    • ユーザーが読み取りおよび書き込みできる S3 バケットの名前には、ドット表記を使用できません (例: incorrect.bucket.name.notation )。 バケットの命名ガイドの詳細については、「「AWS バケットの命名規則」を参照してください。

    • S3別の メタストアで外部ロケーションとしてすでに定義されているパスをUnity Catalog で使用しないでください。複数のメタストアから単一の外部S3ロケーションにあるデータを安全に読み取ることはできますが、複数のメタストアから同じS3ロケーションに並行して書き込むと、一貫性の問題が発生する可能性があります。

権限の要件:

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

  • AWS CloudFormation テンプレートを使用している場合は、メタストアに対するCREATE STORAGE CREDENTIAL権限も必要です。 メタストア管理者は、デフォルトでメタストアにCREATE STORAGE CREDENTIALを持ちます。

AWS CloudFormation テンプレートを使用して S3 バケットの外部ロケーションを作成する

AWS CloudFormation テンプレートを使用して外部ロケーションを作成する場合、Databricks は外部ロケーションを構成し、ストレージ認証情報を作成します。 外部ロケーションを手動で作成するオプションもあります。その場合は、まず、外部ロケーションによって参照される S3 バケットへのアクセスを許可する IAM ロールと、その IAM ロールを参照するストレージ認証情報を作成する必要があります。 詳細については、 「AWS S3 に接続するためのストレージ認証情報を作成する」を参照してください。

注:

AWS CloudFormation テンプレートを使用して Cloudflare R2 バケットの外部ロケーションを作成することはできません。 代わりに、カタログ エクスプローラーの手動フロー、またはDatabricks ノートブックまたは SQL クエリ エディターの SQL ステートメントを使用してください。

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

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

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

  2. カタログ アイコン「カタログ 」(Catalog) をクリックしてカタログエクスプローラーを開きます。

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

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

  4. [ 新しい外部ロケーションを作成 ] ダイアログで、[ AWSクイックスタート(推奨)]を選択し、[ 次のページ] をクリックします。

    AWS Quickstart は、外部ロケーションを設定し、ストレージ認証情報を作成します。 [ 手動 ] オプションを使用する場合は、S3 バケットへのアクセスを許可する IAMロールを手動で作成し、Databricks でストレージ資格情報を自分で作成する必要があります。

  5. [クイックスタートで外部ロケーションを作成]ダイアログで、[バケット名]フィールドにS3バケットへのパスを入力します。

  6. [ 新しいトークンの生成 ] をクリックして、Databricks と AWS アカウント間の認証に使用する個人用アクセストークンを生成します。

  7. トークンをコピーし、 [クイックスタートで起動]をクリックします。

  8. 起動する AWS CloudFormation テンプレート ([クイック作成スタック]というラベル) で、トークンを[Databricks アカウント資格情報]フィールドに貼り付けます。

  9. ページ下部の利用規約に同意します (AWS CloudFormation がカスタム名で IAM リソースを作成する可能性があることを認めます)。

  10. [スタックの作成]をクリックします。

    CloudFormation テンプレートが Databricks での外部ロケーション オブジェクトの作成を完了するまでに数分かかる場合があります。

  11. Databricks ワークスペースに戻り、[カタログ]をクリックしてカタログエクスプローラーを開きます。

  12. カタログパネルの上部にある歯車アイコン歯車アイコンをクリックし、 [外部ロケーション]を選択します。

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

  13. 新しい外部ロケーションが作成されたことを確認します。

    自動生成された外部ロケーションでは、命名構文 db_s3_external_databricks-S3-ingest-<id>を使用します。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

S3 バケットの外部ロケーションを作成する場合、Databricks では、ここで説明する手順ではなくAWS CloudFormation テンプレートを使用することをお勧めします。 AWS CloudFormation テンプレートを使用する場合、ストレージ認証情報を作成する必要はありません。 それはあなたのために作成されます。

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

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

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

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

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

  4. [新しい外部ロケーションの作成]ダイアログで、[手動]をクリックし、[次へ]をクリックします。

    AWS クイックスタート オプションについては、 「AWS CloudFormation テンプレートを使用して S3 バケットの外部ロケーションを作成する」を参照してください。

  5. [ Create a new external location manually ] ダイアログで、 外部ロケーション名を入力します。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

SQLを使用した外部ロケーションの作成

SQL を使用して外部ロケーションを作成するには、ノートブックまたは SQL クエリ エディターで次のコマンドを実行します。 プレースホルダー値を置き換えます。

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

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

  • <bucket-path>: この外部ロケーションがアクセスを許可するクラウド テナント内のパス。 たとえば、 S3://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 's3://bucket/path/to/table'を発行して外部テーブルを作成した場合、通常のユーザー権限チェックに加えて、次のワークスペース バインディング チェックが実行されます。

  • 's3://bucket/path/to/table'をカバーする外部ロケーションは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 つ以上のワークスペースにバインドする」を参照してください。

次のステップ