从 s3 读取时出现溢出错误 - 有符号整数大于最大值

2023-11-24

使用以下代码将大文件从 S3 (>5GB) 读取到 lambda 中:

import json
import boto3

s3 = boto3.client('s3')

def lambda_handler(event, context):
    
    response = s3.get_object(
        Bucket="my-bucket",
        Key="my-key"
    )
    
    text_bytes = response['Body'].read()

    ...
    
    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')
    }

但是我收到以下错误:

"errorMessage": "signed integer is greater than maximum"
"errorType": "OverflowError"
"stackTrace": [
    "  File \"/var/task/lambda_function.py\", line 13, in lambda_handler\n    text_bytes = response['Body'].read()\n"
    "  File \"/var/runtime/botocore/response.py\", line 77, in read\n    chunk = self._raw_stream.read(amt)\n"
    "  File \"/var/runtime/urllib3/response.py\", line 515, in read\n    data = self._fp.read() if not fp_closed else b\"\"\n"
    "  File \"/var/lang/lib/python3.8/http/client.py\", line 472, in read\n    s = self._safe_read(self.length)\n"
    "  File \"/var/lang/lib/python3.8/http/client.py\", line 613, in _safe_read\n    data = self.fp.read(amt)\n"
    "  File \"/var/lang/lib/python3.8/socket.py\", line 669, in readinto\n    return self._sock.recv_into(b)\n"
    "  File \"/var/lang/lib/python3.8/ssl.py\", line 1241, in recv_into\n    return self.read(nbytes, buffer)\n"
    "  File \"/var/lang/lib/python3.8/ssl.py\", line 1099, in read\n    return self._sslobj.read(len, buffer)\n"
  ]

我使用的是 Python 3.8,我在这里发现了 Python 3.8/9 的一个问题,这可能是原因:https://bugs.python.org/issue42853

有没有办法解决?


正如您链接到的错误中提到的,Python 3.8 的核心问题是一次读取超过 1GB 的错误。您可以使用错误中建议的解决方法的变体来分块读取文件。

import boto3

s3 = boto3.client('s3')

def lambda_handler(event, context):
    response = s3.get_object(
        Bucket="-example-bucket-",
        Key="path/to/key.dat"
    )
    buf = bytearray(response['ContentLength'])
    view = memoryview(buf)
    pos = 0
    while True:
        chunk = response['Body'].read(67108864)
        if len(chunk) == 0:
            break
        view[pos:pos+len(chunk)] = chunk
        pos += len(chunk)
    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')
    }

然而,在每次 Lambda 运行中,您充其量只会花费一分钟或更长时间来从 S3 读取数据。如果您可以将文件存储在 EFS 中并从 Lambda 中读取它,或者使用 ECS 等其他解决方案来避免从远程数据源读取,那就更好了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 s3 读取时出现溢出错误 - 有符号整数大于最大值 的相关文章

