AWS Lambda 运行时环境不具备 AWS SDK 最新版本中的所有功能。我想将适用于 JavaScript 的 AWS SDK 的最新版本集成到我的 Node.js Lambda 函数。
简述
要将最新版本的 AWS SDK 集成到 Lambda 函数的部署包,请创建一个 Lambda 层。然后,将该层添加到您的函数。
**注意:**对于 Node.js 版本 16 及更早版本,Lambda Node.js 运行时包含适用于 JavaScript 的 AWS SDK 版本 2。对于 Node.js 版本 18 及更高版本,Lambda Node.js 运行时包含适用于 JavaScript 的 AWS SDK 版本 3。有关详细信息,请参阅适用于 JavaScript 的 AWS SDK 文档。
有关 Lambda 使用的运行时和 AWS SDK 版本的完整列表,请参阅 Lambda 运行时。
**注意:**以下解决方法会增加函数部署包的大小。有关 Lambda 存储配额的信息,请参阅 Lambda 配额。
解决方法
**注意:**如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI。
(可选)确认您的函数使用的 AWS SDK 版本
完成以下步骤:
**注意:**此方法仅适用于 Node.js 版本 16 及更早版本。
-
在 Lambda 控制台中创建一个函数。
-
更新函数的代码,使其在您调用函数时返回函数使用的 AWS SDK 的版本:
const AWS = require('aws-sdk')
exports.handler = async (event) => {
return AWS.VERSION;
};
-
调用您的函数。
-
将函数返回的 AWS SDK 版本与 AWS SDK 文档中的最新 AWS SDK 版本进行比较。
安装并打包最新版本的 AWS SDK
**注意:**部署包必须与您所使用的 Lambda 运行时兼容。最佳做法是为运行时使用在 Lambda 运行时中指定的操作系统 (OS)。
在兼容 Lambda 的开发环境中,完成以下步骤:
-
运行以下命令以创建目录:
mkdir -p aws-sdk-layer/nodejs
-
运行以下命令以更改为目录:
cd aws-sdk-layer/nodejs
-
为您的 Node.js 运行时版本安装 AWS SDK:
Node.js 16 及更早版本(AWS SDK 版本 2)
要安装最新版本的 AWS SDK 版本 2,请使用 Amazon Linux 2 兼容的实例运行以下命令:
npm install aws-sdk
有关详细信息,请参阅“教程: 在 Amazon EC2 实例上设置 Node.js”。
**注意:**最佳做法是在开发 Lambda 资源时使用 Amazon Linux 2 环境。
-或-
如果您使用 Windows 或 macOS 操作系统进行开发,请使用 Docker 运行以下命令:
docker run --entrypoint "" -v "$PWD":/var/task "public.ecr.aws/lambda/nodejs:<version>" /bin/sh -c "npm install aws-sdk; exit"
**注意:**在运行命令之前,请确保使用 Docker 网站上的最新版本的 Docker。
Node.js 18 及更高版本(AWS SDK 版本 3)
要安装最新版本的 AWS SDK 版本 3,请参阅安装适用于 JavaScript 的 SDK。
-
创建一个 .zip 文件来上传到您的 Lambda 层:
zip -r ../package.zip ../
-
(可选)验证您安装的 AWS SDK 的版本:
cat package-lock.json
示例输出:
{ "requires": true, "lockfileVersion": 1,
"dependencies": {
"aws-sdk": {
"version": "2.888.0",
...
使用 AWS CLI 或 Lambda 控制台创建 Lambda 层并将其添加到您的函数
AWS CLI
-
要创建包含最新版本的 AWS SDK 的新 Lambda 层,请运行以下 publish-layer-version 命令:
aws lambda publish-layer-version --layer-name node_sdk --description "My layer" --license-info "MIT" --compatible-runtimes --zip-file fileb://../package.zip --region
**注意:**请将 node_sdk 替换为您的层的名称,将 My layer 替换为层的描述。此外,请将 compatible-runtimes 值替换为您使用的运行时,将 region 替换为您的函数和层所在的 AWS 区域。
-
在输出中,复制 LayerVersionArn 值,以在下一步中使用。
-
要将层添加到您的函数,请运行以下 update-function-configuration 命令:
aws lambda update-function-configuration --function-name my-function --layers arn:aws:lambda:us-east-2:123456789012:layer:node_sdk:1 --region
**注意:**请将 my-function 替换为您的函数的名称,将 arn:aws:lambda:us-east-2:123456789012:layer:node_sdk:1 替换为输出中的 LayerVersionArn 值,将 region 替换为您的区域。
有关详细信息,请参阅使用层管理 Lambda 依赖项。
Lambda 控制台
要在 Lambda 控制台中创建 Lambda 层并将其添加到您的函数,请完成以下步骤:
- 在 Lambda 控制台中打开 Layers(层)页面。
- 选择 Create layer(创建层)。
- 对于 Name(名称),输入新层的名称。
- 选择 Upload a .zip file(上传 .zip 文件),然后选择您的部署包 .zip 文件的名称。
- 选择 Create(创建)。
- 在 Lambda 控制台中打开 Functions(函数)页面,然后选择要向其添加层的函数的名称。
- 在 Layers(层)中,选择 Add a layer(添加层)。
- 对于 Choose a layer(选择层),选择 Custom layers(自定义层)。
- 选择 Custom Layers(自定义层)下拉列表,然后选择您的自定义层。
- 选择 Add(添加)。
(可选)测试设置
完成“(可选)确认您的函数使用的 AWS SDK 版本”部分中的步骤,以调用您的函数。函数将返回所使用的 AWS SDK 的版本。
相关信息
使用 AWS Lambda 函数的最佳实践
如何为 Node.js 构建 Lambda 部署包?
如何为 Lambda Python 函数创建层?