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

Prerequisites

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:lambda:us-west-2:123456789012:function:my-function", "Runtime": "ruby2.5", "Role": "arn:aws: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 config set --local path 'vendor/bundle' \ bundle install

    您应看到以下输出:

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

    这会将 Gem 安装在项目目录而不是系统位置,并将 vendor/bundle 设置为将来安装的默认路径。稍后要全局安装 Gem,请使用 bundle config set --local system 'true'

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