随机推荐

  • 在 *ngFor-- IONIC2/Angular2 中迭代两个数组

    我已将值存储在两个数组中 以便在单个 ion list 中迭代 Billerstatusstate 和 Billerstatusnamelst 是两个数组 我尝试过以下迭代
  • Heroku 提供 create-react-app 开发构建而不是生产

    我是 create react app 的新手 我刚刚使用 redux 和 react router dom 进行了全新设置 然后将其推送到 Scalingo 然后推送到 Heroku 它们最终都为开发构建提供服务 我的 redux log
  • 无法将 .ttf 字体包含到项目中

    我试图将字体 Hipchick 包含到我的项目中 但它不起作用 我测试了几种方法 最终采用了以下方法 iOS 提示 自定义字体试图解决这个问题 但仍然不起作用 这是一些屏幕和代码 字体添加到项目中 hitch ttf 它被添加到 plist
  • 验证使用 Moq 调用的通用方法

    我无法验证该模拟IInterface SomeMethod
  • 为什么 tomcat-maven-plugin 尝试部署到错误的 URL?

    我正在创建一个包含两个模块的虚拟 Maven 项目 并且我包含了一个通用的 pom xml 文件 我能够从根 pom xml 文件进行构建并运行所有测试 但是当将文件部署到 Tomcat 时 它会失败 我有的插件是
  • 跟随手指的旋转动画,遵循圆的外部路径的 uibuttons

    我正在寻找一些指导来开始弄清楚跟踪手指运动并沿着圆的外部路径移动 UIButton 集合的动画 我想象它会有一种左轮手枪的感觉 就像每个都在底部锁定到位一样 或者像滑动其中一个幻灯片插件一样 提前致谢 示例代码在GitHub 其实并不是那么
  • 数组的indexOf和findIndex函数之间的区别

    我对数组中的两个函数 indexOf 和 find Index 之间的区别感到困惑 文档说 findIndex 返回数组中第一个元素的索引 其中 谓词为真 否则为 1 and indexOf 返回值在数组中第一次出现的索引 大批 主要区别在
  • 作为标记帮助程序的视图组件不会被调用

    ASP NET Core 1 1 中引入了将视图组件作为标记帮助程序调用 看 调用视图组件作为标签助手 但以下仅返回VC 测试视图的一部分 看起来
  • 如何使用 python 的 TimedRotatingFileHandler 强制旋转名称?

    我正在尝试使用定时旋转文件处理程序将每日日志保存在单独的日志文件中 轮换工作按预期完美运行 但我不喜欢它的工作方式是文件的命名 如果我将日志文件设置为 my log file log 这将是 今天的 日志文件 当它在午夜更改日期时 它将被重
  • 使用 PHP 打开和创建受密码保护的 zip 文件

    我发现以下两个命令分别用于创建和打开受密码保护的 zip 文件 然而我想知道是否可以用纯 PHP 来做到这一点 echo system zip P password file zip file txt echo shell exec unz
  • 使用任务(TPL)库是否会使应用程序成为多线程?

    最近在接受采访的时候 我被问到了这个问题 问 您编写过多线程应用程序吗 A Yes 问 愿意解释更多吗 答 我用过Tasks 任务并行库 执行一些任务 例如waiting for some info from internet while
  • 同步成本

    在高度并发的 Java 程序中 假设我的方法已正确编写并正确同步 我想知道如何确定哪个更好 void synchronized something or void something synchronized this here do st
  • SGEN XMLSerializer - 是否应将 .XMLSerializers.dll 添加为对当前项目或 GAC 的引用?

    我用 XMLSerializer 类做了一些事情 像大多数初学者一样 我在应用程序启动时面临性能问题 我阅读了很多博客 文章 最后使用了 SGEN 工具 现在性能看起来不错 但我仍然不清楚一些事情 1 我应该使用这样的SGEN语法 SGen
  • 如何在列表的强类型视图上使用 LabelFor

    当我使用asp net mvc 3脚手架做一个列表时 我得到一个包含表格的视图 该表的标题硬编码在视图中 我想使用 LabelFor 所以我得到了我需要的 l10n 我尝试做的 但失败了 是 model IEnumerable
  • 如何处理设备的authenticate_user!用ajax调用?

    我有一个带有 remote gt true 的表单 这意味着它将通过 ajax 提交 在控制器中 我有这样的代码 before filter authenticate user only gt create 因为我只允许确认的用户创建资源
  • xcode - 添加 AVFountation 框架

    我正在使用 xcode 4 2 创建一个 iphone 应用程序 并尝试使用 AVFoundation 框架来播放一些无线电流 当我将其导入项目的框架和构建时 我收到以下警告 ld warning ignoring file Users x
  • 如果字符串包含单词列表中的任何一个,R 每行返回 true 或 false

    我有一个包含一列字符串的数据集 text lt c flight cancelled dog cat coach travel car bus cow sheep high bar transport lt 0 df lt data fra
  • C 或 C++ 中的大整数 [关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我正在开发一个阶乘程序 当试图找到 1000 的阶乘时 该程序不起作用 我认为大整数是解
  • 在 PHP 中动态填充静态变量

    我有两个静态值 type 和 typeID 类型是人类可读的且恒定的 并且需要根据类型的值从数据库中查找类型ID 我需要在首次加载类定义时进行一次查找 为了说明这一点 这里有一些代码不起作用 因为您无法在声明空间中调用函数 MyClass
  • 从 s3 读取时出现溢出错误 - 有符号整数大于最大值

    使用以下代码将大文件从 S3 gt 5GB 读取到 lambda 中 import json import boto3 s3 boto3 client s3 def lambda handler event context response