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

Google Cloud Storage(GCS)の外部ロケーションに接続する

このページでは、Google Cloud Storage (GCS) の外部ロケーションに接続する方法について説明します。この接続を完了すると、Unity Catalog を使用してこれらの GCS オブジェクトへのアクセスを管理できるようになります。

GCS バケット パスに正常に接続するには、Unity Catalog のセキュリティ保護可能なオブジェクトが 2 つ必要です。1 つ目は、 GCSバケットへのアクセスを許可するIAMロールを指定するストレージ認証情報です。 このストレージ認証情報は、2 番目に必要なオブジェクトである外部ロケーションに必要です。外部ロケーションは、GCS ストレージロケーションへのパスと、そのロケーションにアクセスするために必要な認証情報を定義します。

要件

Databricks:

  • Unity Catalogが有効化されたDatabricksワークスペース
  • CREATE STORAGE CREDENTIAL 権限(ワークスペースにアタッチされたUnity Catalogのメタストア上の)。アカウント管理者とメタストア管理者には、デフォルトでこれらの権限があります。
  • CREATE EXTERNAL LOCATION Unity Catalogメタストアと、外部ロケーションによって参照されるストレージ資格情報の両方に対する権限。 メタストア管理者とワークスペース管理者は、デフォルトでこの権限を持ちます。

Google Cloudアカウントの場合

  • GCS バケット。送信料金を回避するには、データにアクセスするワークスペースと同じリージョンに配置する必要があります。

    • 外部ロケーション パスには、標準 ASCII 文字 (文字A–Za–z 、数字0–9 、および/_-などの一般的な記号) のみを含める必要があります。
    • Google Cloud Storage階層型名前空間 (HNS) は、外部ロケーションではサポートされていません。 外部ロケーションを作成する前に、階層型名前空間を無効にします。
  • そのバケットのアクセスポリシーを変更する権限

GCS にアクセスするストレージ認証情報を作成する

GCSバケットにアクセスするためのストレージ資格情報を作成するには、そのバケット上のIAMロールをDatabricksが生成したGoogle Cloudサービスアカウントに割り当てることで、Unity Catalogにそのバケットへの読み書き権限を与えます。

Catalog Explorer を使用して Google クラウド サービス アカウントを生成する

  1. Unity Catalogが有効なDatabricksワークスペースに、メタストアに対するCREATE STORAGE CREDENTIAL権限を持つユーザーとしてログインします。

  2. サイドバーでクリックデータアイコン。 カタログ

  3. クリック追加またはプラスアイコン次に、 「資格情報の作成」 をクリックします。

  4. GCP サービス アカウント認証情報タイプ を選択します。

  5. ストレージ資格情報名 とオプションのコメントを入力してください。

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

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

    Databricksはストレージ資格情報を作成し、Google Cloudサービスアカウントを生成します。

  8. [資格情報の作成] ダイアログで、電子メール アドレスの形式であるサービス アカウント ID をメモし、 [完了] をクリックします。

  9. (オプション)ストレージ資格情報を特定のワークスペースにバインドします。

    デフォルトでは、権限を持つすべてのユーザーは、メタストアに接続された任意のワークスペースでストレージ資格情報を使用できます。特定のワークスペースからのみアクセスを許可したい場合は、 「ワークスペース」 タブに移動してワークスペースを割り当てます。 「特定のワークスペースにストレージ資格情報を割り当てる」を参照してください。

サービスアカウントの権限を構成する

これで、Google サービス アカウントに関連付けられたストレージ認証情報が Databricks に作成されました。ストレージ認証情報を使用する前に、特定の GCS バケットにアクセスするための権限を Google サービス アカウントに付与する必要があります。

  1. Google クラウド コンソールに移動し、 DatabricksからアクセスするGCSバケットを開きます。

    送信料金を回避するには、バケットは、データにアクセスする Databricks ワークスペースと同じリージョンに配置する必要があります。

  2. [ 権限 ] タブで [ + アクセス権を付与 ] をクリックし、サービスアカウントに以下のロールを割り当てます。

    • ストレージレガシーバケットリーダー
    • ストレージオブジェクト管理者

    サービスアカウントのEメールアドレスを主識別子として使用します。

  3. 保存 をクリックします。

これで、ストレージ資格情報を参照する外部ロケーションを作成できるようになりました。

(推奨) ファイルイベントの権限を構成する

注記

このステップはオプションですが、強くお勧めします。 Databricks にファイル イベントを構成するアクセス権を付与しない場合は、場所ごとにファイル イベントを手動で構成する必要があります。そうしないと、Databricks がリリースする可能性のある重要な機能へのアクセスが制限されます。

