如何使用Python在Databricks挂载S3存储桶及密钥不存在报错处理
Databricks挂载S3报Secret不存在问题排查与解决
排查步骤
- 确认Secret Scope是否存在
执行命令dbutils.secrets.listScopes()查看当前工作区所有可用的Secret Scope,检查返回结果中是否包含aws。如果不存在,需要先创建对应Scope,可通过Databricks工作区管理界面操作,或使用Databricks CLI执行databricks secrets create-scope --scope aws完成创建。 - 确认Scope下的Secret Key是否匹配
执行命令dbutils.secrets.list("aws")查看awsScope下所有已配置的密钥名称,首先注意你现有代码中获取access_key和secret_key时使用的key均为my key,这是明显错误:AWS的访问密钥ID和私有访问密钥不可能对应同一个Secret Key值。同时报错信息提到不存在的key为my aws access key,说明你配置的access key对应的密钥名称大概率是my aws access key,而非你代码中填写的my key,需要将代码中的key参数替换为实际配置的正确名称。 - 确认权限配置
检查你当前使用的Databricks账号对awsScope是否有读取权限,无读取权限时也会触发Secret不存在的报错。可联系工作区管理员在Secret Scope的权限配置页为你的账号授予READ权限。
修复后参考代码
# 替换为你实际配置的对应Secret Key名称 access_key = dbutils.secrets.get(scope = "aws", key = "my aws access key") secret_key = dbutils.secrets.get(scope = "aws", key = "my aws secret key") encoded_secret_key = secret_key.replace("/", "%2F") aws_bucket_name = "bengali-ai" mount_name = "bengali" dbutils.fs.mount("s3a://%s:%s@%s" % (access_key, encoded_secret_key, aws_bucket_name), "/mnt/%s" % mount_name)
完成上述排查和代码修正后,重新执行挂载命令即可。
内容的提问来源于stack exchange,提问作者Pavle Tabandzelic
相关产品推荐
相关产品推荐

