解压缩的大小必须小于262144000字节aws-iot-vice-sdk-v2



刚刚将aws-iot-device-sdk-v2安装到我的lambda集群中。我能够很好地将软件包安装到项目中。不幸的是,我得到了错误An error occurred: exampleLambda - Resource handler returned message: "Unzipped size must be smaller than 262144000 bytes (Service: Lambda, Status Code: 400, Request ID: ...查看无服务器,我发现包含的内容将我的包大小从36MB增加到92MB。这似乎一点都不对。我们的团队已经安装了100多个软件包,但没有一个软件包将我们部署的内存大小增加这么多。这个问题有解决办法吗?

是的,解压缩时代码和依赖项的限制为250 MB。我们确实提供了一个压缩的代码文件和依赖项,但在幕后它会被解压缩。

最佳实践:保持lambda大小尽可能小,并根据流进行编排,而不是在一个lambda中完成所有操作。大尺寸lambda确实会影响的初始化(冷启动(

解决方法:

  1. 打包时使用缩小的依赖项。打包项目时使用打包工具/实用程序
  2. 如果不使用,请尝试删除不需要的依赖项
  3. 如果使用了巨大的资产,请将它们放在S3中使用,而不是放在包中

如果这些都不起作用,请在S3中保留较大的依赖项,并将其加载到/tmp目录中并使用它。这不是一个好的解决方案,但会起作用。我已经用它在Java中设置了一个硒依赖项。

此外,我对社区的其他解决方案持开放态度。谢谢

我遇到了这样的问题,我意识到我使用了不同的NodeJS版本来进行部署/构建,而不是在应用程序/开发/安装期间使用的版本

注:

这是我从面临的同样问题中得到的自己的解决方案。仅适用于使用NodeJS的应用程序。

我建议尝试几件事:

  1. 用C编写的aws-iot-device-sdk-v2直接依赖aws-crt是跨平台的,您可以使用脚本从node_modules/aws-crt/dist/bin中删除未使用平台的二进制文件
  2. 如果您使用serverless.com来打包lambda,那么有一个插件也可以帮助减小包大小,将其与1结合使用可以进一步减小包大小
  3. aws-iot-device-sdk-v2依赖项可以移动到Lambda层,这将减小Lambda包的大小

从另一个角度来看您的问题,我会质疑是否需要在AWS Lambda函数中使用设备SDK。设备sdk通常用于在客户端和AWS IoT Core之间建立双向连接,以发布和接收MQTT消息。它涉及TCP/TLS或Websocket连接,需要在每次冷启动时重新建立。这是Lambda函数的反模式,尤其是在消息量很大的情况下。

当使用Lambda函数时,您应该使用AWS SDK直接发布到AWS IoT Core:对于Javascript物联网数据平面客户端。

为了通过Lambda函数处理MQTT消息,您将依赖AWS IoT规则将消息直接中继到处理Lambda函数,或者,为了增加可靠性和可扩展性,您可以使用相应的规则操作将消息放入Amazon SQS队列或Amazon Kinesis数据流,并将其配置为Lambda函数的事件源。

相关内容

  • 没有找到相关文章

最新更新