使用 .zip 文件存档部署 Node.js Lambda 函数 - AWS Lambda

使用 .zip 文件存档部署 Node.js Lambda 函数

您的 AWS Lambda 函数代码由脚本或编译的程序及其依赖项组成。您可以使用部署程序包来将函数代码部署到 Lambda。Lambda 支持两种类型的部署程序包:容器映像和 .zip 文件。

要创建部署程序包,可以使用内置的 .zip 文件存档实用工具或任何其他 .zip 文件实用工具(例如 7zip)作为命令行工具。将 .zip 文件用作部署程序包,需遵循以下要求:

  • .zip 文件必须包含函数的代码以及用于在 Lambda 上运行函数代码的所有依赖项(如果适用)。如果函数仅依赖于标准库或 AWS 开发工具包库,则 .zip 文件中无需包含这些库。受支持的 Lambda 运行时环境中包含这些库。

  • .zip 文件必须小于 50MB。如果大于 50MB,我们建议将其上传到 Amazon Simple Storage Service (Amazon S3) 存储桶。

  • .zip 文件不得包含用 C 或 C ++ 编写的库。如果 .zip 文件包含 C 扩展库(例如 Pillow (PIL) 或 numpy库),我们建议使用 AWS 无服务器应用程序模型 (AWS SAM) 命令行界面 (CLI) 构建部署程序包。

本节介绍如何创建 .zip 文件作为部署程序包,然后使用 .zip 文件通过 AWS Command Line Interface (AWS CLI) 将函数代码部署到 Lambda。

先决条件

AWS CLI 是一种开源工具,让您能够在命令行 Shell 中使用命令与 AWS 服务进行交互。要完成本节中的步骤,您必须满足以下条件:

更新没有依赖项的函数

要使用 Lambda API 更新函数,请使用 UpdateFunctionCode 操作。创建包含函数代码的存档,然后使用 AWS Command Line Interface (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", "CodeSha256": "Qf0hMc1I2di6YFMi9aXm3JtGTmcDbjniEuiYonYptAk=", "Version": "$LATEST", "TracingConfig": { "Mode": "Active" }, "RevisionId": "983ed1e3-ca8e-434b-8dc1-7d72ebadd83d", ... }

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

如果您的函数依赖于 AWS SDK for JavaScript 之外的库,请使用 npm 将它们包含在您的部署包中。确保本地环境中的 Node.js 版本与函数的 Node.js 版本相匹配。如果任何库使用本机代码,请使用 Amazon Linux 环境创建部署包。

如果您需要比运行时上包含的版本更新的版本,或者需要确保该版本在将来不会变化,则可以将 SDK for JavaScript 添加到部署包中。

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

  1. 打开命令行终端或 shell。确保本地环境中的 Node.js 版本与函数的 Node.js 版本相匹配。

  2. 使用 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
  3. 创建一个包含您的项目文件夹内容的 .zip 文件。

    ~/my-function$ zip -r function.zip .
  4. 使用 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-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", ... }

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