【问题标题】:AWS Lambda : Calling the invoke API action failed with this message: Network ErrorAWS Lambda:调用调用 API 操作失败,并显示以下消息:网络错误
【发布时间】:2019-04-10 08:32:57
【问题描述】:

我创建了一个 lambda,它遍历给定 S3 存储桶中的所有文件并删除 S3 存储桶中的文件。 S3 存储桶有大约 10 万个文件,我正在选择和删除大约 6 万个文件。我已将 lambda 的超时设置为最大(15 分钟)超时值。几分钟后,lambda 始终返回“网络错误”,尽管它似乎在后台运行了一段时间,即使在返回错误之后也是如此。如何解决这个问题?

【问题讨论】:

    标签: python amazon-web-services amazon-s3 aws-lambda boto3


    【解决方案1】:

    S3 有Rate Limiting,它限制了您每秒可以执行的读写次数。

    Amazon S3 自动扩展到高请求率。例如, 您的应用程序可以达到至少 3,500 PUT/POST/DELETE 和 5,500 存储桶中每个前缀的每秒 GET 请求数。没有限制 桶中前缀的数量。增加阅读量很简单 或以指数方式写入性能。例如,如果您创建 10 Amazon S3 存储桶中的前缀以并行读取,您可以扩展 您的读取性能达到每秒 55,000 个读取请求。

    如果所有这些对象的键(文件路径)中都有相同的 8 个字符,则它们位于相同的前缀上,并且限制为 3,500 个 DELETE 和 5,500 个 GET。如果是这种情况并且您需要定期执行此操作,请考虑更改前缀,使键的前 8 个字符不同,从而强制对象分布在更多节点上。我的previous answers 之一对此进行了更详细的介绍。

    或者,您可以使用bulk delete 操作,每个操作最多删除 1000 个对象。

    您看到的延迟可能是由于eventual consistency 当 S3 跨区域中的 AZ 同步时造成的。

    Amazon S3 为所有区域的覆盖 PUTS 和 DELETES 提供最终一致性。

    【讨论】:

    • 谢谢@Matt。这包含大约 100 个前缀,每个前缀有大约 600 - 1500 个文件。我会尝试批量删除选项。
    【解决方案2】:

    我正在测试另一个函数,结果出现了这个错误。稍微阅读一下文档,我发现我激活了油门选项,它会降低您函数的速率。

    解决方案是创建另一个函数并查看油门是否出现该错误。

    【讨论】:

      猜你喜欢
      • 2020-07-29
      • 1970-01-01
      • 2017-03-08
      • 2021-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-05
      • 2017-07-28
      相关资源
      最近更新 更多