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

使用 .zip 文件存档部署 Ruby 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 文件存档之前,您可能需要为部署程序包文件夹设置权限

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

先决条件

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

工具和库

Lambda 为 Ruby 运行时提供了以下工具和库:

适用于 Ruby 的工具和库

更新没有依赖项的函数

要使用 Lambda API 更新函数,请使用 UpdateFunctionCode 操作。创建包含函数代码的存档,然后使用 Amazon Command Line Interface (Amazon CLI) 上传该存档。

更新没有依赖项的 Ruby 函数

  1. 创建 .zip 文件存档。

    zip function.zip function.rb
  2. 要上传程序包,请使用 update-function-code 命令。

    aws lambda update-function-code --function-name my-function --zip-file fileb://function.zip

    您应看到以下输出:

    { "FunctionName": "my-function", "FunctionArn": "arn:aws-cn:lambda:us-west-2:123456789012:function:my-function", "Runtime": "ruby2.5", "Role": "arn:aws-cn:iam::123456789012:role/lambda-role", "Handler": "function.handler", "CodeSha256": "Qf0hMc1I2di6YFMi9aXm3JtGTmcDbjniEuiYonYptAk=", "Version": "$LATEST", "TracingConfig": { "Mode": "Active" }, "RevisionId": "983ed1e3-ca8e-434b-8dc1-7d72ebadd83d", ... }

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

如果您的函数依赖于Amazon SDK for Ruby之外的库,请使用 Bundler 将它们安装到本地目录,并将它们包含在部署程序包中。

更新具有依赖项的 Ruby 函数

  1. 使用 bundle 命令在供应商目录中安装库。

    bundle install --path vendor/bundle

    您应看到以下输出:

    Fetching gem metadata from https://rubygems.org/.............. Resolving dependencies... Fetching aws-eventstream 1.0.1 Installing aws-eventstream 1.0.1 ...

    --path 会将 Gem 安装在项目目录而不是系统位置,并将该目录设置为将来安装的默认路径。要稍后全局安装 Gem,请使用 --system 选项。

  2. 创建 .zip 文件存档。

    zip -r function.zip function.rb vendor

    您应看到以下输出:

    adding: function.rb (deflated 37%) adding: vendor/ (stored 0%) adding: vendor/bundle/ (stored 0%) adding: vendor/bundle/ruby/ (stored 0%) adding: vendor/bundle/ruby/2.7.0/ (stored 0%) adding: vendor/bundle/ruby/2.7.0/build_info/ (stored 0%) adding: vendor/bundle/ruby/2.7.0/cache/ (stored 0%) adding: vendor/bundle/ruby/2.7.0/cache/aws-eventstream-1.0.1.gem (deflated 36%) ...
  3. 更新函数代码。

    aws lambda update-function-code --function-name my-function --zip-file fileb://function.zip

    您应看到以下输出:

    { "FunctionName": "my-function", "FunctionArn": "arn:aws-cn:lambda:us-west-2:123456789012:function:my-function", "Runtime": "ruby2.5", "Role": "arn:aws-cn:iam::123456789012:role/lambda-role", "Handler": "function.handler", "CodeSize": 300, "CodeSha256": "Qf0hMc1I2di6YFMi9aXm3JtGTmcDbjniEuiYonYptAk=", "Version": "$LATEST", "RevisionId": "983ed1e3-ca8e-434b-8dc1-7d72ebadd83d", ... }