0
0

More than 1 year has passed since last update.

Databricks on AWSのPrivateLink環境でクロスアカウントS3アクセスに苦労した話

Posted at

こちらでPrivateLink環境を構築し、

こちらでクロスアカウントのS3バケットにアクセスできるように設定しました。ここまででも結構な道のり。

問題なく接続できるだろうと思ったらエラーに。

Python
display(dbutils.fs.ls("s3a://ty-databricks-cross-account-bucket"))

Screenshot 2023-01-22 at 14.18.22.png

org.apache.hadoop.net.ConnectTimeoutException: Instantiate shaded.databricks.org.apache.hadoop.fs.s3a.auth.AssumedRoleCredentialProvider on : com.amazonaws.SdkClientException: Unable to execute HTTP request: Connect to sts.amazonaws.com:443 [sts.amazonaws.com/54.239.21.217] failed: connect timed out

インスタンスプロファイルも設定して、クラスターのSpark設定も以下のようになっています。

fs.s3a.aws.credentials.provider org.apache.hadoop.fs.s3a.auth.AssumedRoleCredentialProvider
spark.databricks.hive.metastore.glueCatalog.enabled true
fs.s3a.assumed.role.arn arn:aws:iam::<S3バケットがあるAWSアカウントID>:role/bucket-owner-acct-s3-access-role

エラーメッセージをよく見てみると、Unable to execute HTTP request: Connect to sts.amazonaws.com:443 [sts.amazonaws.com/54.239.21.217] failed: connect timed outであれっと。STSのリージョナルエンドポイントも設定しているのになぜグローバルURLにアクセスしているのか。

解決策はTroubleshoot regional endpointsに。Spark設定で明示的にリージョナルエンドポイントを参照するようにすることで解決しました。以下の2行を追加。リージョンはap-northeast-1です。

spark.hadoop.fs.s3a.endpoint https://s3.ap-northeast-1.amazonaws.com
spark.hadoop.fs.s3a.stsAssumeRole.stsEndpoint https://sts.ap-northeast-1.amazonaws.com

これで無事アクセスできました。
Screenshot 2023-01-22 at 14.24.39.png

Databricks 無料トライアル

Databricks 無料トライアル

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0