以下のステップにより、 Databricks完全な通知パイプラインをセットアップして、 GCSバケットから Google Cloud Pub/Sub にイベント通知メッセージを発行できるようになります。 ここでは、GCS バケットを持つ GCP プロジェクトがあり、Pub/Sub API が有効になっていることを前提としています。

  1. ファイル イベント用のカスタムIAMロールを作成します。

    1. GCSバケットを含むプロジェクトの Google クラウド コンソールで、 IAMと管理] > [役割] に移動します。

    2. すでにカスタムIAMロールがある場合は、それを選択して 「ロールの編集」を クリックします。 それ以外の場合は、 「ロール」 ページから 「+ ロールの作成」 をクリックして新しいロールを作成します。

    3. 「ロールの作成」 または 「ロールの編集」 画面で、カスタムIAMロールに次の権限を追加し、変更を保存します。 詳細な手順については、 GCP ドキュメントを参照してください。

      pubsub.subscriptions.consume
      pubsub.subscriptions.create
      pubsub.subscriptions.delete
      pubsub.subscriptions.get
      pubsub.subscriptions.list
      pubsub.subscriptions.update
      pubsub.topics.attachSubscription
      pubsub.topics.detachSubscription
      pubsub.topics.create
      pubsub.topics.delete
      pubsub.topics.get
      pubsub.topics.list
      pubsub.topics.update
      storage.buckets.update
  2. ロールへのアクセスを許可します。

    1. [IAM と管理] > [IAM] に移動します。
    2. [ アクセス権を付与 ] をクリックします。
    3. プリンシパルとしてサービス アカウントを入力します。
    4. カスタムIAMロールを選択します。
    5. 保存 をクリックします。
  3. クラウド ストレージ サービス エージェントにアクセス許可を付与します。

    1. Google クラウド ドキュメントの次のステップに従って、サービス エージェントのアカウント E メールを見つけます。
    2. Google クラウド コンソールで、 IAMと管理] > IAM > [アクセスの許可] に移動します。
    3. サービス エージェントのアカウント 電子メールを入力し、 Pub/Sub パブリッシャー* ロールを割り当てます。

これで、このストレージ資格情報を参照する外部ロケーションを作成できるようになります。

GCS バケットの外部ロケーションを作成する

このセクションでは、カタログ エクスプローラーまたはSQLを使用して外部ロケーションを作成する方法について説明します。 GCS バケットへのアクセスを許可するストレージ認証情報がすでにあることを前提としています。ストレージ認証情報がない場合は、 「 GCSアクセスするストレージ認証情報を作成する」の手順に従ってください。

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

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

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

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

  2. サイドバーでクリックデータアイコン。 カタログ

  3. クリック追加またはプラスアイコン次に、 「外部ロケーションを作成」 をクリックします。

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

  5. [ストレージ タイプ][GCP] を選択します。

  6. [URL] の下に、GCS バケットのパスを入力します。たとえば、 gs://mybucket/<path>

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

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

  9. (オプション) 外部ロケーションがHive metastoreフェデレーション カタログを対象としている場合は、 [詳細オプション] をクリックして、 フォールバック モード を有効にします。

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

  10. (オプション) ファイル イベントは、セットアップを簡素化し、ファイル到着トリガーやAuto Loaderファイル通知などの機能のパフォーマンスと容量を向上させるために、 デフォルト によって有効になっています。 資格情報が正しく構成されていない場合、検証が失敗する可能性があります。認証情報の設定の詳細については、 「外部ロケーションのファイル イベントの設定」を参照してください。 ファイル イベント機能を使用する予定がない場合でも、場所を強制的に作成することを選択できます。

    ファイル イベントの種類を変更するには、 [詳細オプション] をクリックし、 [ファイル イベントの種類] ドロップダウン リストからオプションを選択します。

    • 自動 (推奨) : ストレージ キューとイベント サブスクリプションは、そのライフサイクル全体を通じて自動的に作成および管理されます。
    • 提供 : ストレージ キューは組織によって提供されます。組織がクラウド リソースと安全管理を所有および構成する必要がある場合は、このオプションを選択します。
  11. 作成 をクリックします。

  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>:この外部ロケーションがアクセスを許可するクラウドテナント内のパス。 たとえば、 gs://mybucket
  • <storage-credential-name>: バケットの読み取りと書き込みを許可するストレージ認証情報の名前。ストレージ資格情報名にハイフン ( - ) などの特殊文字が含まれている場合は、バッククォート ( ` ` ) で囲む必要があります。
SQL
CREATE EXTERNAL LOCATION [IF NOT EXISTS] `<location-name>`
URL '<bucket-path>'
WITH ([STORAGE] CREDENTIAL `<storage-credential-name>`)
[COMMENT '<comment-string>'];

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

接続を確認する

外部ロケーションが正常に作成されたことを確認するには、外部ロケーションからファイルを読み取ってみます。 たとえば、 example.csvという名前のCSVファイルを含む外部ロケーションgs://external-location-bucketがあるとします。 gs://external-location-bucket/example.csvファイルから読み取るには、次のステップに従います。

  1. サイドバーで、ノートブックのアイコン。[ ワークスペース ]をクリックします。

  2. [作成] をクリックし、 [ノートブック] を選択します。

  3. 次の Python コード スニペットを実行します。

    Python
    display(dbutils.fs.ls('gs://external-location-bucket/'))

    外部ロケーション内のファイルパスのリストが表示されます。 この例では、 gs://external-location-bucket/example.csvファイルが出力に表示されます。

  4. 外部ロケーションにある特定のファイルを読み取るには、次のPythonコード スニペットを実行します。

    Python
    spark.read.format("csv") \
    .option("header", "true") \
    .option("delimiter", ";") \
    .load('gs://external-location-bucket/example.csv') \
    .display()

    これによりgs://external-location-bucket/example.csvファイル内のデータが表示されます。

次のステップ