使用 .zip 文件归档部署 Node.js Lambda 函数
您的 Amazon Lambda 函数代码由脚本或编译的程序及其依赖项组成。您可以使用部署程序包将函数代码部署到 Lambda。Lambda 支持两种类型的部署程序包:容器镜像和 .zip 文件归档。
要为 .zip 文件归档创建部署程序包,可以使用内置的 .zip 文件归档实用工具或任何其他 .zip 文件实用工具(例如 7zip
-
.zip 文件会包含函数的代码以及用于在 Lambda 上运行函数代码的所有依赖项(如果适用)。如果函数仅依赖于标准库或 Amazon 开发工具包库,则 .zip 文件中无需包含这些库。受支持的 Lambda 运行时环境中包含这些库。
-
如果 .zip 文件大于 50 MB,我们建议将其从 Amazon Simple Storage Service (Amazon S3) 存储桶上载到您的函数。
-
如果您的部署程序包包含本机库,则可以使用Amazon Serverless Application Model(Amazon SAM) 构建部署程序包。您可以将 Amazon SAM CLI
sam build
命令与--use-container
配合使用来创建部署程序包。此选项在与 Lambda 执行环境兼容的 Docker 映像内构建部署程序包。有关更多信息,请参阅 Amazon Serverless Application Model 开发人员指南中的 sam build。
您需要构建部署程序包才能与函数的此指令集架构兼容。
-
Lambda 使用 POSIX 文件权限,因此在创建 .zip 文件归档之前,您可能需要为部署程序包文件夹设置权限
。
先决条件
Amazon CLI 是一种开源工具,让您能够在命令行 Shell 中使用命令与 Amazon 服务进行交互。要完成本节中的步骤,您必须满足以下条件:
更新没有依赖项的函数
要使用 Lambda API 更新函数,请使用 UpdateFunctionCode 操作。创建包含函数代码的归档,然后使用 Amazon Command Line Interface (Amazon CLI) 上载该归档。
不使用依赖项更新 Node.js 函数
-
创建 .zip 文件存档。
zip function.zip index.js
-
使用
update-function-code
命令上载程序包。aws lambda update-function-code --function-name my-function --zip-file fileb://function.zip
您应看到以下输出:
{ "FunctionName": "my-function", "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:my-function", "Runtime": "nodejs12.x", "Role": "arn:aws:iam::
123456789012
:role/lambda-role
", "Handler": "index.handler", "CodeSha256": "Qf0hMc1I2di6YFMi9aXm3JtGTmcDbjniEuiYonYptAk=", "Version": "$LATEST", "TracingConfig": { "Mode": "Active" }, "RevisionId": "983ed1e3-ca8e-434b-8dc1-7d72ebadd83d", ... }
更新具有额外依赖项的函数
如果您的函数依赖于 Amazon SDK for JavaScript 之外的库,请使用 npm
如果您需要比运行时上包含的版本更新的版本,或者需要确保该版本在将来不会变化,则可以将 SDK for JavaScript 添加到部署包中。
如果您的部署程序包包含本机库,则可以使用Amazon Serverless Application Model(Amazon SAM) 构建部署程序包。您可以将 Amazon SAM CLI sam build
命令与 --use-container
配合使用来创建部署程序包。此选项在与 Lambda 执行环境兼容的 Docker 映像内构建部署程序包。
有关更多信息,请参阅 Amazon Serverless Application Model 开发人员指南中的 sam build。
作为替代方案,您可以使用可提供 Amazon Linux 环境的 Amazon EC2 实例来创建部署包。有关说明,请参阅 Amazon 计算博客中的在 Amazon 中使用程序包和本机 nodejs 模块
使用依赖项更新 Node.js 函数
-
打开命令行终端或 shell。确保本地环境中的 Node.js 版本与函数的 Node.js 版本相匹配。
-
为部署包创建文件夹。以下步骤假定该文件夹被命名为
my-function
。 -
使用
npm install
命令在 node_modules 目录中安装库。npm install aws-xray-sdk
这将创建一个类似于下面的文件夹结构:
~/my-function ├── index.js └── node_modules ├── async ├── async-listener ├── atomic-batcher ├── aws-sdk ├── aws-xray-sdk ├── aws-xray-sdk-core
-
创建一个包含您的项目文件夹内容的 .zip 文件。使用
r
(递归)选项来确保 zip 压缩子文件夹。zip -r function.zip .
-
使用
update-function-code
命令卸载程序包。aws lambda update-function-code --function-name my-function --zip-file fileb://function.zip
您应看到以下输出:
{ "FunctionName": "my-function", "FunctionArn": "arn:aws:lambda:us-east-2:123456789012:function:my-function", "Runtime": "nodejs12.x", "Role": "arn:aws:iam::123456789012:role/lambda-role", "Handler": "index.handler", "CodeSha256": "Qf0hMc1I2di6YFMi9aXm3JtGTmcDbjniEuiYonYptAk=", "Version": "$LATEST", "TracingConfig": { "Mode": "Active" }, "RevisionId": "983ed1e3-ca8e-434b-8dc1-7d72ebadd83d", ... }
除了代码和库之外,您的部署程序包还可以包含可执行文件和其他资源。有关详细信息,请参阅 Amazon Lambda 计算博客中的在 Amazon 中运行任意可执行文件