AWS Lambda
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

Ruby 中的 AWS Lambda 部署程序包

部署程序包是包含函数代码和依赖项的 ZIP 存档。如果您使用 Lambda API 管理函数,或者您的代码使用 AWS SDK 以外的库,则需要创建部署程序包。需要将其他库和依赖项包含在部署程序包中。您可以将程序包直接上传到 Lambda,也可以使用 Amazon S3 存储桶、然后再将其上传到 Lambda。

如果您使用 Lambda 控制台编辑器编写您的函数,则控制台会管理部署程序包。如果您不需要添加任何库,则可以使用此方法。您也可以使用此方法更新在部署程序包中已经存在库的函数,前提是总大小不超过 3 MB。

更新没有依赖项的函数

要使用 Lambda API 创建或更新函数,请创建包含函数代码的存档,并使用 AWS CLI 上传。

更新没有依赖项的 Ruby 函数

  1. 创建 ZIP 存档。

    ~/my-function$ zip function.zip function.rb
  2. 使用 update-function-code 命令上传程序包。

    ~/my-function$ aws lambda update-function-code --function-name ruby25 --zip-file fileb://function.zip { "FunctionName": "ruby25", "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:ruby25", "Runtime": "ruby2.5", "Role": "arn:aws:iam::123456789012:role/lambda-role", "Handler": "function.handler", "CodeSize": 300, "Description": "", "Timeout": 3, "MemorySize": 128, "LastModified": "2018-11-23T21:00:10.248+0000", "CodeSha256": "Qf0haXm3JtGTmcDbjMc1I2di6YFMi9niEuiYonYptAk=", "Version": "$LATEST", "TracingConfig": { "Mode": "Active" }, "RevisionId": "d1e983e3-ca8e-434b-8dc1-7add83d72ebd" }

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

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

更新具有依赖项的 Ruby 函数

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

    ~/my-function$ 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 存档。

    package$ 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.5.0/ (stored 0%) adding: vendor/bundle/ruby/2.5.0/build_info/ (stored 0%) adding: vendor/bundle/ruby/2.5.0/cache/ (stored 0%) adding: vendor/bundle/ruby/2.5.0/cache/aws-eventstream-1.0.1.gem (deflated 36%) ...
  3. 更新函数代码。

    ~/my-function$ aws lambda update-function-code --function-name ruby25 --zip-file fileb://function.zip { "FunctionName": "ruby25", "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:ruby25", "Runtime": "ruby2.5", "Role": "arn:aws:iam::123456789012:role/lambda-role", "Handler": "function.handler", "CodeSize": 998918, "Description": "", "Timeout": 3, "MemorySize": 128, "LastModified": "2018-11-20T20:51:35.871+0000", "CodeSha256": "fJ3TxYnFosnnpN483dz9/rTzcXrbOiuu4iOZx34nXZI=", "Version": "$LATEST", "VpcConfig": { "SubnetIds": [], "SecurityGroupIds": [], "VpcId": "" }, "TracingConfig": { "Mode": "Active" }, "RevisionId": "9ca7c45b-bcda-4e51-ab5f-7c42fa916e39" }