【问题标题】:Lambda function making an athena query and the query result is not in the S3 output bucketLambda 函数进行 athena 查询,查询结果不在 S3 输出存储桶中
【发布时间】: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


【解决方案1】:

对于遇到此问题的任何人,我都可以通过更改我的 lambda 函数的权限来解决它。因此,请确保您的 lambda 角色具有正确的策略。

我通过授予 Athena 和 Glue 的完全访问权限来解决这个问题。将这些策略添加到您的 lambda 角色。

完全访问权限可能超出您的实际需要,因此只需从这些服务中选择必要的策略

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-26
    • 2020-09-19
    • 2019-10-06
    • 1970-01-01
    • 2020-08-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多