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

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.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. (オプション) 外部ロケーションで変更通知を購読する機能を有効にするには、 [詳細オプション] をクリックし、 [ファイル イベントを有効にする] を選択します。

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

  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ファイル内のデータが表示されます。

次のステップ