是否可以使用比 AWS Lambda 中提供的更新版本的 aws-sdk?

Is it possible to use a newer version of the aws-sdk than provided in AWS Lambda?

最新版本的 aws-sdk 具有 ComprehendMedical 函数,我想为其创建一个 lambda 函数。

但是AWS-SDK的版本已经过时了几个月,还不能使用这些功能。想知道是否有办法使用最新的库?

谢谢!

是的,您只需要在 Lambda 函数的部署文件中捆绑最新版本的 SDK,而不是依赖现有的版本。

默认 Lambda 使用这些 SDK JavaScript 的 AWS SDK – 2.290.0 Python (Boto3) 的 SDK – 3-1.7.74 botocore-1.10.74

但是您可以通过 npm(或您正在使用的任何工具)安装最新的 SDK,然后将所有文件上传到 lamda。

看看 SLS(无服务器框架),添加要部署的文件很容易;)

https://serverless.com/framework/docs/providers/aws/

https://serverless.com/framework/docs/providers/aws/guide/packaging/

我建议您创建一个库包,并使用库包中所需版本的 AWS-SDK(包括任何其他库)创建一个 Lambda Layer你要)。一旦您设置了 Lambda 层,您就可以将其分配给您的 Lambda 函数。这有助于减少 Lambda 函数的代码大小,而无需将您需要的所有库与每个 Lambda 函数捆绑在一起。考虑到 AWS-SDK 是一个相当大的库,Lambda Layer 将帮助您管理单个 Lambda 函数的大小,其中包含您的纯代码。

步骤简单

  1. 创建一个名为 nodejs 的目录,这将是您的项目目录。名字 mustnodejs.
  2. 执行 npm init 在此目录内。
  3. 安装来自 npm 使用 npm install --save注意:本地安装很重要。
  4. 完成后,压缩 nodejs 目录并将其上传到 Lambda 层。
  5. 在所有 Lambda 函数中使用 Lambda 层。

查看我的 article,了解有关如何为 Node JS 依赖项设置 Lambda 层的完整详细信息。我认为在未来,Lambda Layer 应该是每个人在 Lambda 中的依赖管理的选择。

注意:AWS re:Invent 2018 最近引入了 Lambda 层。它不仅与 NodeJS 兼容,而且还有几乎任何其他语言(根据亚马逊),如 Python、Java、C#、C++(是的!)、Go、Rust 等

我找到了一个简单的方法。 如果您有 webpack.config.js,您可以将 externals: ['aws-sdk'], 更改为 externals: [],

这样会强行把你发过来的节点包拿走,当然上传等会花一些时间,放一个简单的快速修复你可以试试。