AWS Javascript SDK安装特定模块而非整个SDK

4

我在我的项目中使用Lambda函数(Nodejs运行时),并使用aws-sdk中的一些模块。

到目前为止,我已经安装了整个aws-sdk,并像这样单独地引入每个包:

const ApiGatewayManagementApi = require('aws-sdk/clients/apigatewaymanagementapi');

这是可行的,但问题在于我需要安装整个aws-sdk,它非常大,因此会使我的函数包变得很大。

有没有一种方法只安装我实际使用的模块?

我尝试过这样做:

$ npm install aws-sdk/clients/apigatewaymanagementapi --save

这给了我以下错误:

npm ERR! code ENOLOCAL
npm ERR! Could not install from "aws-sdk/clients/apigatewaymanagementapi" as it does not contain a package.json file.

npm ERR! A complete log of this run can be found in:
npm ERR!     /Users/gustavocsdc/.npm/_logs/2019-05-16T02_32_28_129Z-debug.log
1个回答

4
很遗憾,目前的AWS JavaScript SDK版本(2.x)不支持此功能。正在制作一个新的AWS SDK for JavaScript V3来解决这个问题,但它仍处于“开发者预览”阶段(2019年5月16日)。
同时,建议您为JavaScript Lambda函数安装完整的aws-sdkLambda Application Best Practices指出:

控制函数部署包中的依赖关系。 AWS Lambda执行环境包含许多库,例如AWS SDK用于Node.js和Python运行时(完整列表可以在此处找到:AWS Lambda Runtimes)。为了启用最新的功能和安全更新,Lambda会定期更新这些库。这些更新可能会对Lambda函数的行为产生微妙的变化。为了完全控制函数使用的依赖项,我们建议将所有依赖项与部署包一起打包。

可以看出,如果您愿意做出权衡,不必将sdk包含在Lambda包中(从而减小其大小),这并不是一个严格的要求。您考虑将aws-sdk作为您的包的一部分提供的另一个原因是,可能有一个更近期的sdk版本中存在一个新功能,您想使用该功能,但当前运行时提供的sdk中没有该功能。
为了完整起见,根据AWS Lambda Runtimesnodejs10.x运行时提供了版本为2.437.0aws-sdk,而nodejs8.10运行时提供了版本为2.290.0aws-sdk

非常棒的答案!非常感谢。由于“这些更新可能会引入对Lambda函数行为的微妙更改”,我不想依赖于可用的aws-sdk。 - GCSDC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接