如何使用层将最新版本的适用于 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 开发工具包版本,请执行以下操作:

1.    在 Lambda 控制台中创建函数

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


这篇文章对您有帮助吗?


您是否需要账单或技术支持?