Kien 向您演示如何
为 Node.js 构建
Lambda 部署程序包

我在 Node.js 中创建了一个 AWS Lambda 函数,但在调用期间出错。我该如何构建部署程序包以避免出错?

Node.js 中 Lambda 函数的一个常见错误是“找不到模块”。 导致该错误的常见原因是:您的部署程序包未对 Lambda 服务使用正确的文件夹结构以便加载模块和库,或者文件权限不正确。(Lambda 需要全局读取权限。)

按照以下说明构建一个部署程序包,其中包含位于 .zip 文件根目录下的函数代码,具有对所有文件的读取和执行权限。

Linux 和 macOS

将依赖项安装到函数项目文件夹下

注意:大多数 Node.js 模块都与平台无关,但某些模块是针对特定操作系统环境编译的。Lambda 在 Linux 环境下运行。在使用 npm 安装模块时,我们建议在 Linux 环境中构建 .zip 文件,确保包含正确的平台依赖项。

1.    在命令行界面 (CLI) 中,将目录更改为您的项目文件夹。例如:

cd /project-folder-name

注意:请将 project-folder-name 替换为您的项目文件夹的实际名称。

2.    使用命令 npm install package-name(将 package-name 替换为实际程序包名称),将您的依赖项本地安装到函数项目文件夹。例如,要将适用于 JavaScript 的 AWS 开发工具包模块安装到您项目文件夹的根目录下,请运行以下命令:

npm install aws-sdk

提示:AWS Lambda 将适用于 JavaScript 的 AWS 开发工具包库作为基本容器配置的一部分。但如果您需要使用不同版本的库,还可以包含本地副本。有关当前 Lambda 环境和支持库的更多信息,请参阅 Lambda 执行环境和可用库

对 Lambda 函数所需的每个模块运行命令。

注意:对于解压缩后的文件,函数大小限制为 250MB。仅包含函数正常工作所需的库。

构建部署程序包

在 CLI 中运行以下命令:

zip -r ../function-name.zip .

注意:请将 function-name 替换为您希望为您的部署程序包使用的文件名。

这会将项目文件夹中的所有文件置入父文件夹中的 .zip 文件内。

验证部署程序包

1.    在 CLI 中运行以下命令:

zipinfo ../function-name.zip

注意:请将 function-name 替换为您希望为您的部署程序包使用的实际文件名。

您还可以对 .zip 文件运行 unzip -l,以列出其内容,但输出结果可能不够详细。

2.    检查输出结果,确保函数处理程序源文件位于 .zip 文件的根目录中。

3.    检查输出结果,确保您的文件具有全局读取权限。有关更多信息,包括在需要时如何修复权限,请参阅 Lambda 部署程序包上的权限策略

Windows

构建部署程序包

1.    在文件资源管理器中,打开您的项目文件夹。

2.    选择所有项目文件,然后右键单击以打开上下文菜单。

3.    选择发送到,然后选择压缩 (zipped) 文件夹

4.    为 .zip 文件输入一个名称。

上传并验证部署程序包

1.    在 Lambda 控制台中,选择您的函数。

2.    对于 Function code (函数代码) 下的代码输入种类,选择 上传 .zip 文件

3.    在函数程序包下,选择上传

4.    选择您创建的 .zip 文件,然后选择打开

5.    在控制台顶部,选择保存

提示:您还可以通过 AWS 命令行界面 (AWS CLI) 运行 update-function-code 来上传压缩文件。

6.    上传完成后,选择测试

提示:您还可以通过 AWS CLI 使用 7-Zip 验证您的部署程序包的文件权限。从 7-Zip 网站下载该程序。有关更多信息,请参阅 Lambda 部署程序包上的权限策略


此页内容对您是否有帮助? |

返回 AWS Support 知识中心

需要帮助? 请访问 AWS Support 中心

发布时间:2018 年 6 月 29 日

更新时间:2019 年 2 月 15 日