如何使用层将最新版本的适用于 JavaScript 的 AWS 开发工具包集成到 Node.js Lambda 函数中?
上次更新时间:2021 年 5 月 12 日
AWS Lambda 运行时环境不具有最新版本 AWS 开发工具包的某些功能。如何使用层将最新版本的适用于 JavaScript 的 AWS 开发工具包集成到 Node.js Lambda 函数中?
简短描述
要将最新版本的 AWS 开发工具包集成到 Lambda 函数的部署程序包中,请创建 Lambda 层,然后将其添加到函数中。您可以使用 AWS 命令行界面 (AWS CLI) 或 Lambda 控制台创建 Lambda 层并将其添加到函数中。
以下过程使用 Node.js 14x 运行时作为示例。有关 Lambda 当前使用的运行时和 AWS 开发工具包版本的完整列表,请参阅 AWS Lambda 运行时。
注意:下面的解决方案可增加函数部署程序包的大小。有关 Lambda 存储限制的信息,请参阅 Lambda 配额。
解决方法
注意:如果您在运行 AWS 命令行界面 (AWS CLI) 命令时遇到错误,请确保您运行的是最新版本的 AWS CLI。
(可选)确认函数正在使用的 AWS 开发工具包版本
要确认函数使用的 AWS 开发工具包版本,请执行以下操作:
2. 更新函数的代码,以返回调用函数时所使用的 AWS 开发工具包的版本。
Node.js 代码,使 Lambda 函数输出所使用的 AWS 开发工具包的版本
const AWS = require('aws-sdk')
exports.handler = async (event) => {
return AWS.VERSION;
};
3. 调用函数。此函数将返回其所使用的 AWS 开发工具包的版本。
4. 将函数返回的 AWS 开发工具包版本与 AWS 开发工具包文档中列出的最新版本的 AWS 开发工具包进行比较。
安装和打包最新版本的 AWS 开发工具包
注意:部署程序包必须与您所使用的 Lambda 运行时兼容。最佳实践是使用 AWS Lambda 运行时中规定的运行时相同的操作系统。例如,通过启动兼容的 Amazon Elastic Compute Cloud (Amazon EC2) 实例。
在兼容 Lambda 的本地开发环境中执行以下操作:
1. 运行以下命令行界面 (CLI) 命令,创建工作目录:
mkdir -p aws-sdk-layer/nodejs
2. 运行以下命令以更改到工作目录:
cd aws-sdk-layer/nodejs
3. 要安装最新版本的 AWS 开发工具包,请使用 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:14" /bin/sh -c "npm install aws-sdk; exit"
注意:在运行命令之前,请确保您使用的是最新版本的 Docker 。
4. 运行以下命令,创建 .zip 文件上传到 Lambda 层 :
zip -r ../package.zip ../
5. (可选)运行以下命令,验证您已安装的 AWS 开发工具包版本:
cat package-lock.json
命令输出示例
{
"requires": true,
"lockfileVersion": 1,
"dependencies": {
"aws-sdk": {
"version": "2.888.0",
...
创建 Lambda 层并使用 AWS CLI 将其添加到您的函数
1. 要创建包含要使用的最新版本的 AWS 开发工具包的新 Lambda 层,请运行以下发布层版本的 AWS CLI 命令:
注意:请将 node_sdk 替换为您要为层指定的名称。将我的层替换为层的描述。将兼容的运行时值替换为您所使用的运行时。将区域值替换为您的函数和层所在的 AWS 区域。
aws lambda publish-layer-version --layer-name node_sdk --description "My layer" --license-info "MIT" --compatible-runtimes nodejs14.x --zip-file fileb://../package.zip --region <specify a region>
您需要使用命令输出中的 LayerVersionArn 值来完成下一步。
2. 要将层添加到函数中,请运行以下更新函数配置命令:
注意:请将 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 --region <specify a region>
有关更多信息,请参阅配置函数以使用层。
创建 Lambda 层并使用 Lambda 控制台将其添加到您的函数
1. 打开 Lambda 控制台中的层页面。
2. 选择创建层。然后执行以下操作:
在名称中,输入新层的名称。
(可选)在描述 - 可选中,输入该层的描述。
选择上传 .zip 文件。
选择上传。然后,选择您的部署程序包 .zip 文件的名称。
对于兼容运行时 - 可选,请选择一个或多个兼容的运行时。对于本文中的示例,为 Node.js 14X。
(可选)对于许可证 - 可选,为层输入任何适用的软件许可证信息。
选择 Create(创建)。
3. 打开 Lambda 控制台中的函数页面。然后,选择要向其中添加层的函数的名称。
4. 在函数概述下方,选择 层。
5. 选择 Add a layer (添加层)。
6. 在选择层下,选择自定义层。然后执行以下操作:
选择您创建的层的名称。
对于版本,选择要使用的层的版本。来看一个例子 1。
选择 Add(添加)。
(可选)测试设置
按照(可选)确认函数正在使用的 AWS 开发工具包版本部分中的步骤调用函数。此函数将返回其所使用的 AWS 开发工具包的版本。
您还可以在您使用的 AWS 开发工具包的 CHANGELOG 文件中验证 AWS 开发工具包最新版本。有关更多信息,请参阅 GitHub 上适用于 JavaScript 的 AWS 开发工具包的 Changelog。