【发布时间】:2019-11-10 20:09:53
【问题描述】:
我正在通过 python boto3 使用 athena 查询 S3 存储桶。查询成功且没有错误,但输出 S3 存储桶为空。但是,当我通过 python 控制台运行查询时,它可以工作,并且在 S3 输出存储桶中存在 .csv 和 .csv.metadata 以及 athena 查询结果。
我已添加此页面上提到的权限。 https://docs.aws.amazon.com/athena/latest/ug/cross-account-permissions.html
不确定这是否重要,但查询结果应该存放的 S3 输出存储桶不是由无服务器管理的(这就是我在项目中使用的)它是一个现有的 S3 存储桶,我使用了这个包和说明 @987654322 @ 并且它适用于 dynamoDB 和胶水目录信息在触发 lambda 时被转储。
def function(event,context):
client = boto3('athena')
query = 'select * from athenaTable'
response = client.start_query_execution(
QueryString=params["query"],
QueryExecutionContext={
'Database': params['database']
},
ResultConfiguration={
'OutputLocation': 's3://bucket-name/key/' #output bucket
}
)
return response
【问题讨论】:
-
当您说“当我通过 python 控制台运行查询时它可以工作”时,您是指 Athena 控制台吗?用于调用
start_query_execution()的凭据有哪些权限?这些凭据是否对目标存储桶具有PutObject权限? -
我的意思是在 python shell 上。它能够从我的 shell 环境中正确读取权限。是的,它具有 PutObject 权限。我正在使用 aws serverless 来使用 lambdas 设置所有 iam 角色
-
我怀疑这可能是与此软件包npmjs.com/package/serverless-plugin-existing-s3 相关的问题。所以,我将尝试使目标存储桶成为无服务器创建的 S3 存储桶,看看它是否有效
-
听起来用于运行代码的凭据没有足够的权限,而当您在本地运行它时,您使用的是另一组 确实 有足够权限的凭据权限。
标签: python amazon-s3 boto3 amazon-iam amazon-athena