概要
Google Cloud 以外の Databricks (本記事では Azure Databricks)のクラシックコンピュート( Serverless でない従来のクラスター)にて Google Cloud Storage (GCS)と連携する方法を共有します。
2025年10月13日時点で、GCS に対するストレージ資格を登録できるのは、 Databricks on Google Cloud のみのようです。そのため、Databricks on AWS や Azure Databricks では GCS に対するストレージ資格を登録できません。
出所:Google Cloud Storageに接続するためのストレージ資格情報を作成する | Databricks on Google Cloud
そこで、 レガシーの方法として紹介されている GCS に対する資格情報を
Spark config に設定する方法を検証しました。Spark Conf の設定に制限がある Serverless クラスターで実施できず、クラシッククラスターを利用する必要があります。
- Google Cloud Storageに接続する | Databricks on AWS
- Google Cloud Storage に接続する - Azure Databricks | Microsoft Learn
出所:Google Cloud Storage に接続する - Azure Databricks | Microsoft Learn
事前準備
- Azure Databricks
- Google Cloud 環境
実施手順
1. GCS 環境の構築
GCS のバケットを作成
フォルダを作成します。
Service Account の作成
GCS のバケットに対する権限を Service Account に付与
Service Account の認証情報を取得
ダウンロードできたファイルからかきの値を控えます。
- client_email
- project_id
- private_key
- private_key_id
2. Databricks における GCS 操作
クラスターを作成
Spark Config にて Service Account の認証情報を下記のようにセットしてクラスターを作成します。private_key と private_key_id の値を逆に設定しないように注意してください。
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 {private_key の値}
spark.hadoop.fs.gs.auth.service.account.private.key.id {private_key_id の値}
private_key や private_key_id を本手順ではそのままクラスターに設定しておりますが、基本的には Databricks シークレットに登録後に下記のように指定してください。
出所:Google Cloud Storage に接続する - Azure Databricks | Microsoft Learn
Databricks シークレットに登録する方法としては、 CLI や Databricks SDK を利用する方法があります。下記記事では Databricks SDK で実施する手順を紹介しています。
ノートブックスコープで Spark conf を設定するとエラーとなるため、必ずクラスターで設定するようにしてください。
spark.conf.set("spark.hadoop.google.cloud.auth.service.account.enable","true")
spark.conf.set("spark.hadoop.fs.gs.auth.service.account.email", client_email)
spark.conf.set("spark.hadoop.fs.gs.project.id", project_id)
spark.conf.set("spark.hadoop.fs.gs.auth.service.account.private.key", private_key)
spark.conf.set("spark.hadoop.fs.gs.auth.service.account.private.key.id", private_key_id)
ExecutionError: An error occurred while calling o457.ls.
: java.io.IOException: Error getting access token from metadata server at: http://169.254.169.254/computeMetadata/v1/instance/service-accounts/default/token
GCS に対する疎通確認
gcs_bucket_name = "dbx_with_gcs"
dbutils.fs.ls(f"gs://{gcs_bucket_name}/")
Databricks にて GCS のデータ操作
Databricks から GCS に書き込みを実施します。
schema = """
id int,
str_col string
"""
data = [
{
"id": 1,
"str_col": "abc",
},
{
"id": 2,
"str_col": "def",
},
{
"id": 3,
"str_col": "ghi",
},
]
df = spark.createDataFrame(data, schema=schema)
df.display()
df.write.format("delta").save(f"gs://{gcs_bucket_name}/tables/dbx_iceberg")
GCS に書き込まれていることを確認します。
Databricks にて GCS から読み込めることを確認します。
df_from_gcs = spark.read.format("delta").load(f"gs://{gcs_bucket_name}/tables/dbx_iceberg")
df_from_gcs.display()
GCS のディレクトリを初期化
dbutils.fs.rm(f"gs://{gcs_bucket_name}/tables", True)
GCS にてディレクター(tables フォルダ)が削除されたことを確認します。