Cloudflare R2 外部の場所に接続する

このページでは、Cloudflare R2 外部の場所に接続する方法について説明します。 接続した後は、Unity カタログを使用して、これらの R2 オブジェクトへのアクセスを管理できます。

Cloudflare R2 パスに正常に接続するには、セキュリティ保護可能な 2 つの Unity カタログ オブジェクトが必要です。 1 つ目は ストレージ資格情報で、R2 の場所へのアクセスを許可する R2 API トークンを指定します。 このストレージ資格情報は、2 番目に必要なオブジェクト ( R2 ストレージの場所へのパスと、その場所にアクセスするために必要な資格情報を定義する外部の場所) に必要です。

Requirements

  • Unity Catalog に対して有効になっている Databricks ワークスペース。

  • Databricks Runtime 14.3 以降、または SQL Warehouse 2024.15 以降。

    エラー メッセージ No FileSystem for scheme "r2” が表示された場合は、お使いのコンピューティングがサポートされていないバージョンである可能性があります。

  • Cloudflare アカウント。 https://dash.cloudflare.com/sign-upを参照してください。

  • Cloudflare R2 管理者ロール。 Cloudflare ロールに関するドキュメントを参照してください。

  • ワークスペースにアタッチされている Unity Catalog メタストアに対する CREATE STORAGE CREDENTIAL 権限と CREATE EXTERNAL LOCATION 権限 アカウント管理者とメタストア管理者には、既定でこれらの特権があります。

手順 1: R2 バケットを構成する

  1. Cloudflare R2 バケットを作成します。

    Cloudflare ダッシュボードまたは Cloudflare Wrangler ツールを使用できます。

    Cloudflare R2 の「Get started (はじめに)」のドキュメントまたは Wrangler のドキュメントを参照してください。

  2. R2 API トークンを作成し、それをバケットに適用します。

    Cloudflare R2 API 認証のドキュメントを参照してください。

    次のトークン プロパティを設定します。

    • 権限: オブジェクトの読み取りと書き込み。

      このアクセス許可で、読み取りと書き込みのアクセス権を付与します。これは、「Cloudflare R2 レプリカを使うか、ストレージを R2 に移行する」で説明されているように、R2 ストレージをレプリケーション ターゲットとして使うときに必要です。

      Azure Databricks から R2 バケットへの読み取り専用アクセスを適用する場合は、代わりに読み取りアクセス権のみを許可するトークンを作成できます。 ただし、これは不要な場合があります。なぜなら、ストレージ資格情報を読み取り専用としてマークすると、このアクセス許可によって付与された書き込みアクセス権は無視されるからです。

    • (省略可能) TTL: バケット データをデータ受信者と共有する期間。

    • (省略可能) Client IP Address Filtering: 指定した受信者 IP アドレスにネットワーク アクセスを制限する場合に選びます。 このオプションを有効にする場合は、受信者の IP アドレスを指定する必要があります。また、ワークスペース リージョンの Databricks コントロール プレーン NAT IP アドレスを許可リストに登録する必要があります。

    Azure Databricks サービスと資産のIP アドレスとドメインを参照してください。

  3. R2 API トークンの値をコピーします。

    • アクセス キー ID
    • シークレット アクセス キー

    Important

    トークン値は 1 度だけ表示されます。

  4. R2 ホームページで [Account details] に移動し、R2 アカウント ID をコピーします。

手順 2: ストレージ資格情報を作成する

  1. Azure Databricks で、ワークスペースにログインします。

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

  3. [ 外部データ > ] ボタンをクリックし、[ 資格情報 ] タブに移動し、[資格情報の 作成] を選択します。

  4. ストレージ資格情報を選択します。

  5. [Cloudflare API トークン][資格情報の種類] を選びます。

  6. 資格情報の名前と、R2 バケットの構成時にコピーした次の値を入力します。

    • アカウント ID
    • アクセス キー ID
    • シークレット アクセス キー
  7. (省略可能) ユーザーにこのストレージ資格情報を使う外部の場所への読み取り専用アクセス権を持たせたい場合は、[詳細オプション][読み取り専用] を選びます。

    Cloudflare R2 レプリカを使うか、ストレージを R2 に移行する」で説明されているように、ストレージ資格情報を使ってレプリケーション ターゲットとして使っている R2 ストレージにアクセスする場合は、このオプションを選ばないでください。

    詳細については、「ストレージ資格情報を読み取り専用 としてマークする」を参照してください。

  8. Create をクリックしてください。

  9. [ストレージ資格情報が作成されました] ダイアログで [外部 ID] をコピーします。

  10. (省略可能) ストレージの資格情報を特定のワークスペースにバインドする。

    既定では、ストレージの資格情報は、メタストアに接続されたどのワークスペース上でも、どの特権ユーザーでも使用できます。 特定のワークスペースからのアクセスのみを許可する場合は、[ワークスペース] タブに移動してワークスペースを割り当てます。 「特定のワークスペースにストレージ資格情報を割り当てる」を参照してください。

