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

Amazon S3 への接続

この記事では、Databricks から Amazon S3 (S3) に接続する方法について説明します。

URI と AWS キーを使用した S3 バケットへのアクセス

Spark プロパティを設定して、S3 にアクセスするための AWS キーを設定できます。

Databricks では、すべての資格情報の保存にシークレットスコープを使用することをお勧めします。 ワークスペース内のユーザー、サービスプリンシパル、およびグループに、シークレットスコープを読み取るためのアクセス権を付与できます。 これにより、AWS キーが保護され、ユーザーは S3 にアクセスできます。 シークレットスコープを作成するには、「 シークレットスコープの管理」を参照してください。

資格情報のスコープは、クラスターまたはノートブックのいずれかに設定できます。 クラスター アクセス制御とノートブック アクセス制御の両方を一緒に使用して、S3へのアクセスを保護します。コンピュートの権限Databricksノートブックを使用した共同作業を参照してください。

Sparkプロパティを設定するには、クラスターのSpark設定で次のスニペットを使用して、シークレットスコープに保存されているAWSキーを環境変数として設定します。

AWS_SECRET_ACCESS_KEY={{secrets/scope/aws_secret_access_key}}
AWS_ACCESS_KEY_ID={{secrets/scope/aws_access_key_id}}

その後、次のコマンドを使用してS3から読み込むことができます。

Python
aws_bucket_name = "my-s3-bucket"

df = spark.read.load(f"s3a://{aws_bucket_name}/flowers/delta/")
display(df)
dbutils.fs.ls(f"s3a://{aws_bucket_name}/")

オープンソースのHadoopオプションでS3にアクセス

Databricks Runtimeは、オープンソースのHadoopオプションを使用したS3Aファイルシステムの設定をサポートしています。グローバルプロパティとバケット単位のプロパティを設定できます。

グローバル設定

ini
# Global S3 configuration
spark.hadoop.fs.s3a.aws.credentials.provider <aws-credentials-provider-class>
spark.hadoop.fs.s3a.endpoint <aws-endpoint>
spark.hadoop.fs.s3a.server-side-encryption-algorithm SSE-KMS

バケットごとの設定

バケットごとのプロパティを設定するには、構文 spark.hadoop.fs.s3a.bucket.<bucket-name>.<configuration-key>を使用します。これにより、異なる資格情報やエンドポイントなどを使用してバケットを設定できます。

たとえば、グローバルS3設定に加えて、次のキーを使用して各バケットを個別に構成できます。

ini
# Set up authentication and endpoint for a specific bucket
spark.hadoop.fs.s3a.bucket.<bucket-name>.aws.credentials.provider <aws-credentials-provider-class>
spark.hadoop.fs.s3a.bucket.<bucket-name>.endpoint <aws-endpoint>

# Configure a different KMS encryption key for a specific bucket
spark.hadoop.fs.s3a.bucket.<bucket-name>.server-side-encryption.key <aws-kms-encryption-key>

Databricks からのデータの保存とアクセスに関する非推奨のパターン

非推奨のストレージパターンを次に示します。

important
  • S3Aファイルシステムはデフォルトでキャッシュを有効にし、「FileSystem.close()」でリソースを解放します。他のスレッドがキャッシュされたファイルシステムへの参照を誤って使用しないようにするには、「FileSystem.close()」を明示的に使用しないでください。
  • S3Aファイルシステムは、出力ストリームを閉じるときにディレクトリマーカーを削除しません。HADOOP-13230を含まないHadoopバージョンに基づくレガシーアプリケーションは、内部にファイルがあっても、それらを空のディレクトリと誤って解釈する可能性があります。