python - 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, timeout): 14:04:36 OverflowError: timestamp too large to convert to C _PyTime_t
解决方案
这看起来像运行时问题,可能与此错误有关:https ://bugs.python.org/issue25155
尝试将您的 lambda 运行时更改为支持的最新版本(撰写本文时为 Python 3.8),看看问题是否仍然存在。
推荐阅读
- timer - STM32 DMA从定时器计数到内存
- mongodb - 如何在猫鼬的子文档数组中查找字段?
- javascript - 使用输入文本和 onclick 按钮的弹出窗口
- python - python(从anaconda安装)无法编译
- r - RShiny 列与图片重叠
- r - 是否可以在 R 中自定义重写 install.packages() 以便不需要在包名称周围指定引号?
- c# - 如何模拟 Azure.Container 以引发异常并且不出错
- c++ - 使用模板调度模板化函数的优雅方式
- java - 如何取回存储在 JCEKS 密钥库中的密码?
- vue.js - 无法在 Vue.js 中加载字体