首页 > 解决方案 > AWS:将文件从 s3 下载到 lambda tmp 文件夹时出现溢出错误

问题描述

我想从 s3 下载文件并将其保存到我的 lambda 的 tmp 文件夹中。但是我发现了一个让我抓狂的奇怪的意外错误:OverflowError: timestamp too large to convert to C _PyTime_t

这是我的代码,我错过了什么吗?

s3 = boto3.resource('s3')
bucket_name = 'my_bucket'
keys = ['private.pkcs8', 'public.pubkey']
for key in keys: 
    try:
        local_file_name = 'tmp/' + key
        s3.Bucket(bucket_name).download_file(key, local_file_name)
    except botocore.exceptions.ClientError as e:
      if e.response['Error']['Code'] == "404":
          continue
      else:
          raise

将 s3 作为客户端而不是资源检索时,我遇到了同样的错误。使用不同的日志,我可以检查“download_file”功能带来的错误。

请帮我!!!

编辑:错误的完整堆栈跟踪

14:04:36 [错误] 2020-02-18T14:04:36.104Z f8f5aef0-18a3-41d0-951f-4d979fb24aa4 时间戳太大而无法转换为 C _PyTime_t 14:04:36 回溯(最近一次通话最后):14: 04:36 文件“/opt/python/boto3/s3/inject.py”,第 172 行,在 download_file 14:04:36 extra_args=ExtraArgs,回调=回调) 14:04:36 文件“/opt/python/ boto3/s3/transfer.py”,第 307 行,在 download_file 14:04:36 future.result() 14:04:36 文件“/opt/python/s3transfer/futures.py”,第 106 行,在结果 14 中: 04:36 return self._coordinator.result() 14:04:36 文件“/opt/python/s3transfer/futures.py”,第 265 行,结果 14:04:36 raise self._exception  14:04:36文件“/opt/python/s3transfer/tasks.py”,第 255 行,在 _main 14:04:36 self._submit(transfer_future=transfer_future, **kwargs) 14:04:36 文件“/opt/python/s3transfer/download.py”,第 343 行,在 _submit 14:04:36 **transfer_future.meta.call_args.extra_args 14:04:36 文件“/opt/python/botocore/client. py”,第 276 行,在 _api_call 14:04:36 中返回 self._make_api_call(operation_name, kwargs) 14:04:36 文件“/opt/python/botocore/client.py”,第 586 行,在 _make_api_call 14:04 中: 36 raise error_class(parsed_response, operation_name) 14:04:36 botocore.exceptions.ClientError: An error occurred (400) when calling HeadObject operation: Bad Request 14:04:36 在处理上述异常时,又发生了一个异常:14 :04:36 回溯(最后一次通话):14:04:36 文件“/var/task/lb_get_tlb_connection_token_rds.py”,第 181 行,在 lambda_handler 14:04:36 bucket.download_file(key, local_file_name,ExtraArgs={'VersionId': 'foo'}) 14:04:36 文件“/opt/python/boto3/s3/inject.py”,第 246 行,在 bucket_download_file 中 14:04:36 ExtraArgs=ExtraArgs,Callback=Callback , Config=Config) 14:04:36 文件 "/opt/python/boto3/s3/inject.py", 第 172 行, 在 download_file 14:04:36 extra_args=ExtraArgs, callback=Callback)  14:04:36文件“/opt/python/boto3/s3/transfer.py”,第 325 行,在在在退出 14:04:36 self._manager。退出(*args) 14:04:36 文件“/opt/python/s3transfer/manager.py”,第 539 行,退出 14:04:36 self._shutdown(cancel, cancel_msg, cancel_exc_type) 14:04:36 文件“/opt/python/s3transfer/manager.py”,第 578 行,在 _shutdown 14:04:36 self._submission_executor.shutdown( )  14:04:36 文件“/opt/python/s3transfer/futures.py”,第 474 行,关闭中 14:04:36 self._executor.shutdown(wait) 14:04:36 文件“/opt/python /concurrent/futures/thread.py”,第 169 行,在关机 14:04:36 t.join(sys.maxsize) 14:04:36 文件“/var/lang/lib/python3.7/threading.py” ,第 1048 行,加入 14:04:36 self._wait_for_tstate_lock(timeout=max(timeout, 0)) 14:04:36 文件“/var/lang/lib/python3.7/threading.py”,第 1060 行,在 _wait_for_tstate_lock 14:04:36 elif lock.acquire(block, ti​​meout): 14:04:36 OverflowError: timestamp too large to convert to C _PyTime_t

标签: pythonamazon-web-servicesamazon-s3aws-lambdaboto3

解决方案


这看起来像运行时问题,可能与此错误有关:https ://bugs.python.org/issue25155

尝试将您的 lambda 运行时更改为支持的最新版本(撰写本文时为 Python 3.8),看看问题是否仍然存在。


推荐阅读