Google Cloud Storageに接続する

この記事では、Google Cloud Storage (GCS) に格納されているテーブルとデータを読み書きするために Databricks からの接続を構成する方法について説明します。

GCS バケットから読み取りまたは書き込みを行うには、アタッチされたサービスアカウントを作成し、バケットをサービスアカウントに関連付ける必要があります。 サービスアカウント用に生成したキーを使用して、バケットに直接接続します。

Google Cloudのサービスアカウントキーを使用して GCS バケットに直接アクセスする

バケットに対して直接読み取りと書き込みを行うには、 Spark 設定で定義されたキーを設定します。

ステップ1: Google Cloudコンソールを使用してGoogle Cloudサービスアカウントを設定する

Databricks クラスターのサービス アカウントを作成する必要があります。 Databricks では、このサービス アカウントに、タスクの実行に必要な最小限の特権を付与することをお勧めします。

  1. 左側のナビゲーションペインで [ IAM and Admin ] をクリックします。

  2. サービス・アカウント」をクリックします。

  3. [+ CREATE サービス アカウント] をクリックします。

  4. サービス アカウントの名前と説明を入力します。

    Google Create GCS のサービス アカウント
  5. [作成]をクリックします。

  6. 続行」をクリックします。

  7. [完了] をクリックします。

ステップ 2: GCS バケットに直接アクセスするためのキーを作成する

警告

サービス アカウント用に生成する JSON キーは、Google Cloud アカウントのデータセットとリソースへのアクセスを制御するため、許可されたユーザーとのみ共有する必要がある秘密鍵です。

  1. Google Cloud コンソールのサービス アカウント リストで、新しく作成したアカウントをクリックします。

  2. [キー] セクションで、[キーの追加] > [新しいキーの作成] をクリックします。

    Googleクリエイトキー
  3. JSON キーの種類を受け入れます。

  4. 「作成」をクリックします。キーファイルがコンピュータにダウンロードされます。

ステップ3: GCS バケットを設定する

バケットの作成

バケットがまだない場合は、作成します。

  1. 左側のナビゲーション ウィンドウで [ ストレージ ] をクリックします。

  2. バケットを作成」をクリックします。

    Google Create バケット
  3. [作成]をクリックします。

バケットを構成する

  1. バケットの詳細を設定します。

  2. 権限」タブをクリックします。

  3. [アクセス許可] ラベルの横にある [ADD] をクリックします。

    Google バケットの詳細
  4. クラウドストレージロールからバケットのサービスアカウントに ストレージ管理者 権限を付与します。

    Google バケットの権限
  5. [保存]をクリックします。

ステップ 4: サービス アカウント キーを Databricks シークレットに配置する

Databricks では、すべての資格情報を格納するためにシークレットスコープを使用することが推奨されています。 秘密キーと秘密キー ID をキー JSON ファイルから Databricks シークレットスコープに配置できます。 ワークスペース内のユーザー、サービスプリンシパル、およびグループに、シークレットスコープを読み取るためのアクセス権を付与できます。 これにより、サービスアカウントキーが保護され、ユーザーは GCS にアクセスできるようになります。 シークレットスコープを作成するには、「 シークレット」を参照してください。

ステップ 5: Databricks クラスターを構成する

  1. [ Spark Config ] タブで、次のスニペットを使用して、シークレットスコープに格納されるキーを設定します。

    spark.hadoop.google.cloud.auth.service.account.enable true
    spark.hadoop.fs.gs.auth.service.account.email <client-email>
    spark.hadoop.fs.gs.project.id <project-id>
    spark.hadoop.fs.gs.auth.service.account.private.key {{secrets/scope/gsa_private_key}}
    spark.hadoop.fs.gs.auth.service.account.private.key.id {{secrets/scope/gsa_private_key_id}}
    

    <client-email><project-id> を、キー JSON ファイルの正確なフィールド名の値に置き換えます。

クラスター アクセス制御とノートブック アクセス制御の両方を併用して、GCS バケット内のサービス アカウントとデータへのアクセスを保護します。 「コンピュート権限」と 「Databricks ノートブックを使用したコラボレーション」を参照してください。

ステップ 6: GCS から読み取る

GCS バケットから読み取るには、サポートされている任意の形式で Spark 読み取りコマンドを使用します。

df = spark.read.format("parquet").load("gs://<bucket-name>/<path>")

GCS バケットに書き込むには、サポートされている任意の形式で Spark write コマンドを使用します。

df.write.format("parquet").mode("<mode>").save("gs://<bucket-name>/<path>")

<bucket-name> は、「ステップ 3: GCS バケットを設定する」で作成したバケットの名前に置き換えます。

ノートブックの例

Google Cloud Storage ノートブックから読み取る

ノートブックを新しいタブで開く

Google Cloud Storage ノートブックへの書き込み

ノートブックを新しいタブで開く