AWS Lambda
开发人员指南

Node.js 中的 AWS Lambda 部署程序包

部署程序包是包含函数代码和依赖项的 ZIP 存档。如果您使用 Lambda API 管理函数,或者需要包含 AWS 开发工具包以外的库和依赖项,则需要创建部署程序包。您可以将程序包直接上传到 Lambda,也可以使用 Amazon S3 存储桶、然后再将其上传到 Lambda。如果部署包大于 50 MB,则必须使用 Amazon S3。

如果您使用 Lambda 控制台编辑器编写您的函数,则控制台会管理部署程序包。如果您不需要添加任何库,则可以使用此方法。您也可以使用此方法更新在部署程序包中已经存在库的函数,前提是总大小不超过 3 MB。

注意

为了让您的部署程序包尽可能小,请将函数的依赖项打包到层中。层可让您独立管理依赖项,可以供多个函数使用,并且可以与其他账户共享。有关详细信息,请参阅AWS Lambda 层

更新没有依赖项的函数

要使用 Lambda API 创建或更新函数,请创建包含函数代码的存档,并使用 AWS CLI 上传它。

更新没有依赖项的 Node.js 函数

  1. 创建 ZIP 存档。

    ~/my-function$ zip function.zip index.js
  2. 使用 update-function-code 命令上传程序包。

    ~/my-function$ 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", "CodeSize": 300, "Description": "", "Timeout": 3, "MemorySize": 128, "LastModified": "2018-11-23T21:00:10.248+0000", "CodeSha256": "Qf0hMc1I2di6YFMi9aXm3JtGTmcDbjniEuiYonYptAk=", "Version": "$LATEST", "TracingConfig": { "Mode": "Active" }, "RevisionId": "983ed1e3-ca8e-434b-8dc1-7d72ebadd83d" }

更新具有额外依赖项的函数

如果您的函数依赖于 SDK for JavaScript 之外的库,请使用 NPM 将它们安装到本地目录中,并将它们包含在部署程序包中。如果您需要比运行时上包含的版本更新的版本,或者需要确保该版本在将来不会变化,则还可以包含 SDK for JavaScript。

使用依赖项更新 Node.js 函数

  1. 使用 npm install 命令在 node_modules 目录中安装库。

    ~/my-function$ 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
  2. 创建一个包含您的项目文件夹内容的 ZIP 文件。

    ~/my-function$ zip -r function.zip .
  3. 使用 update-function-code 命令上传程序包。

    ~/my-function$ 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", "CodeSize": 300, "Description": "My function", "Timeout": 3, "MemorySize": 128, "LastModified": "2018-11-23T21:00:10.248+0000", "CodeSha256": "Qf0hMc1I2di6YFMi9aXm3JtGTmcDbjniEuiYonYptAk=", "Version": "$LATEST", "TracingConfig": { "Mode": "Active" }, "RevisionId": "983ed1e3-ca8e-434b-8dc1-7d72ebadd83d" }

除了代码和库之外,您的部署程序包还可以包含可执行文件和其他资源。有关更多信息,请参阅下列内容: