使用 .zip 文件归档部署 Node.js Lambda 函数 - Amazon Lambda
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

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

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

  • .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 函数
  1. 创建 .zip 文件存档。

    zip function.zip index.js
  2. 使用 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 将它们包含在您的部署包中。确保本地环境中的 Node.js 版本与函数的 Node.js 版本相匹配。如果任何库使用本机代码,请使用 Amazon Linux 环境创建部署包。

如果您需要比运行时上包含的版本更新的版本,或者需要确保该版本在将来不会变化,则可以将 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 函数
  1. 打开命令行终端或 shell。确保本地环境中的 Node.js 版本与函数的 Node.js 版本相匹配。

  2. 为部署包创建文件夹。以下步骤假定该文件夹被命名为 my-function

  3. 使用 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
  4. 创建一个包含您的项目文件夹内容的 .zip 文件。使用 r (递归)选项来确保 zip 压缩子文件夹。

    zip -r function.zip .
  5. 使用 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 中运行任意可执行文件