上次更新时间:2020 年 4 月 30 日
AWS Lambda 执行环境不具有最新版本 AWS 开发工具包的某些功能。如何使用层将最新版本的适用于 JavaScript 的 AWS 开发工具包集成到 Node.js Lambda 函数中?
简短描述内置在 Lambda 执行环境中的 AWS 开发工具包版本不会一直处于最新状态,因此有些新的开发工具包功能可能不可用。使用 Lambda 层将最新版本的 AWS 开发工具包集成到 Lambda 函数部署程序包中。
注意:此解决方案可增加函数部署程序包的大小。有关 Lambda 存储资源的信息,请参阅 AWS Lambda 限制。
以下说明将以 Node.js 10.x 运行时为例。有关适用于 Node.js 和其他语言的运行时的列表以及 Lambda 目前使用的 AWS 开发工具包版本,请参阅 AWS Lambda 运行时。
解决方法注意:如果您在运行 AWS 命令行界面 (AWS CLI) 命令时遇到错误,请确保您运行的是最新版本的 AWS CLI。
(可选)检查 AWS 开发工具包版本
要确认当前 AWS 开发工具包的版本,请执行以下操作:
1.在 Lambda 控制台中创建函数。
2.更新函数代码,以输出 AWS 开发工具包的版本。如果您使用的是 Node.js 10x 运行时,您可以使用此示例代码:
const AWS = require('aws-sdk')
exports.handler = async (event) => {
return AWS.VERSION;
};
3.执行您的函数。此函数将返回 AWS 开发工具包的版本。
4.将函数返回的 AWS 开发工具包版本与 AWS 开发工具包文档中确定的最新版本进行比较。
安装并打包最新的 AWS 开发工具包版本
注意:部署程序包必须与 Lambda 环境兼容。对于以下步骤,最佳实践是按照 AWS Lambda 运行时中的规定,为您的运行时使用匹配的操作系统。
在兼容 Lambda 的本地开发环境中执行以下操作:
1.创建工作目录:
mkdir -p aws-sdk-layer/nodejs
2.切换到工作目录:
cd aws-sdk-layer/nodejs
3.安装最新版本的 AWS 开发工具包:
npm install aws-sdk
4.创建 .zip 文件以上传到层。
zip -r ../package.zip ../
5.(可选)验证您已安装的 AWS 开发工具包版本:
cat package-lock.json
输出类似于以下内容:
{
"requires": true,
"lockfileVersion": 1,
"dependencies": {
"aws-sdk": {
"version": "2.633.0",
...
创建层并将其添加到您的函数 (AWS CLI)
注意:您也可以使用 Lambda 控制台创建一个层并将其添加到您的函数。有关控制台说明,请参阅以下部分。
1.从 AWS CLI 运行 Lambda publish-layer-version 命令:
注意:请将 node_sdk 替换为您要为层指定的名称。或者将 "My layer" 替换为层的描述。
aws lambda publish-layer-version --layer-name node_sdk --description "My layer" --license-info "MIT" --compatible-runtimes nodejs10.x --zip-file fileb://../package.zip
在输出中,记下 LayerVersionArn。要了解更多信息,请参阅管理层。
2.运行 Lambda update-function-configuration 命令:
注意:请将 my-function 替换为您的函数的名称。将 arn:aws:lambda:us-east-2:123456789012:layer:node_sdk:1 替换为上一步中的 LayerVersionArn。
aws lambda update-function-configuration --function-name my-function --layers arn:aws:lambda:us-east-2:123456789012:layer:node_sdk:1
有关更多信息,请参阅配置函数以使用层。
创建层并将其添加到函数(Lambda 控制台)
1.打开 Lambda 控制台的层页面。
2.在层页面上,选择创建层。
3.在创建层页面执行以下操作:
在名称中,输入该层的名称。
(可选)在描述 - 可选中,输入该层的描述。
选择上传 .zip 文件。
选择上传,然后选择您的部署程序包 .zip 文件。
对于兼容运行时 - 可选,请选择一个或多个兼容的运行时。对于 Node.js 10x 示例,请选择 Node.js 10x。
(可选)对于许可证 - 可选,为层输入软件许可证信息。
选择创建。
4.在 Lambda 控制台的函数页面上,选择您的函数。
5.在设计器下您的函数名称下,选择层。
6.在层下,选择添加层。
7.在将层添加到函数页面上的层选择下,选择从兼容运行时的层的列表中选择。
8.在兼容的层下,执行以下操作:
对于名称,选择您创建的层。
对于版本,选择 1。
9.选择添加。
10.选择保存。
(可选)检查 AWS 开发工具包版本
再次执行您的 Lambda 函数。您的函数将返回您之前使用 npm 安装的最新版本 AWS 开发工具包。
您可以在您使用的 AWS 开发工具包的 CHANGELOG 文件中验证最新版本。例如,请参阅 GitHub 上适用于 JavaScript 的 AWS 开发工具包的 Changelog。