Ruby 包版本不匹配 Ruby AWS Lambda 函数版本

Ruby bundle version doesn't match Ruby AWS Lambda function version

我在 AWS 上创建了一个 Lambda 函数并选择了运行时:Ruby 版本 2.7.0。 然后我使用以下命令将带有 .zip 文件存档的 Ruby 函数部署到此 AWS Lambda 函数:

bundle config set --local path 'vendor/bundle'
bundle install
zip -r my_function.zip lambda_function.rb vendor
aws lambda update-function-code --function-name test-function --zip-file fileb://my_function.zip 

部署成功,但是所有库都已添加到 vendor/bundle/ruby/2.4.0/...,但未添加到 vendor/bundle/ruby/2.7.0/...

  adding: vendor/bundle/ruby/2.4.0/ (stored 0%)
  adding: vendor/bundle/ruby/2.4.0/build_info/ (stored 0%)
  adding: vendor/bundle/ruby/2.4.0/doc/ (stored 0%)
  adding: vendor/bundle/ruby/2.4.0/gems/ (stored 0%)
  adding: vendor/bundle/ruby/2.4.0/gems/aws-eventstream-1.2.0/ (stored 0%)
  adding: vendor/bundle/ruby/2.4.0/gems/aws-eventstream-1.2.0/CHANGELOG.md (deflated 50%)
  adding: vendor/bundle/ruby/2.4.0/gems/aws-eventstream-1.2.0/LICENSE.txt (deflated 65%)
  adding: vendor/bundle/ruby/2.4.0/gems/aws-eventstream-1.2.0/lib/ (stored 0%)
  adding: vendor/bundle/ruby/2.4.0/gems/aws-eventstream-1.2.0/lib/aws-eventstream.rb (deflated 63%)
  adding: vendor/bundle/ruby/2.4.0/gems/aws-eventstream-1.2.0/lib/aws-eventstream/ (stored 0%)
  adding: vendor/bundle/ruby/2.4.0/gems/aws-eventstream-1.2.0/lib/aws-eventstream/types.rb (deflated 62%)
  adding: vendor/bundle/ruby/2.4.0/gems/aws-eventstream-1.2.0/lib/aws-eventstream/header_value.rb (deflated 57%)
  ...

我找不到导致问题的原因。如何通过将库添加到 vendor/bundle/ruby/2.7.0/... 来部署 lambda?

GEMFILE.lock 文件是:

GEM
  remote: https://rubygems.org/
  specs:
    aws-eventstream (1.2.0)
    aws-partitions (1.547.0)
    aws-sdk-core (3.125.1)
      aws-eventstream (~> 1, >= 1.0.2)
      aws-partitions (~> 1, >= 1.525.0)
      aws-sigv4 (~> 1.1)
      jmespath (~> 1.0)
    aws-sdk-sqs (1.49.0)
      aws-sdk-core (~> 3, >= 3.125.0)
      aws-sigv4 (~> 1.1)
    aws-sigv4 (1.4.0)
      aws-eventstream (~> 1, >= 1.0.2)
    bindata (2.4.10)
    colorize (0.8.1)
    jmespath (1.4.0)
    json (2.6.1)
    redis (4.5.1)

PLATFORMS
  x86_64-darwin-20

DEPENDENCIES
  aws-sdk-sqs
  bindata
  colorize
  json
  redis

BUNDLED WITH
   2.3.4

您在本地使用 Ruby 2.4.0 来捆绑您的 Ruby 应用程序,这让 Bundler(正确地)相信您的目标是 2.4.0,然后结果在正在填充的 vendor/bundle/ruby/2.4.0/ 文件夹中。

您应该安装并使用 Ruby 2.7.0 将本地 Ruby 版本同步到您的目标 Lambda 运行时。

在用 ruby -v 确认您确实在 2.7.0 上后,重新安装 Bundler (gem install bundler),然后重新运行上述命令。

您应该在 运行 bundle install 之后填充 vendor/bundle/ruby/2.7.0/ 文件夹,zip -r 的输出也显示了这一点。