使用 .zip 文件归档部署 Ruby Lambda 函数
您的 AWS Lambda 函数代码由脚本或编译的程序及其依赖项组成。您可以使用部署程序包将函数代码部署到 Lambda。Lambda 支持两种类型的部署程序包:容器镜像和 .zip 文件归档。
要为 .zip 文件存档创建部署程序包,可以使用内置的 .zip 文件存档实用工具或任何其他 .zip 文件实用工具(例如 7zip
-
.zip 文件会包含函数的代码以及用于在 Lambda 上运行函数代码的所有依赖项(如果适用)。如果函数仅依赖于标准库或 AWS 开发工具包库,则 .zip 文件中无需包含这些库。受支持的 Lambda 运行时环境中包含这些库。
-
如果 .zip 文件大于 50 MB,我们建议将其从 Amazon Simple Storage Service (Amazon S3) 存储桶上载到您的函数。
-
如果您的部署程序包包含本机库,则可以使用AWS Serverless Application Model(AWS SAM) 构建部署程序包。您可以将 AWS SAM CLI
sam build
命令与--use-container
配合使用来创建部署程序包。此选项在与 Lambda 执行环境兼容的 Docker 镜像内构建部署程序包。有关更多信息,请参阅 AWS Serverless Application Model 开发人员指南中的 sam build。
您需要构建部署程序包才能与函数的此指令集架构兼容。
-
Lambda 使用 POSIX 文件权限,因此在创建 .zip 文件归档之前,您可能需要为部署程序包文件夹设置权限
。
Prerequisites
AWS CLI 是一种开源工具,让您能够在命令行 Shell 中使用命令与 AWS 服务进行交互。要完成本节中的步骤,您必须满足以下条件:
工具和库
Lambda 为 Ruby 运行时提供了以下工具和库:
适用于 Ruby 的工具和库
-
适用于 Ruby 的 AWS 开发工具包
:适用于 Ruby 编程语言的官方 AWS 开发工具包。
更新没有依赖项的函数
要使用 Lambda API 更新函数,请使用 UpdateFunctionCode 操作。创建包含函数代码的归档,然后使用 AWS Command Line Interface (AWS CLI) 上载该归档。
更新没有依赖项的 Ruby 函数
-
创建 .zip 文件存档。
zip function.zip function.rb
-
使用
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", ... }
更新具有额外依赖项的函数
如果您的函数依赖于AWS SDK for Ruby之外的库,请使用 Bundler
更新具有依赖项的 Ruby 函数
-
使用
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'
。 -
创建 .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%) ...
-
更新函数代码。
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", ... }