手順 3: 外部の場所を作成する

外部の場所を作成するには、グラフィカル UI を使用する場合はカタログ エクスプローラーを使用し、プログラムで作成する場合は SQL を使用します。

オプション 1: カタログ エクスプローラーを使用して外部の場所を作成する

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

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

  3. [ 外部データ > ] ボタンをクリックし、[ 外部の場所 ] タブに移動し、[ 外部の場所の作成] をクリックします。

  4. [ 新しい外部の場所の作成 ] ダイアログで、[ 手動]、[ 次へ] の順にクリックします。

    AWS クイック スタート オプションを使用して DBFS ルートの外部の場所を作成することはできません。

  5. [ 新しい外部の場所を手動で作成 する] ダイアログで、[ 外部の場所名] を入力します。

  6. [ ストレージの種類] で [ R2] を選択します。

  7. [ URL] にパスを入力します。 たとえば、「 r2://my-bucket@my-account-id.r2.cloudflarestorage.com 」のように入力します。

  8. [ ストレージ資格情報] で、外部の場所へのアクセスを許可するストレージ資格情報を選択します。

  9. (省略可能)ユーザーに外部の場所への読み取り専用アクセス権を付与する場合は、[ 詳細オプション] をクリックし、[制限] を選択 して読み取り専用で使用します。 この設定は後で変更できます。 詳細については、「外部の場所を読み取り専用としてマークする」を参照してください。

  10. (省略可能)外部の場所が従来のワークロードの移行を目的としている場合は、[ 詳細オプション ] をクリックして フォールバック モードを有効にします。

    外部の場所でフォールバック モードを有効にするを参照してください。

  11. Create をクリックしてください。

  12. (省略可能) 外部の場所を特定のワークスペースにバインドします。

    既定では、特権ユーザーは誰でも、メタストアに接続された任意のワークスペース上の外部の場所を使用できます。 特定のワークスペースからのアクセスのみを許可する場合は、[ワークスペース] タブに移動してワークスペースを割り当てます。 「特定のワークスペースに外部の場所を割り当てる」を参照してください。

  13. [アクセス許可] タブに移動して、外部の場所を使用するアクセス許可を付与します。

    他のユーザーが外部の場所を使用可能にするには、アクセス許可を付与する必要があります。

    • 外部の場所を使用して、マネージド ストレージの場所をメタストア、カタログ、またはスキーマに追加するには、CREATE MANAGED LOCATION 特権を付与します。
    • 外部テーブルまたはボリュームを作成するには、CREATE EXTERNAL TABLE または CREATE EXTERNAL VOLUME を付与してください。
    1. [許可] をクリックします。
    2. [<external location> への付与] ダイアログの "プリンシパル" フィールドでユーザー、グループ、またはサービス プリンシパルを選択し、付与する特権を選択します。
    3. [許可] をクリックします。

オプション 2: SQL を使用して外部の場所を作成する

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

  • <location-name>: 外部の場所の名前。 location_name にハイフン (-) などの特殊文字が含まれている場合は、バッククォート (` `) で囲む必要があります。 「名前」を参照してください
  • <bucket-path>: この外部の場所によってアクセスを付与するクラウド テナント内のパス。 たとえば、「 r2://my-bucket@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>'];

アカウント内の特定のワークスペース (ワークスペース バインドまたは外部の場所の分離とも呼ばれます) への外部の場所アクセスを制限する場合は、「 特定のワークスペースに外部の場所を割り当てる」を参照してください。