Python 2.7 Boto3+;Python+;AWS S3:如何从bucket中的文件夹获取最新文件

Python 2.7 Boto3+;Python+;AWS S3:如何从bucket中的文件夹获取最新文件,python-2.7,amazon-web-services,amazon-s3,aws-lambda,boto3,Python 2.7,Amazon Web Services,Amazon S3,Aws Lambda,Boto3,我尝试通过API网关使用Lambda函数从S3存储桶中的文件夹获取文件。我想这样做是为了在PowerBI/Tableau中导入csv文件的最新版本以进行数据分析。如果插入文件名,我就可以这样做。但是,在最新的文件中,这显然无法解决。 我希望代码始终获取该文件夹中的最新文件。我计划通过上次修改的属性来完成这项工作,而不是通过文件名本身 我的水桶看起来像这样 水桶 -输入 -输入文件.csv -输出 -输出18042019.csv -输出19042019.csv 然而,我的代码不允许在文件夹中搜索(

我尝试通过API网关使用Lambda函数从S3存储桶中的文件夹获取文件。我想这样做是为了在PowerBI/Tableau中导入csv文件的最新版本以进行数据分析。如果插入文件名,我就可以这样做。但是,在最新的文件中,这显然无法解决。 我希望代码始终获取该文件夹中的最新文件。我计划通过上次修改的属性来完成这项工作,而不是通过文件名本身

我的水桶看起来像这样 水桶 -输入 -输入文件.csv -输出 -输出18042019.csv -输出19042019.csv

然而,我的代码不允许在文件夹中搜索(据我所知),而且它似乎也不接受任何最新的文件。我试着把一个文件放在bucket的根文件夹中,看看它是否有效,但没有。我怎样才能解决这个问题

import json
import boto3
from datetime import datetime


def lambda_handler(event, context):
    # TODO implement
    get_last_modified = lambda obj: int(obj['LastModified'].strftime('%s'))

    client = boto3.client('s3')
    objs= client.list_objects_v2(Bucket='BUCKET')['Contents']
    last_added = [obj['Key'] for obj in sorted(objs, key=get_last_modified)][0]

    bucket='BUCKET'
    link = client.generate_presigned_url('get_object', {'Bucket': bucket, 'Key': last_added}, 7200, 'GET')
    return {
        "statusCode": 303,
        "headers": {'Location': link}
    }
我得到的错误如下:

Response:
{
  "stackTrace": [
    [
      "/var/task/lambda_function.py",
      11,
      "lambda_handler",
      "objs= client.list_objects_v2(Bucket='BUCKET')['Contents']"
    ],
    [
      "/var/runtime/botocore/client.py",
      314,
      "_api_call",
      "return self._make_api_call(operation_name, kwargs)"
    ],
    [
      "/var/runtime/botocore/client.py",
      612,
      "_make_api_call",
      "raise error_class(parsed_response, operation_name)"
    ]
  ],
  "errorType": "ClientError",
  "errorMessage": "An error occurred (AllAccessDisabled) when calling the ListObjectsV2 operation: All access to this object has been disabled"
}

Request ID:
"afd650be-4841-43cf-9cf4-731390bea1ce"

Function Logs:
START RequestId: afd650be-4841-43cf-9cf4-731390bea1ce Version: $LATEST
An error occurred (AllAccessDisabled) when calling the ListObjectsV2 operation: All access to this object has been disabled: ClientError
Traceback (most recent call last):
  File "/var/task/lambda_function.py", line 11, in lambda_handler
    objs= client.list_objects_v2(Bucket='BUCKET')['Contents']
  File "/var/runtime/botocore/client.py", line 314, in _api_call
    return self._make_api_call(operation_name, kwargs)
  File "/var/runtime/botocore/client.py", line 612, in _make_api_call
    raise error_class(parsed_response, operation_name)
ClientError: An error occurred (AllAccessDisabled) when calling the ListObjectsV2 operation: All access to this object has been disabled

END RequestId: afd650be-4841-43cf-9cf4-731390bea1ce
REPORT RequestId: afd650be-4841-43cf-9cf4-731390bea1ce  Duration: 2125.21 ms    Billed Duration: 2200 ms    Memory Size: 128 MB Max Memory Used: 58 MB  

你能澄清你的代码有什么问题吗?有错误信息吗?你能打印上次添加的代码吗?@jogold我现在添加了代码。很抱歉迟了回复!这是当您使用
Bucket='Bucket'
呼叫时,对吗?使用正确的存储桶名称调用时会发生什么情况?
响应:{“errorMessage”:“2019-04-24T15:35:25.738Z 1eef59b9-a1c5-4057-8c1c-ded6e8e99109任务在3.00秒后超时”}请求ID:“1eef59b9-a1c5-4057-8c1c-ded6e8e99109”函数日志:开始请求ID:1eef59b9-a1c5-4057-8c1c-ded6e8e99109版本:$最新结束请求ID:1eef59b9-a1c5-4057-8c1c-ded6e8e99109报告请求ID:1eef59b9-a1c5-4057-8c1c-DED6E99109持续时间:3002.80毫秒计费持续时间:3000毫秒内存大小:128 MB最大使用内存:60 MB 2019-04-246T15:35:25.738Z 1eef59b9-a1c5-4057-8c1c-DED8E109任务在3.00秒后超时
objs的长度是多少?你能登录到CloudWatch吗?你能澄清你的代码有什么问题吗?有错误信息吗?你能打印上次添加的代码吗?@jogold我现在添加了代码。很抱歉迟了回复!这是当您使用
Bucket='Bucket'
呼叫时,对吗?使用正确的存储桶名称调用时会发生什么情况?
响应:{“errorMessage”:“2019-04-24T15:35:25.738Z 1eef59b9-a1c5-4057-8c1c-ded6e8e99109任务在3.00秒后超时”}请求ID:“1eef59b9-a1c5-4057-8c1c-ded6e8e99109”函数日志:开始请求ID:1eef59b9-a1c5-4057-8c1c-ded6e8e99109版本:$最新结束请求ID:1eef59b9-a1c5-4057-8c1c-ded6e8e99109报告请求ID:1eef59b9-a1c5-4057-8c1c-DED6E99109持续时间:3002.80毫秒计费持续时间:3000毫秒内存大小:128 MB最大使用内存:60 MB 2019-04-246T15:35:25.738Z 1eef59b9-a1c5-4057-8c1c-DED8E109任务在3.00秒后超时
objs的长度是多少?你能在CloudWatch上登录吗?